TreeView控件用來顯示信息的分級視圖,如同Windows里的資源管理器的目錄。TreeView控件中的各項信息都有一個與之相關的Node對象。TreeView顯示Node對象的分層目錄結構,每個Node對象均由一個Label對象和其相關的位圖組成。在建立TreeView控件后,我們可以展開和折疊、顯示或隱藏其中的節點。TreeView控件一般用來顯示文件和目錄結構、文檔中的類層次、索引中的層次和其他具有分層目錄結構的信息。
下面是一些常用的方法和屬性:
添加節點
TreeNode tn1 = new TreeNode(textBox1.Text.Trim()); tn1.Name = textBox1.Text.Trim(); treeView1.SelectedNode.Nodes.Add(tn1);
編輯選中節點
只有當 TreeView 的 LabelEdit 屬性設置為 true,此方法才生效。 如果 LabelEdit 設置為 false,將引發異常,並且樹節點不會進入可編輯狀態。與之對應的是EndEdit()方法來關閉編輯節點。
treeView1.LabelEdit = true; treeView1.SelectedNode.BeginEdit();
刪除選中節點
treeView1.Nodes.Remove(treeView1.SelectedNode);
展開選中節點
treeView1.SelectedNode.ExpandAll();
折疊選中節點
方法傳遞的布爾參數為 true 則使子節點保持當前狀態;為 false 則折疊子節點。
treeView1.SelectedNode.Collapse(false);
選中節點折疊展開狀態切換
treeView1.SelectedNode.Toggle();
顯示復選框
與之相關聯的是Checked屬性獲取或設置一個值,用以指示樹節點是否處於選中狀態。
treeView1.CheckBoxes = true;
選中節點路徑
treeView1.SelectedNode.FullPath
選中節點樹深度
treeView1.SelectedNode.Level;
樹節點數目
treeView1.GetNodeCount(true);
詳細使用可以參考MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.treenode(v=vs.100).aspx
實例1.TreeView控件顯示本地磁盤、文件夾
遍歷磁盤代碼:
//來源:http://zxlovenet.cnblogs.com private void ForeachDisk() { DriveInfo[] dr = DriveInfo.GetDrives(); string driveName = ""; foreach (DriveInfo d in dr) { switch (d.DriveType) { case DriveType.Fixed: driveName = "本地磁盤(" + d.Name.Substring(0, 2) + ")"; break; case DriveType.Removable: driveName = "可移動磁盤(" + d.Name.Substring(0, 2) + ")"; break; case DriveType.CDRom: driveName = "DVD驅動器(" + d.Name.Substring(0, 2) + ")"; break; case DriveType.Network: driveName = "網絡驅動器(" + d.Name.Substring(0, 2) + ")"; break; default: driveName = "未知(" + d.Name + ")"; break; } this.treeView1.Nodes.Add(d.Name, driveName); } }
顯示文件夾內容:
//來源:http://zxlovenet.cnblogs.com private void ReadDir(TreeNodeMouseClickEventArgs e) { if (e.Node.Nodes.Count > 0) { if (e.Node.IsExpanded) { e.Node.Collapse(); } else { e.Node.Expand(); } } else { if (Directory.Exists(e.Node.Name)) { try { string[] allDirectory = Directory.GetDirectories(e.Node.Name); foreach (string s in allDirectory) { e.Node.Nodes.Add(s, s.Remove(0, s.LastIndexOf("//") + 1)); } listBox1.Items.Clear(); string[] allFiles = Directory.GetFiles(e.Node.Name); foreach (string sf in allFiles) { listBox1.Items.Add(sf.Remove(0, sf.LastIndexOf("//") + 1)); } } catch { } } e.Node.Expand(); } }
實例2.TreeView實現拖拽操作
后台代碼:
//來源:http://zxlovenet.cnblogs.com private Point Position = new Point(0, 0); private void Form1_Load(object sender, EventArgs e) { this.treeView1.AllowDrop = true; this.treeView1.ExpandAll(); } private void treeView1_ItemDrag(object sender, ItemDragEventArgs e) { DoDragDrop(e.Item, DragDropEffects.Move); } private void treeView1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(TreeNode))) e.Effect = DragDropEffects.Move; else e.Effect = DragDropEffects.None; } private void treeView1_DragDrop(object sender, DragEventArgs e) { TreeNode myNode = null; if (e.Data.GetDataPresent(typeof(TreeNode))) { myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode))); } else { MessageBox.Show("error"); } Position.X = e.X; Position.Y = e.Y; Position = treeView1.PointToClient(Position); TreeNode DropNode = this.treeView1.GetNodeAt(Position); // 1.目標節點不是空。2.目標節點不是被拖拽接點的字節點。3.目標節點不是被拖拽節點本身 if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode) { TreeNode DragNode = myNode; // 將被拖拽節點從原來位置刪除。 myNode.Remove(); // 在目標節點下增加被拖拽節點 DropNode.Nodes.Add(DragNode); } // 如果目標節點不存在,即拖拽的位置不存在節點,那么就將被拖拽節點放在根節點之下 if (DropNode == null) { TreeNode DragNode = myNode; myNode.Remove(); treeView1.Nodes.Add(DragNode); } }
下載:DEMO
PS:又是好幾天沒有更新了,這周是比較忙的,周六一整天的比賽,晚上堅持更新。