添加节点
</>code
- private void Form1_Load(object sender, EventArgs e)
- {
- treeView1.LabelEdit = true;//可编辑状态。
- //添加一个节点,这个结点是根节点。
- TreeNode node = new TreeNode();
- node.Text = "hope";
- treeView1.Nodes.Add(node);
- TreeNode node1 = new TreeNode();
- node1.Text = "hopeone";
- 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);
- }
删除
</>code
- private void button1_Click(object sender, EventArgs e)
- {
- //点击该按钮的时候,会移除选中项
- treeView1.Nodes.Remove(treeView1.SelectedNode);
- }
修改
</>code
- 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指的是当前选中节点的子节点集合。
</>code
- 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属性来判断具体是哪个节点被选择,并执行相应的方法(这种方法效率高一些)
</>code
- 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选中的是子节点 ?并且是属于哪个父节?
</>code
- TreeNode selNode = tree.SelectedNode;
- if (selNode == null)
- {
- //防止空引用
- return;
- }
- if (selNode.Parent != null)
- {
- //为有父亲节点的,
- TreeNode parentNode = selNode.Parent;//得到父亲节点
- if (selNode.Nodes.Count == 0)
- {
- //为没有子节点,即选中的节点为叶子节点
- }
- }
C#.Net中TreeView控件右键选择节点问题处理
</>code
- 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默认 展开
</>code
- treeView1.ExpandAll();
默认选中TreeVIew中的一个节点
</>code
- //先找到你要设置选中的节点
- 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清空
</>code
- TreeView.Nodes.Clear()
C# 遍历treeview
1. 设置全部选中或全部选中,设置参数flag(true/false)
</>code
- 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.选中状态的改变:只要选中一个子节点,其父节点就是选中的
我的项目里同时在数据区添加了点数据
</>code
- 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;
- }
- else
- {
- node.Tag = 0;
- }
- node.Checked = nodeChecked;
- if (node.Nodes.Count > 0)
- {
- this.CheckAllChildNodes(node, nodeChecked);
- }
- }
- }
3.设置指定的节点为选中状态
</>code
- 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()
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛