在树视图中添加子节点

我是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); } 

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

  //treeView1.BeginUpdate(); //treeView1.Nodes.Clear(); 

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

在我的代码中,我只使用一个树视图,其名称为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); } 

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

它并没有那么糟糕,但你忘了在你的addParentNode_Click()方法中调用treeView2.EndUpdate()
您还可以在addChildNode_Click()方法的末尾调用treeView2.ExpandAll()以直接查看子节点。

 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(); } } 

我不知道这是不是一个错误,但有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(); } } } 

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

我可以在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"); 

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

  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"); 

如果更远 – 孩子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"); 

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

添加子节点的示例:

 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"); } 

看起来您只是将子项添加到第一个父treeView2.Nodes[0].Nodes.Add(yourChildNode)
根据您希望它的行为方式,您需要明确要添加子项的父节点。
例如,从屏幕截图中,如果要将子项添加到第二个节点,则需要:
treeView2.Nodes[1].Nodes.Add(yourChildNode)
如果要将子项添加到当前选定的节点,请获取TreeView.SelectedNode并将子项添加到其中。

尝试使用TreeView来了解类的运行方式。 不幸的是,msdn文档对代码示例非常清楚……

我在这里错过了很多安全检查!

像(未经测试)的东西:

 private void addChildNode_Click(object sender, EventArgs e) { TreeNode ParentNode = treeView2.SelectedNode; // for ease of debugging! if (ParentNode != null) { ParentNode.Nodes.Add("Name Of Node"); treeView2.ExpandAll(); // so you can see what's been added treeView2.Invalidate(); // requests a redraw } } 

我需要做类似的事情并遇到同样的问题。 我使用AfterSelect事件来确保我没有获得先前选择的节点。

实际上很容易引用正确的节点来接收新的子节点。

 private void TreeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { //show dialogbox to let user name the new node frmDialogInput f = new frmDialogInput(); f.ShowDialog(); //find the node that was selected TreeNode myNode = TreeView1.SelectedNode; //create the new node to add TreeNode newNode = new TreeNode(f.EnteredText); //add the new child to the selected node myNode.Nodes.Add(newNode); } 
 void treeView(string [] LineString) { int line = LineString.Length; string AssmMark = ""; string PartMark = ""; TreeNode aNode; TreeNode pNode; for ( int i=0 ; i 

您可以执行以下操作,使用父节点和子节点填充treeView。 还有父节点和子节点的显示和值成员:

  arrayRoot = taskData.GetRocordForRoot(); // iterate through database table for (int j = 0; j  
 SqlConnection con = new SqlConnection(@"Data Source=NIKOLAY;Initial Catalog=PlanZadanie;Integrated Security=True"); SqlCommand cmd = new SqlCommand(); DataTable dt = new DataTable(); public void loadTree(TreeView tree) { cmd.Connection = con; cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT [RAZDEL_ID],[NAME_RAZDEL] FROM [tbl_RAZDEL]"; try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { tree.Nodes.Add(reader.GetString(1)); tree.Nodes[0].Nodes.Add("yourChildNode"); tree.ExpandAll(); } con.Close(); } catch (Exception ex) { MessageBox.Show("Ошибка с сообщением: " + ex.Message); } } 

人们使用此代码从C#代码中为TreeView添加节点和子节点。 *

吻(保持简单和愚蠢:)*

protected void Button1_Click(object sender,EventArgs e)

{

  TreeNode a1 = new TreeNode("Apple"); TreeNode b1 = new TreeNode("Banana"); TreeNode a2 = new TreeNode("gree apple"); TreeView2.Nodes.Add(a1); TreeView2.Nodes.Add(b1); a1.ChildNodes.Add(a2); 

}