如果添加子节点,为啥对象为空?

Posted

技术标签:

【中文标题】如果添加子节点,为啥对象为空?【英文标题】:Why does the object is null if adding a child node?如果添加子节点,为什么对象为空? 【发布时间】:2020-01-24 21:55:26 【问题描述】:

我正在尝试添加一个子节点,但它说该对象未设置。

public void Test(TreeView tree)

    tree.Nodes.AddRange(new TreeNode[]  new TreeNode("ok"), new TreeNode("test"));
    foreach (TreeNode node in tree.Nodes)
        tree.Nodes["test"].Nodes.Add("a child node");


private void Button1_Click_1(object sender, EventArgs e)

     Test(treeView1);

编辑: 我无法回答我自己的帖子,因为有人标记了它,但问题是我没有在 TreeNode 中设置属性 Name

工作版本是:

public void Test(TreeView tree)

    tree.Nodes.AddRange(new TreeNode[]  new TreeNode("ok")  Name = "ok" , new TreeNode("test")  Name = "test"  );
    foreach (TreeNode node in tree.Nodes)
        tree.Nodes["test"].Nodes.Add(new TreeNode("a child node"));

感谢reza-aghaei

【问题讨论】:

初始化treeView1的代码在哪里? 创建"test" 节点的代码在哪里?您有 tree.Nodes["test"],但没有在我能看到的任何地方创建该节点。 @TerryTyson 这只是设计时添加的控件 @Amy 它是用tree.Nodes.AddRange创建的 Node.TextNode.Text 不同。 new TreeNode("test") 创建了一个具有Text = "test" 的节点,但tree["test"] 试图找到一个具有Name = "test" 的节点。 【参考方案1】:

这里的问题是你试图通过它的字符串键(映射到Name 属性)来访问一个节点,但是你从来没有设置Name(只有Text)。

试试这个:

tree.Nodes.AddRange(new[]
    
        new TreeNode("ok") Name = "ok",
        new TreeNode("test") Name = "test"
    );

【讨论】:

是的,@Reza Aghaei 也​​这么说,thanxs

以上是关于如果添加子节点,为啥对象为空?的主要内容,如果未能解决你的问题,请参考以下文章

为啥vb6.0 treeview控件添加的父节点可以显示,但是子节点显示不出来?急求答案

C#里treeview如何向指定NAME节点添加子节点?

二叉排序树

检测何时将 SKNode 添加为子节点

排序二叉树

为啥我会获得额外的文本节点作为根节点的子节点?