添加節(jié)點
private void Form1_Load(object sender, EventArgs e) { treeView1.LabelEdit = true;//可編輯狀態(tài)。 //添加一個節(jié)點,這個結(jié)點是根節(jié)點。 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下面在添加一個結(jié)點。 node.Nodes.Add(node1);//node下的兩個子節(jié)點。 node.Nodes.Add(node2); TreeNode t = new TreeNode("basil");//作為根節(jié)點。 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) { //點擊這個按鈕的時候,可以修改選中項 //注意:在使用這個屬性的時候,必須設(shè)置treeView1.LabelEdit =true,否則會提示錯誤。 treeView1.SelectedNode.BeginEdit(); }
C#中Treeview判斷選擇的節(jié)點并執(zhí)行不同的方法
Treeview,點擊不同的節(jié)點(包括父節(jié)點和父節(jié)點下的子節(jié)點)觸發(fā)不同的事件,執(zhí)行相應(yīng)的方法
方法1:
treeView1_AfterSelect事件就是treeView1中節(jié)點被選擇觸發(fā)的事件,e.Node指的是當(dāng)前選中的節(jié)點,e.Node.Nodes指的是當(dāng)前選中節(jié)點的子節(jié)點集合。
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (e.Action == TreeViewAction.ByMouse) { //當(dāng)前選中的節(jié)點有父節(jié)點,并且該父節(jié)點在相同級別的父節(jié)點中排行第一。 if (e.Node.Parent != null && e.Node.Parent.Index == 0) { //當(dāng)前選中節(jié)點在所有的兄弟節(jié)點中排第 一 if(e.Node.Index==0) { //調(diào)用相應(yīng)的方法(); } } //表示當(dāng)前節(jié)點沒有父節(jié)點,并且在兄弟節(jié)點中排行第五(由零開始索引) if(e.Node.Parent==null&&e.Node.Index==4) { //調(diào)用相應(yīng)的方法(); } } }
方法二:
通過節(jié)點的Name屬性來判斷具體是哪個節(jié)點被選擇,并執(zhí)行相應(yīng)的方法(這種方法效率高一些)
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { if (e.Action == TreeViewAction.ByMouse) { //說明當(dāng)前選中節(jié)點沒有子節(jié)點 if(e.Node.Nodes.Count==0) { if(e.Node.name="aaa") { //執(zhí)行相應(yīng)的方法(); } else if(e.Node.Name="bbb") { //執(zhí)行相應(yīng)的方法(); } } }
C# 怎么判斷TreeView選中的是子節(jié)點 ?并且是屬于哪個父節(jié)?
TreeNode selNode = tree.SelectedNode; if (selNode == null) { //防止空引用 return; } if (selNode.Parent != null) { //為有父親節(jié)點的, TreeNode parentNode = selNode.Parent;//得到父親節(jié)點 if (selNode.Nodes.Count == 0) { //為沒有子節(jié)點,即選中的節(jié)點為葉子節(jié)點 } }
C#.Net中TreeView控件右鍵選擇節(jié)點問題處理
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默認(rèn) 展開
treeView1.ExpandAll();
默認(rèn)選中TreeVIew中的一個節(jié)點
//先找到你要設(shè)置選中的節(jié)點 TreeNode tn = treeView1.Nodes[3]; //把要設(shè)置的節(jié)點給SelectedNode this.treeView1.SelectedNode = tn; //this.TreeView1.SelectedNodeIndex="";
TreeView,左鍵單擊節(jié)點時可修改節(jié)點名稱
TreeView本身可支持左鍵修改名稱
在初始化時設(shè)置:
TreeView.LabelEdit = true;
這樣應(yīng)用程序的treeview生成以后就支持單擊節(jié)點修改。
如果不想左鍵修改,可在treeView1_MouseDown中設(shè)置treeView1.LabelEdit = false;
右鍵菜單 重命名
treeView1.LabelEdit = true;
treeView.SelectedNode.BeginEdit();
TreeVIew清空
TreeView.Nodes.Clear()
C# 遍歷treeview
1. 設(shè)置全部選中或全部選中,設(shè)置參數(shù)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.選中狀態(tài)的改變:只要選中一個子節(jié)點,其父節(jié)點就是選中的
我的項目里同時在數(shù)據(jù)區(qū)添加了點數(shù)據(jù)
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { CheckAllChildNodes(e.Node, e.Node.Checked); //選中父節(jié)點 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; } } } //選中子節(jié)點 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.設(shè)置指定的節(jié)點為選中狀態(tài)
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函數(shù)添加一個名稱為123的節(jié)點,如treeView.Nodes.Add( "123" );
2.當(dāng)想要搜索得到該節(jié)點時,使用 TreeNode[] nodes = treeView.Nodes.Find("123", true);
理想中應(yīng)該返回第一步中插入的值,但實際結(jié)果卻不然。
解決過程:
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 ), 只設(shè)置了新插入節(jié)點的屬性值,而沒有設(shè)定新節(jié)點的key。而查找函數(shù)Find的原型為Find(string Key ),它是根據(jù)key來查找的。因為新插入節(jié)點的key沒有設(shè)定,所以無法找到。
解決方法:
使用Add的另一個重載方法 treeView.Nodes.Add( "123","value" );
這時候,新插入節(jié)點的key是"123" ,value是"value",然后使用TreeNode[] nodes = treeView.Nodes.Find("123", true);就能得到剛剛插入的節(jié)點了
總結(jié):
當(dāng)前選中項:TreeView.SelectedNode
增加頂級節(jié)點:TreeView.Nodes.Add("Key", "Text")
增加同級節(jié)點:TreeView.SelectedNode.Parent.Nodes.Add("Key", "Text")
增加子節(jié)點:TreeView.SelectedNode.Nodes.Add("Key", "Text")
全部展開:TreeView.ExpandAll()
全部收攏:TreeView.CollapseAll()
全部清空:TreeView.Nodes.Clear()
如對本文有疑問,請?zhí)峤坏浇涣髡搲瑥V大熱心網(wǎng)友會為你解答?。?點擊進(jìn)入論壇