繁体   English   中英

如何通过使用C#提供节点名称从Treeview中删除Node

[英]How to remove Node from Treeview by giving Node Name using C#

我通过此代码在My Treeview中添加节点

 trvMenu.Nodes.Clear();   
 trvMenu.Nodes.Add("TestNode"); 

并成功添加,

现在我要删除它,所以我正在编写此代码

  TreeNode tn = new TreeNode("TestNode");
  this.trvMenu.Nodes.Remove(tn);

但它不工作!!!

目前我通过查找索引而不是通过索引删除它,并通过以下代码很好地删除它:

                    int foundIndex = 0;
                    int indexCount = 0;
                    foreach (TreeNode myString in trvMenu.Nodes)
                    {


                        if (myString.Text == "TestNode")
                        {
                            foundIndex = indexCount;


                        }
                        indexCount++;


                    } 
                    this.trvMenu.Nodes[foundIndex].Remove();  

请帮助我。

它不起作用,因为您要删除的是另一个对象。 请注意,您正在创建一个新的TreeNode。 要从TreeView中删除节点,您必须找到适当的对象。

在winforms中,您可以通过使用适当的密钥搜索节点来完成此操作。 但首先,添加到树中的节点必须具有以下名称:

TreeNode tn = new TreeNode();
tn.Name = "TestNode";
trvMenu.Nodes.Add(tn);

您可以在树中搜索它并将其删除

TreeNode[] nodes = trvMenu.Nodes.Find("TestNode", true);
if (nodes.Length > 0)
    trvMenu.Nodes.Remove(nodes[0]);

您创建了一个具有特定引用的新节点,该引用与您添加的引用不同。

你可以使用Linq,只需写:

TreeNode node = this.trvMenu.Nodes.Cast<TreeNode>().FirstOrDefault( x => x.Name == "TestNode" )
if (node != null)
{
    this.trvMenu.Nodes.Remove(node);
}

不确定“Name”属性是否正确,只需根据需要进行更改。

编辑:如果有人问以后为什么会发生这种情况:“删除”只查找确切的引用,这意味着您必须为其提供要删除的确切对象。 为此,您首先必须查找该对象,并将其传递给Remove。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM