【解決方法】ツリービューでツリー ノードのテキストを変更する c# win. 形

プログラミングQA

[ad_1]

方法 制限 からの誰か テキストの入力 ツリー ノードで。 確認したい」treeView1_AfterLabelEdit“挿入されたテキストが既に保存されている場合。はいの場合、挿入されたテキストを「新規」に変更する必要があります。その方法は?

解決策 1

C#
/* Get the tree node under the mouse pointer and 
   save it in the mySelectedNode variable. */ 
private void treeView1_MouseDown(object sender, 
  System.Windows.Forms.MouseEventArgs e)
{
   mySelectedNode = treeView1.GetNodeAt(e.X, e.Y);
}

private void menuItem1_Click(object sender, System.EventArgs e)
{
   if (mySelectedNode != null && mySelectedNode.Parent != null)
   {
      treeView1.SelectedNode = mySelectedNode;
      treeView1.LabelEdit = true;
      if(!mySelectedNode.IsEditing)
      {
         mySelectedNode.BeginEdit();
      }
   }
   else
   {
      MessageBox.Show("No tree node selected or selected node is a root node.\n" + 
         "Editing of root nodes is not allowed.", "Invalid selection");
   }
}

private void treeView1_AfterLabelEdit(object sender, 
         System.Windows.Forms.NodeLabelEditEventArgs e)
{
   if (e.Label != null)
   {
     if(e.Label.Length > 0)
     {
        if (e.Label.IndexOfAny(new char[]{'@', '.', ',', '!'}) == -1)
        {
           // Stop editing without canceling the label change.
           e.Node.EndEdit(false);
        }
        else
        {
           /* Cancel the label edit action, inform the user, and 
              place the node in edit mode again. */
           e.CancelEdit = true;
           MessageBox.Show("Invalid tree node label.\n" + 
              "The invalid characters are: '@','.', ',', '!'", 
              "Node Label Edit");
           e.Node.BeginEdit();
        }
     }
     else
     {
        /* Cancel the label edit action, inform the user, and 
           place the node in edit mode again. */
        e.CancelEdit = true;
        MessageBox.Show("Invalid tree node label.\nThe label cannot be blank", 
           "Node Label Edit");
        e.Node.BeginEdit();
     }
   }
}

TreeView.LabelEdit プロパティ[^]

-KR

解決策 3

新しいラベルに無効な文字がある場合にメッセージボックスを表示する代わりに、ツリービューまたは xml の有効な文字に置き換えることができます。

public static class StringExtension
			{
			public static string Clean(string s)
				{
				return new StringBuilder(s)
					  .Replace("&", "_and_")
					  .Replace("@", "-a-")
					  .Replace(" ", "_")
					  .Replace("!","-")
					  .Replace(".", "_")					  
					  .Replace(",", "")					  
					  .Replace("'", "")
					  .Replace("(","-")
					  .Replace (")", "-")
					  .ToString();
				}
			}

		private void trwItems_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
			{
			if (e.Label != null)
				{
				if (e.Label.Length > 0)
					{
					if (e.Label.IndexOfAny(new char[] { '@', '.', ',', '!',' ', '|','<','>' }) == -1)
						{
						// Stop editing without canceling the label change.
						e.Node.EndEdit(false);
						}
					else
						{
						/* Cancel the label edit action, inform the user, and
						   place the node in edit mode again. */
						e.Node.Text = StringExtension.Clean(e.Label);
						e.CancelEdit = true;
						//MessageBox.Show("Invalid tree node label.\n" +
						//   "The invalid characters are: '@','.', ',', '!', empty space",
						//   "Node Label Edit");
						//e.Node.BeginEdit();
						}
					}
				else
					{
					/* Cancel the label edit action, inform the user, and
					   place the node in edit mode again. */
					e.CancelEdit = true;
					MessageBox.Show("Invalid tree node label.\nThe label cannot be blank",
					   "Node Label Edit");
					e.Node.BeginEdit();
					}
				}

			
			}

解決策 2

また、ラベルの変更後にノードを次のように更新する必要があります。

// ラベルの変更をキャンセルせずに編集を停止します。
e.Node.EndEdit(false);

//ここで、ノードをテキストで更新します (これにより node.fullpath も変更されます)
e.Node.Text = e.Label;

以下の MS サイトも参照してください。

TreeNode.EndEdit(Boolean) メソッド (System.Windows.Forms) | Microsoft Docs[^]

[ad_2]

コメント

タイトルとURLをコピーしました