C# treeView展示目录树

使用treeView控件展示目录树列表,并进行一系列的操作。

代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TreeViewTest
{
    public partial class frmTreeView : Form
    {
        private bool isfirst = true;//默认选择某个节点标志
        public frmTreeView()
        {
            InitializeComponent();
            
        }
        private void btnOpdir_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dlg = new FolderBrowserDialog();//选择目录
            if (dlg.ShowDialog()==DialogResult.OK)
            {
                ShowTreeView(treeView1,dlg.SelectedPath);
            }
        }
        //treeView1事件---取消默认选择某一节点
        private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
        {
            if (isfirst)
            {
                e.Cancel = true;
                isfirst = false;
            }
        }

        //treeView1事件---选中或取消选中树节点上的复选框
        private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action == TreeViewAction.ByMouse)//通过鼠标操作
            {
                if (e.Node.Checked == true)
                {
                    AllNodesChecked(e.Node, true);//选中节点,其子节点也选中
                }
                else if (e.Node.Checked == false)
                {
                    AllNodesChecked(e.Node, false);//取消节点选中,其子节点也取消选择

                    if (e.Node.Parent != null)  //如果节点存在父节点,取消父节点的选择
                    {
                        FuNodeNoChecked(e.Node, false);//取消子节点选中,其父节点也取消选择
                    }
                }
            }
        }
        //展示目录树结构
        private void ShowTreeView(TreeView treeview, string path)
        {
            try
            {
                treeview.Nodes.Clear();//清空所有
                TreeNode rootNode = new TreeNode(path);//载入显示
                rootNode.Tag = path;//树节点数据
                rootNode.Text = path;//节点标签显示内容
                treeview.Nodes.Add(rootNode);//添加根目录

                DirectoryInfo dirs = new DirectoryInfo(path);//创建目录对象
                DirectoryInfo[] dir = dirs.GetDirectories();//目录下的所有子目录
                int dirCount = dir.Count();//子目录个数
                for (int i = 0; i < dirCount; i++)
                {
                    rootNode.Nodes.Add(dir[i].Name);//在根节点下添加子节点(dir[i].Name目录名称)
                    string pathNode = path + "\\" + dir[i].Name;//子节点的全路径
                    GetNode(rootNode.Nodes[i], pathNode);//遍历目录下的子目录
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + "\r\n出错位置");
            }

        }
        //递归遍历子目录
        private bool GetNode(TreeNode treeNode, string path)
        {
            if (Directory.Exists(path) == false)
            {
                return false;
            }
            DirectoryInfo dirs = new DirectoryInfo(path);
            DirectoryInfo[] dir = dirs.GetDirectories();
            int dirCount = dir.Count();
            if (dirCount == 0)
            {
                return false;
            }
            for (int i = 0; i < dirCount; i++)
            {
                treeNode.Nodes.Add(dir[i].Name);
                string pathNode = path + "\\" + dir[i].Name;
                GetNode(treeNode.Nodes[i], pathNode);//递归遍历目录下的子目录
            }
            return true;
        }

        /// <summary>
        ///选中节点,其子节点也选中 
        /// </summary>
        /// <param name="currNode">当前选择的节点</param>
        /// <param name="state">选择状态</param>
        private void AllNodesChecked(TreeNode currNode, bool state)
        {
            TreeNodeCollection nodes = currNode.Nodes;
            if (nodes.Count > 0)
            {
                foreach (TreeNode tn in nodes)
                {
                    tn.Checked = state;
                    AllNodesChecked(tn, state);
                }
            }
        }
        /// <summary>
        /// 取消节点选中,其父节点也取消选择
        /// </summary>
        /// <param name="treeNode">当前节点</param>
        /// <param name="state">选择状态</param>
        private void FuNodeNoChecked(TreeNode currNode, bool state)
        {
            TreeNode fuNode = currNode.Parent;
            fuNode.Checked = state;
            if (currNode.Parent.Parent != null)
            {
                FuNodeNoChecked(currNode.Parent, state);
            }
        }

       
    }
}

 

C#中,可以使用`TreeView`控件来显示文件目录,这通常涉及到递归遍历文件系统,并将目录和文件显示为节点。以下是一个简单的示例来展示如何实现这个功能: 首先,你需要在Windows窗体应用程序中添加一个`TreeView`控件。然后,你可以使用`System.IO`命名空间中的`Directory`类来获取目录信息,并使用递归函数来遍历目录结构。 以下是一个简单的示例代码,演示如何使用`TreeView`控件来显示文件目录: ```csharp using System; using System.IO; using System.Windows.Forms; namespace TreeViewExample { public partial class MainForm : Form { private TreeNodeCollection treeNodes; public MainForm() { InitializeComponent(); treeNodes = treeView.Nodes; AddNode("C:\\"); // 你可以根据需要更改路径 } private void AddNode(string path) { // 获取路径下的所有目录 DirectoryInfo dirInfo = new DirectoryInfo(path); TreeNode rootNode = new TreeNode(dirInfo.Name); foreach (DirectoryInfo directory in dirInfo.GetDirectories()) { // 递归添加子目录 AddNode(directory.FullName); } foreach (FileInfo file in dirInfo.GetFiles()) { // 添加文件节点 rootNode.Nodes.Add(file.Name); } treeNodes.Add(rootNode); } } } ``` 在上述代码中,`AddNode`方法用于递归遍历目录,并为每个目录和文件创建相应的`TreeNode`,然后将其添加到`TreeView`控件中。这个方法从指定的路径开始,遍历所有子目录,并将文件作为叶节点添加到中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你懂的11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值