[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(); } } }
-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]
コメント