Winform控件學習筆記【第六天】——TreeView


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:又是好幾天沒有更新了,這周是比較忙的,周六一整天的比賽,晚上堅持更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM