您现在的位置: 365建站网 > 365文章 > C# TreeNode的使用方法和实例

C# TreeNode的使用方法和实例

文章来源:365jz.com     点击数:3622    更新时间:2018-06-12 11:10   参与评论

添加节点

</>code

  1. private void Form1_Load(object sender, EventArgs e)  
  2. {  
  3.     treeView1.LabelEdit = true;//可编辑状态。  
  4.   
  5.     //添加一个节点,这个结点是根节点。  
  6.     TreeNode node = new TreeNode();  
  7.     node.Text = "hope";  
  8.     treeView1.Nodes.Add(node);  
  9.   
  10.     TreeNode node1 = new TreeNode();  
  11.     node1.Text = "hopeone";  
  12.     TreeNode node11 = new TreeNode();  
  13.     node11.Text = "hopeoneone";  
  14.     TreeNode node2 = new TreeNode();  
  15.     node2.Text = "hopetwo";  
  16.   
  17.     node1.Nodes.Add(node11);//在node1下面在添加一个结点。  
  18.   
  19.     node.Nodes.Add(node1);//node下的两个子节点。  
  20.     node.Nodes.Add(node2);  
  21.   
  22.   
  23.     TreeNode t = new TreeNode("basil");//作为根节点。  
  24.     treeView1.Nodes.Add(t);  
  25.     TreeNode t1 = new TreeNode("basilone");  
  26.     t.Nodes.Add(t1);  
  27.     TreeNode t2 = new TreeNode("basiltwo");  
  28.     t.Nodes.Add(t2);  
  29. }


删除

</>code

  1. private void button1_Click(object sender, EventArgs e)  
  2.       {  
  3.           //点击该按钮的时候,会移除选中项  
  4.           treeView1.Nodes.Remove(treeView1.SelectedNode);  
  5.       }

 


修改

</>code

  1. private void button2_Click(object sender, EventArgs e)  
  2.        {  
  3.            //点击这个按钮的时候,可以修改选中项  
  4.            //注意:在使用这个属性的时候,必须设置treeView1.LabelEdit =true,否则会提示错误。  
  5.            treeView1.SelectedNode.BeginEdit();  
  6.        }


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

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

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

</>code

  1. private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)  
  2.       {  
  3.           if (e.Action == TreeViewAction.ByMouse)  
  4.           {  
  5.               //当前选中的节点有父节点,并且该父节点在相同级别的父节点中排行第一。  
  6.               if (e.Node.Parent != null && e.Node.Parent.Index == 0)  
  7.               {    
  8.                   //当前选中节点在所有的兄弟节点中排第 一  
  9.                   if(e.Node.Index==0)   
  10.                   {  
  11.                        //调用相应的方法();  
  12.                   }  
  13.               }  
  14.               //表示当前节点没有父节点,并且在兄弟节点中排行第五(由零开始索引)  
  15.               if(e.Node.Parent==null&&e.Node.Index==4)  
  16.               {  
  17.              //调用相应的方法();  
  18.                }  
  19.           }  
  20.       }

 

方法二:

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

</>code

  1. private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)  
  2.         {  
  3.              if (e.Action == TreeViewAction.ByMouse)  
  4.              {  
  5.                  //说明当前选中节点没有子节点  
  6.                  if(e.Node.Nodes.Count==0)  
  7.                  {  
  8.                       if(e.Node.name="aaa")  
  9.                       {  
  10.                            //执行相应的方法();  
  11.                       }  
  12.                       else if(e.Node.Name="bbb")  
  13.                       {  
  14.                            //执行相应的方法();  
  15.                       }  
  16.                  }  
  17.             }

          

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

</>code

  1. TreeNode selNode = tree.SelectedNode;  
  2. if (selNode == null)  
  3. {  
  4.     //防止空引用  
  5.     return;  
  6. }  
  7. if (selNode.Parent != null)  
  8. {  
  9.     //为有父亲节点的,  
  10.     TreeNode parentNode = selNode.Parent;//得到父亲节点                
  11.     if (selNode.Nodes.Count == 0)  
  12.     {  
  13.         //为没有子节点,即选中的节点为叶子节点  
  14.     }  
  15. }


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

</>code

  1. private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)    
  2. {    
  3.     if(e.Button==MouseButtons.Right)    
  4.     {    
  5.         TreeNode tn=treeView1.GetNodeAt(e.X,e.Y);    
  6.         if(tn!=null)treeView1.SelectedNode = tn;    
  7.     }    
  8. }

  

treeView默认 展开

</>code

  1. treeView1.ExpandAll();

 

默认选中TreeVIew中的一个节点

</>code

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

 

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

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

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

TreeVIew清空

</>code

  1. TreeView.Nodes.Clear()

 

C# 遍历treeview


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

</>code

  1.        private void checkSubNodes(TreeNode treeNode,bool flag)
  2.         {
  3.             treeNode.Checked = flag;
  4.              foreach (TreeNode tn in treeNode.Nodes)
  5.             {
  6.                 PrintRecursive(tn,flag);
  7.             }
  8.         }
  9.        private void CheckTreeview(TreeView treeView,bool flag)
  10.         {
  11.             TreeNodeCollection nodes = treeView.Nodes;
  12.             foreach (TreeNode n in nodes)
  13.             {
  14.                 checkSubNodes(n,flag);
  15.             }
  16.         }


 


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

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

</>code

  1.      private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
  2.         {
  3.             if (e.Action != TreeViewAction.Unknown)
  4.             {
  5.                 CheckAllChildNodes(e.Node, e.Node.Checked);
  6.                 //选中父节点 
  7.                 bool bol = e.Node.Checked;
  8.                 if (e.Node.Parent != null)
  9.                 {
  10.                     
  11.                     for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)
  12.                     {
  13.                         if (e.Node.Parent.Nodes[i].Checked)
  14.                             bol = true;
  15.                     }
  16.                     e.Node.Parent.Checked = bol;
  17.                     e.Node.Parent.Tag = 1;
  18.                 }
  19.             } 
  20.         }
  21.  
  22.       //选中子节点 
  23.         public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
  24.         {
  25.             foreach (TreeNode node in treeNode.Nodes)
  26.             {
  27.                 if (nodeChecked)
  28.                 {
  29.                     node.Tag = 1;
  30.                 }
  31.                 else
  32.                 {
  33.                     node.Tag = 0;
  34.                 }
  35.                 node.Checked = nodeChecked;
  36.                 if (node.Nodes.Count > 0)
  37.                 {
  38.                     this.CheckAllChildNodes(node, nodeChecked);
  39.                 }
  40.             }
  41.         }


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

</>code

  1.       private void SelectSubNodes(TreeNode treeNode, string nodeName)
  2.         {
  3.             if (treeNode.Text.Equals(nodeName))
  4.             {
  5.                 treeNode.Checked = true;
  6.             }
  7.                       foreach (TreeNode tn in treeNode.Nodes)
  8.             {
  9.                 SelectSubNodes(tn, nodeName);
  10.             }
  11.         }
  12.         private void SelectNodes(TreeView treeView, string nodeName)
  13.         {
  14.             TreeNodeCollection nodes = treeView.Nodes;
  15.             foreach (TreeNode n in nodes)
  16.             {
  17.                 SelectSubNodes(n, nodeName);
  18.             }
  19.         }


问题描述:

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

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (3622人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号