一、Winform TreeView綁定磁盤
Winform TreeView可以用來展示目錄結構和文件列表,可以方便的實現綁定磁盤並展示目錄結構和文件列表。下面我們通過代碼具體實現:
private void BindDisk()
{
DriveInfo[] drives = DriveInfo.GetDrives();
treeView1.BeginUpdate();
foreach (DriveInfo di in drives)
{
TreeNode node = new TreeNode(di.Name);
if (di.IsReady)
{
DirectoryInfo dir = new DirectoryInfo(di.Name);
foreach (DirectoryInfo dirChild in dir.GetDirectories())
{
node.Nodes.Add(dirChild.Name);
}
}
treeView1.Nodes.Add(node);
}
treeView1.EndUpdate();
}
上述代碼中,我們利用DriveInfo.GetDrives()方法獲取所有磁盤,通過遍歷磁盤並獲取磁盤下所有目錄,並將目錄添加到對應TreeNode的Nodes屬性中來建立樹形結構。
二、Winform TreeView複選框三態樹
Winform TreeView可以設置為複選框三態樹,在此樹形結構中,節點有三種狀態,分別是選中、未選中和無狀態。下面我們通過代碼具體實現:
private void TreeViewCustomTriState()
{
// 設置為三態複選框結構
treeView1.CheckBoxes = true;
treeView1.BeginUpdate();
TreeNode node1 = treeView1.Nodes.Add("node1", "Root Node");
node1.Nodes.Add("node2", "Child Node 1");
TreeNode node3 = node1.Nodes.Add("node3", "Child Node 2");
node3.Nodes.Add("nodezz", "Child of child node");
node1.Nodes.Add("node4", "Child Node 3");
foreach (TreeNode node in treeView1.Nodes)
{
node.Checked = true;
CheckAllChildNodes(node, true);
}
treeView1.EndUpdate();
}
private void CheckAllChildNodes(TreeNode treeNode, bool isChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = isChecked;
if (node.Nodes.Count > 0)
{
CheckAllChildNodes(node, isChecked);
}
}
}
上述代碼中,我們將節點設置為三態複選框,隨後遍歷所有節點並將節點選中,同時將其所有子孫節點設為選中狀態,實現三態複選框樹。
三、Winform TreeView複選框
除了設置三態複選框樹,Winform TreeView也可以設置普通複選框。下面我們介紹具體實現方法:
private void TreeViewMultiSelect()
{
// 設置為普通複選框結構
treeView1.CheckBoxes = true;
treeView1.BeginUpdate();
TreeNode node1 = treeView1.Nodes.Add("node1", "Root Node");
node1.Nodes.Add("node2", "Child Node 1");
node1.Nodes.Add("node3", "Child Node 2");
node1.Nodes.Add("node4", "Child Node 3");
treeView1.EndUpdate();
}
// 利用遞歸實現所有子孫節點的全選或取消全選
private void CheckAllChildNodes(TreeNode treeNode, bool isChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = isChecked;
if (node.Nodes.Count > 0)
{
CheckAllChildNodes(node, isChecked);
}
}
}
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = e.Node.Checked;
if (node.Nodes.Count > 0)
{
CheckAllChildNodes(node, node.Checked);
}
}
}
}
上述代碼中,我們通過設置節點為複選框並在相應事件中實現對所有子孫節點的全選或取消全選。
四、Winform TreeView列
Winform TreeView的每一行數據都是一個節點,如果需要添加多列數據,我們需要將多列數據保存在節點的Tag屬性中。下面我們通過代碼具體實現:
private void AddNode(string name, string age, string sex, string details, TreeNode parentNode)
{
var item = new ListViewItem(new[] {name, age, sex, details});
var node = new TreeNode(name) {Tag = item};
parentNode.Nodes.Add(node);
}
private void MultiColumnTreeView()
{
listView1.View = View.Details;
listView1.Columns.Add("Name");
listView1.Columns.Add("Age");
listView1.Columns.Add("Sex");
listView1.Columns.Add("Details");
listView1.CheckBoxes = true;
treeView1.BeginUpdate();
var node1 = treeView1.Nodes.Add("node1", "Root Node");
AddNode("Tom", "18", "Male", "Student", node1);
AddNode("Lucy", "20", "Female", "Teacher", node1);
var childNode = node1.Nodes.Add("node2", "Child Node");
AddNode("Jerry", "22", "Male", "Engineer", childNode);
AddNode("Lily", "16", "Female", "Student", childNode);
treeView1.EndUpdate();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Tag != null)
{
listView1.Items.Clear();
listView1.Items.Add((ListViewItem)e.Node.Tag);
}
}
上述代碼中,我們通過將節點的數據保存在Tag屬性中,並在TreeView的AfterSelect事件當中獲取對應節點的數據,最終展示在ListView的表格中。
五、Winform TreeView行間距
Winform TreeView默認的行間距有時候不太適合我們的需求,我們需要自己手動設置行間距。下面我們通過代碼實現具體方法:
private void SetTreeViewLineSpacing(float value)
{
// 由於TreeView的行間距是由節點的高度來決定的,
// 所以需要設置節點高度,才能夠實現行間距的調整
treeView1.ItemHeight = (int)Math.Ceiling(
treeView1.Font.GetHeight() * (value / 100f));
}
上述代碼中,我們利用TreeView的Font屬性計算出節點高度並設置為統一的高度,實現行間距的調整。
原創文章,作者:HXYEK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332655.html
微信掃一掃
支付寶掃一掃