C# 如何在TreeView中找到根节点
我的Windows应用程序中有一个TreeView。在这个树视图中,用户可以为这些根节点添加一些根节点和一些子节点,也可以为这些子节点添加一些子节点,等等 例如:C# 如何在TreeView中找到根节点,c#,winforms,treeview,C#,Winforms,Treeview,我的Windows应用程序中有一个TreeView。在这个树视图中,用户可以为这些根节点添加一些根节点和一些子节点,也可以为这些子节点添加一些子节点,等等 例如: Root1 A B C D E Root2 F G . . . 现在我的问题是,如果我在节点“E”,找到第一个根节点(“Root1”)的最佳方法是什么?这里有一个小方法供您使用: private TreeNode FindRoo
Root1
A
B
C
D
E
Root2
F
G
.
.
.
现在我的问题是,如果我在节点“E”,找到第一个根节点(“Root1”)的最佳方法是什么?这里有一个小方法供您使用:
private TreeNode FindRootNode(TreeNode treeNode)
{
while (treeNode.Parent != null)
{
treeNode = treeNode.Parent;
}
return treeNode;
}
您可以这样调用代码:
var rootNode = FindRootNode(currentTreeNode);
获取根树节点的示例:
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
var node = (e == null ? ((System.Windows.Forms.TreeView)sender).SelectedNode : e.Node);
var rootNode = RootTreeNode(node);
}
享受谢谢Fischermaen,所以treeview没有任何属性来查找子节点的根节点,是吗?最好在填充过程中缓存根。@Dmitry:谢谢你提到这一点。缓存根值有一些缺点:必须跟踪每次更改(将节点放到其他位置时),并且必须添加包含数据对象和根节点的管理对象。我的答案有那么糟糕,你不得不投反对票吗?我认为MS treeview只有一个根,可以通过.topnode属性访问它
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
var node = (e == null ? ((System.Windows.Forms.TreeView)sender).SelectedNode : e.Node);
var rootNode = RootTreeNode(node);
}