如何在 Windows Forms TreeView 中通过标记 select 节点

How to select a Node by Tag in Windows Forms TreeView

我正在尝试 select 通过标签的节点。我已经尽我所能,但仍然没有运气。我用它为 treeview

中的每个节点分配了一个标签
 foreach (DataRow dataRow in databaseFunc.dataTable.Rows)
 {
      TreeNode nodes = new TreeNode();
      nodes.Text = dataRow["LastName"].ToString().Trim() + ", " +
            dataRow["FirstName"].ToString().Trim();
      nodes.Tag = dataRow[0].ToString().Trim();
      treeView.Nodes.Add(nodes);
 }

我知道你可以select一个节点使用:

 TreeNodeCollection nodeCollect = treeView.Nodes;
 treeView.SelectedNode = nodeCollect[index];

按标签查找

Tag 包含复杂对象或您想基于非字符串键查找时,通过 Tag 查找特别有用。

为了能够在子节点上进行搜索,您可以查看 answer here 并使用 Descendants 扩展方法来查找包括子节点在内的所有节点。然后可以通过Tag找到节点。例如 Tag 包含一个 Product 并且你想根据它的 Id 查找产品,你可以使用这样的代码:

var result = tree.Descendants().Where(x=>((x.Tag as Product) != null) &&
                                     (x.Tag as Product).Id = someId).FirstOrDefault();

或者对于简单的字符串搜索键:

var result = tree.Descendants().Where(x=>(x.Tag as string) == searchkey).FirstOrDefault();
if(result!=null)
    tree.SelectedNode = result;

如果您只想在根节点之间搜索,请使用:

var result = tree.Nodes.Cast<TreeNode>().Where(... the rest is like above.

按名称查找

您可以使用 Find method of Nodes collection to find a node based on its Name(不是文本)。当您想根据字符串键查找节点时,使用 Find 方法很有用。为此,您应该在创建节点时设置节点的Name

var result = tree.Nodes.Find(searchKey , true).FirstOrDefault();
if(result !=null)
    tree.SelectedNode = result;

如果您只想在根节点之间搜索,请使用:

var result = tree.Nodes.Find(searchKey , false).FirstOrDefault();

备注

作为结论,您可以使用 Tag 属性 将复杂对象存储在 Tag 中,并在需要时将其拆箱。对于字符串搜索键,最好使用 Name 属性,如 .

中所述