TreeView控件用树显示节点层次。
例如:顶级目录是根(C:),C盘下的每个子目录都是子节点,而每个子目录又都有自己的子节点
TreeView属性和方法:
属性 | 说明 |
---|---|
CheckBoxes | 表示节点旁边是否出现复选框 |
ImageList | 指定一个包含节点图标的ImageList对象。ImageList对象是一个包含Image对象的集合 |
Nodes | 将控件中的TreeNode集合作为TreeNodeCollection返回 |
SelectedNode | 被选中的节点 |
常用事件:
AfterSelect:当所选节点发生变化时产生
TreeNode属性和方法:
TreeNode属性 | 说明 |
---|---|
Checked | 表示是否选中了TreeNode |
FirstNode | 指定Nodes集合众的第一个节点 |
FullPath | 节点从数根开始的路径 |
ImageIndex | 当去选一个节点时,指定TreeView的ImageList中要显示的图像的索引 |
LastNode | 指定Nodes集合中的最后一个节点 |
NextNode | 下一个同胞节点 |
Nodes | 包含在当前节点中的TreeNode集合 |
PrevNode | 前一个同胞节点 |
SelectedImageIndex | 当选择一个节点时,指定TreeView的ImageList中要显示的图像的索引 |
Text | 指定TreeNode的文本 |
TreeNode方法 | 说明 |
---|---|
Collapse | 加载时缩合节点 |
Expand | 展开节点 |
ExpandAll | 展开节点的所有子节点 |
GetNodeCount | 返回子节点个数 |
实例:
输入一个本机文件目录,用TreeView显示该目录的所有文件夹
1、添加一个Label控件,Text属性改为:“文件路径:”。
2、添加一个TextBox控件,适当拉长,Name属性改为inputTextBox
3、添加一个Button控件,Text属性改为:“确定”,Name属性改为enterButton
4、添加一个TreeView控件,适当调整大小,完成后如下图:
5、双击Button控件,编写Click事件,总体程序如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;//添加
namespace TreeView 控件
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void enterButton_Click(object sender, EventArgs e)
{
directoryTreeView.Nodes.Clear();// 每次确定时需要刷新内容
string inputText = inputTextBox.Text; // 获得输入框的内容
// 文件路径存在
if (Directory.Exists(inputText))
{
TreeNode rootNode = new TreeNode(inputText); // 创建树节点
directoryTreeView.Nodes.Add(rootNode); // 加入视图
FindDirectory(inputText, rootNode); //通过递归函数进行目录的遍历
}
// 文件路径不存在
else
{
MessageBox.Show("输入目录不存在!!!");
inputTextBox.Clear(); // 当文件目录不存在时清空控件内容
directoryTreeView.Nodes.Clear();
}
}
// 递归函数 遍历当前目录
void FindDirectory(string nowDirectory, TreeNode parentNode)
{
try // 当文件目录不可访问时,需要捕获异常
{
// 获取当前目录下的所有文件夹数组
string[] directoryArray = Directory.GetDirectories(nowDirectory);
if (directoryArray.Length > 0)
{
foreach (string item in directoryArray)
{
// 遍历数组,将节点添加到父亲节点的
string str = Path.GetFileNameWithoutExtension(item);
TreeNode node = new TreeNode(str);
parentNode.Nodes.Add(node);
FindDirectory(item, node);
}
}
}
catch (Exception)
{
parentNode.Nodes.Add("禁止访问");
}
}
}
}
6、运行程序,输入任意已存在的文件夹路径,点击确定: