是否可以在Winforms TreeView中使节点不可见?

时间:2009-12-04 17:58:25

标签: .net winforms

我当时认为这将是显示具有多个顶级节点的Treeview的有用方式。

示例:假设我想创建一个地理的TreeView,我希望顶级节点是国家/地区。我可以通过以下方式做到这一点:

  • 世界
    • 墨西哥
    • 日本

但用户想要的是:

  • 墨西哥
  • 日本

如果我可以构建一个TreeView并简单地隐藏World而不是构建两个TreeView,那将是很好的。

更新==========================

我想要这样做的原因是我有递归处理TreeView的例程,例如在更新之前遍历树以保持其崩溃/展开状态。有一个不可见的topnode开始处理。

会很高兴

2 个答案:

答案 0 :(得分:4)

没有;如果你考虑一下,如果隐藏了父节点,你不期望所有的孩子都被隐藏吗?

我要做的是将视图保留在视图之外,并复制从指定节点开始的项目。

答案 1 :(得分:1)

您可以在根级别添加多个节点。即添加像

treeView1.Nodes.Add("Hello 1").Nodes.Add("Hello 3");
treeView1.Nodes.Add("Hello 2").Nodes.Add("Hello 4");
这样的东西至少对我来说就是这样。

修改: 如果你真的必须有一个根节点来遍历树(并且你只是懒得没有一个以上的函数)那么你可以使用下面的代码,至少对于.NET 2(没有检查其他任何东西)。请注意我不推荐这个但是你恳求它;)

TreeNode realRoot = (TreeNode)treeView1.GetType().InvokeMember("root", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, null, treeView1, null);

realRoot的子节点仍将为其父节点返回null(这是代码的设计方式),但是如果必须将其用于正向使用,则可以使用:)