[System.ComponentModel.Browsable(false)]
[System.ComponentModel.ListBindable(false)]
public System.Windows.Forms.TreeNodeCollection Nodes { get; }
TreeNodeCollection

TreeNodeCollection ,表示分配给当前树节点的树节点。

下面的代码示例从一个树节点中删除选定的树节点 TreeView ,如果两个树节点集合不是只读的,则将其添加到另一个树节点。 Button 单击时,将 TreeView.SelectedNode 使用方法从一个中删除, TreeView Remove 并使用方法将其添加到另一个 TreeView Insert 此示例要求在上有两个 TreeView 名为、和 treeView1 的控件 treeView2 Button Form

private void button1_Click(object sender, EventArgs e)
   // If neither TreeNodeCollection is read-only, move the 
   // selected node from treeView1 to treeView2.
   if(!treeView1.Nodes.IsReadOnly && !treeView2.Nodes.IsReadOnly)
      if(treeView1.SelectedNode != null)
         TreeNode tn = treeView1.SelectedNode;
         treeView1.Nodes.Remove(tn);
         treeView2.Nodes.Insert(treeView2.Nodes.Count, tn);

Nodes属性可以包含其他对象的集合 TreeNode 。 集合中的每个树节点都有一个 Nodes 属性,该属性可以包含自己的属性 TreeNodeCollection 。 这种树节点嵌套可能会导致很难导航树结构。 使用 FullPath 属性可以更轻松地确定树中的位置。

产品版本 .NET Core 3.0, 3.1 .NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8     TreeNode node11 = new TreeNode();       node11.Text = "hopeoneone";       TreeNode node2 = new TreeNode();       node2.Text = "hopetwo";       node1.Nodes.Add(node11);//在node1下面在添加一个结点。       node.Nodes.Add(node1);//node下的两个子节点。       node.Nodes.Add(node2);       TreeNode t = new TreeNode("basil");//作为根节点。       treeView1.Nodes.Add(t);       TreeNode t1 = new TreeNode("basilone");       t.Nodes.Add(t1);       TreeNode t2 = new TreeNode("basiltwo");       t.Nodes.Add(t2);  
private void button1_Click(object sender, EventArgs e)  
          //点击该按钮的时候,会移除选中项  
          treeView1.Nodes.Remove(treeView1.SelectedNode);  
private void button2_Click(object sender, EventArgs e)  
           //点击这个按钮的时候,可以修改选中项  
           //注意:在使用这个属性的时候,必须设置treeView1.LabelEdit =true,否则会提示错误。  
           treeView1.SelectedNode.BeginEdit();  

C#中Treeview判断选择的节点并执行不同的方法

Treeview,点击不同的节点(包括父节点和父节点下的子节点)触发不同的事件,执行相应的方法

方法1:
treeView1_AfterSelect事件就是treeView1中节点被选择触发的事件,e.Node指的是当前选中的节点,e.Node.Nodes指的是当前选中节点的子节点集合。

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)  
          if (e.Action == TreeViewAction.ByMouse)  
              //当前选中的节点有父节点,并且该父节点在相同级别的父节点中排行第一。  
              if (e.Node.Parent != null && e.Node.Parent.Index == 0)  
                  //当前选中节点在所有的兄弟节点中排第 一  
                  if(e.Node.Index==0)   
                       //调用相应的方法();  
              //表示当前节点没有父节点,并且在兄弟节点中排行第五(由零开始索引)  
              if(e.Node.Parent==null&&e.Node.Index==4)  
             //调用相应的方法();  

通过节点的Name属性来判断具体是哪个节点被选择,并执行相应的方法(这种方法效率高一些)

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)  
             if (e.Action == TreeViewAction.ByMouse)  
                 //说明当前选中节点没有子节点  
                 if(e.Node.Nodes.Count==0)  
                      if(e.Node.name="aaa")  
                           //执行相应的方法();  
                      else if(e.Node.Name="bbb")  
                           //执行相应的方法();  

C# 怎么判断TreeView选中的是子节点 ?并且是属于哪个父节?

TreeNode selNode = tree.SelectedNode;  
if (selNode == null)  
    //防止空引用  
    return;  
if (selNode.Parent != null)  
    //为有父亲节点的,  
    TreeNode parentNode = selNode.Parent;//得到父亲节点                
    if (selNode.Nodes.Count == 0)  
        //为没有子节点,即选中的节点为叶子节点  


C#.Net中TreeView控件右键选择节点问题处理

private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)    
    if(e.Button==MouseButtons.Right)    
        TreeNode tn=treeView1.GetNodeAt(e.X,e.Y);    
        if(tn!=null)treeView1.SelectedNode = tn;    

treeView默认 展开

treeView1.ExpandAll();

默认选中TreeVIew中的一个节点

//先找到你要设置选中的节点  
TreeNode tn = treeView1.Nodes[3];  
//把要设置的节点给SelectedNode  
this.treeView1.SelectedNode = tn;  
//this.TreeView1.SelectedNodeIndex="";

TreeView,左键单击节点时可修改节点名称

TreeView本身可支持左键修改名称
在初始化时设置:
TreeView.LabelEdit = true;
这样应用程序的treeview生成以后就支持单击节点修改。
如果不想左键修改,可在treeView1_MouseDown中设置treeView1.LabelEdit = false; 
右键菜单 重命名

treeView1.LabelEdit = true;
treeView.SelectedNode.BeginEdit();

TreeVIew清空

TreeView.Nodes.Clear()

C# 遍历treeview

1. 设置全部选中或全部选中,设置参数flag(true/false)

       private void checkSubNodes(TreeNode treeNode,bool flag)
            treeNode.Checked = flag;
             foreach (TreeNode tn in treeNode.Nodes)
                PrintRecursive(tn,flag);
       private void CheckTreeview(TreeView treeView,bool flag)
            TreeNodeCollection nodes = treeView.Nodes;
            foreach (TreeNode n in nodes)
                checkSubNodes(n,flag);

2.选中状态的改变:只要选中一个子节点,其父节点就是选中的

     我的项目里同时在数据区添加了点数据

     private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
            if (e.Action != TreeViewAction.Unknown)
                CheckAllChildNodes(e.Node, e.Node.Checked);
                //选中父节点 
                bool bol = e.Node.Checked;
                if (e.Node.Parent != null)
                    for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
                        if (e.Node.Parent.Nodes[i].Checked)
                            bol = true;
                    e.Node.Parent.Checked = bol;
                    e.Node.Parent.Tag = 1;
      //选中子节点 
        public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
            foreach (TreeNode node in treeNode.Nodes)
                if (nodeChecked)
                    node.Tag = 1;
                    node.Tag = 0;
                node.Checked = nodeChecked;
                if (node.Nodes.Count > 0)
                    this.CheckAllChildNodes(node, nodeChecked);

3.设置指定的节点为选中状态

      private void SelectSubNodes(TreeNode treeNode, string nodeName)
            if (treeNode.Text.Equals(nodeName))
                treeNode.Checked = true;
                      foreach (TreeNode tn in treeNode.Nodes)
                SelectSubNodes(tn, nodeName);
        private void SelectNodes(TreeView treeView, string nodeName)
            TreeNodeCollection nodes = treeView.Nodes;
            foreach (TreeNode n in nodes)
                SelectSubNodes(n, nodeName);

问题描述:

1.利用treeView控件的Add函数添加一个名称为123的节点,如treeView.Nodes.Add( "123" );  

2.当想要搜索得到该节点时,使用 TreeNode[] nodes = treeView.Nodes.Find("123", true);

理想中应该返回第一步中插入的值,但实际结果却不然。

解决过程:

Find() method takes key (not a value).

   TreeNode root = new TreeNode("root"); 
 
            TreeNode t1 = new TreeNode(); 
            t1.Nodes.Add("A","A1"); 
            t1.Nodes.Add("B","B2"); 
            t1.Nodes.Add("C","C3"); 
            root.Nodes.Add(t1); 
            TreeNodeCollection tc = root.Nodes; 
            var tt = tc.Find("A",true  ); 

2. 原来,TreeView 控件的Add方法有好几个重载,之前我使用的是Add( string value ), 只设置了新插入节点的属性值,而没有设定新节点的key。而查找函数Find的原型为Find(string Key ),它是根据key来查找的。因为新插入节点的key没有设定,所以无法找到。

解决方法:

使用Add的另一个重载方法 treeView.Nodes.Add( "123","value"  );

这时候,新插入节点的key是"123"  ,value是"value",然后使用TreeNode[] nodes = treeView.Nodes.Find("123", true);就能得到刚刚插入的节点了


当前选中项:TreeView.SelectedNode 
增加顶级节点:TreeView.Nodes.Add("Key", "Text") 
增加同级节点:TreeView.SelectedNode.Parent.Nodes.Add("Key", "Text") 
增加子节点:TreeView.SelectedNode.Nodes.Add("Key", "Text") 
全部展开:TreeView.ExpandAll() 
全部收拢:TreeView.CollapseAll() 

全部清空:TreeView.Nodes.Clear()