在树视图中添加子节点

tin*_*tes 15 c# treeview

我是C#的新手,没有任何编程经验.但我已经完成了C#基础知识.现在我想通过添加父节点和子节点来设计一个简单的树视图.

我想为第二个节点添加第二个孩子,我很困扰这里,不知道下一个是什么.

有任何想法吗?

这是代码:

    private void addParentNode_Click(object sender, EventArgs e)
    {
        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
    }

    private void addChildNode_Click(object sender, EventArgs e)
    {
        string yourChildNode;
        yourChildNode = textBox1.Text.Trim();
        treeView2.Nodes[0].Nodes.Add(yourChildNode);
    }
Run Code Online (Sandbox Code Playgroud)

对不起,我不清楚,我不确定我是否真的需要这个:

  //treeView1.BeginUpdate(); 
  //treeView1.Nodes.Clear();
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是添加父节点和子节点.在我的代码中,我可以添加几个父节点,但是如果我想添加一个子节点,它只会添加到第一个父节点中.我希望如果我添加一个子节点,我想将它添加到第二个父节点或第三个父节点.

在我的代码中,我只使用一个树视图,其名称为treeview2.这是截图

这就是我的最终代码的样子:在我放入else之前,如果我没有选择任何东西,我会收到错误.所以我这样做是因为如果没有选择它,它会将"子节点"添加到"默认节点"或(parent1节点).它似乎运作良好.多谢你们;-)

    //This is for adding a parent node
    private void addParentNode_Click(object sender, EventArgs e)
    {
        treeView2.BeginUpdate();

        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
        treeView2.EndUpdate();
    }

    //This is for adding child node
    private void addChildNode_Click(object sender, EventArgs e)
    {
        if (treeView2.SelectedNode != null)
        {
            string yourChildNode;
            yourChildNode = textBox1.Text.Trim();

            treeView2.SelectedNode.Nodes.Add(yourChildNode);
            treeView2.ExpandAll();
        }
        //This is for adding the child node to the default node(parent 1 node)
        else
        {
            string yourChildNode;
            yourChildNode = textBox1.Text.Trim();
            treeView2.Nodes[0].Nodes.Add(yourChildNode);
        }
Run Code Online (Sandbox Code Playgroud)

其他问题:关于代码如何更好,还有其他方法吗?因为在这里,我声明字符串"yourChildNode"两次.在if中的if和其他的一个,是否有任何简化?

Jul*_*lin 21

它并没有那么糟糕,但你忘了打电话给treeView2.EndUpdate()你的addParentNode_Click()方法.
您还可以treeView2.ExpandAll()addChildNode_Click()方法结束时调用以直接查看子节点.

private void addParentNode_Click(object sender, EventArgs e) {
  treeView2.BeginUpdate();
  //treeView2.Nodes.Clear();
  string yourParentNode;
  yourParentNode = textBox1.Text.Trim();
  treeView2.Nodes.Add(yourParentNode);
  treeView2.EndUpdate();
}

private void addChildNode_Click(object sender, EventArgs e) {
  if (treeView2.SelectedNode != null) {
    string yourChildNode;
    yourChildNode = textBox1.Text.Trim();
    treeView2.SelectedNode.Nodes.Add(yourChildNode);
    treeView2.ExpandAll();
  }
}
Run Code Online (Sandbox Code Playgroud)

我不知道这是不是一个错误,但有2个TreeViews.我把它改成只有1个TreeView ......

编辑:回答其他问题:
您可以声明保存子节点名称的变量在if子句之外:

private void addChildNode_Click(object sender, EventArgs e) {
  var childNode = textBox1.Text.Trim();
  if (!string.IsNullOrEmpty(childNode)) {
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0];
    if (parentNode != null) {
      parentNode.Nodes.Add(childNode);
      treeView2.ExpandAll();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:请参阅http://www.yoda.arachsys.com/csharp/csharp2/nullable.html以获取有关??的信息.运营商.


小智 11

我可以在Stormenet示例中添加一些KISS(Keep It Simple&Stupid):

如果您已经有一个treeView或者只是创建了一个实例:让我们填充一些数据 - 例如.一位父母两个孩子的:

            treeView1.Nodes.Add("ParentKey","Parent Text");
            treeView1.Nodes["ParentKey"].Nodes.Add("Child-1 Text");
            treeView1.Nodes["ParentKey"].Nodes.Add("Child-2 Text");
Run Code Online (Sandbox Code Playgroud)

另一个例子.两个父母的第一个有两个孩子的第二个孩子:

            treeView1.Nodes.Add("ParentKey1","Parent-1  Text");
            treeView1.Nodes.Add("ParentKey2","Parent-2 Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("Child-2 Text");
            treeView1.Nodes["ParentKey2"].Nodes.Add("Child-3 Text");
Run Code Online (Sandbox Code Playgroud)

如果更远 - 孩子2的子孩子:

            treeView1.Nodes.Add("ParentKey1","Parent-1  Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("Child-1 Text");
            treeView1.Nodes["ParentKey1"].Nodes.Add("ChildKey2","Child-2 Text");
            treeView1.Nodes["ParentKey1"].Nodes["ChildKey2"].Nodes.Add("Child-3 Text");
Run Code Online (Sandbox Code Playgroud)

如你所见,你可以拥有你想要的尽可能多的孩子和父母,那些可以有孩子的子孩子等等......希望我帮忙!


Sto*_*net 5

添加子节点的示例:

private void AddExampleNodes()
        {
            TreeNode node;

            node = treeView1.Nodes.Add("Master node");
            node.Nodes.Add("Child node");
            node.Nodes.Add("Child node 2");

            node = treeView1.Nodes.Add("Master node 2");
            node.Nodes.Add("mychild");
            node.Nodes.Add("mychild");
        }
Run Code Online (Sandbox Code Playgroud)