C#TreeView加载节点与文件

下面的  LoadTvDirectory()  由TreeView_Load 调用(TreeView_Form)          txt_tv2  为 TreeView 控件

  MxdrSave.LoadDirectory()   MxdrSave.LoadLvFile() 两个静态方法都在 MxdrSave.自定义类中。前者加载目录节点,后者加载文件节点。

tnode.ImageIndex = 16;     tnode.SelectedImageIndex = 17;  这两个都是选择 imagList  控件中的顺序 (从 0 开始) 图标,分别为选定未选定 状态图标

        #region =★=*=★=*=★= 加载系统盘目录(由 TreeView_Load 项 调用) =★=*=★=*=★=
        ///  加载系统盘目录(由 TreeView_Load 项 调用) 
        private void LoadTvDirectory()
        {
            DriveInfo[] di = DriveInfo.GetDrives();
            foreach (DriveInfo driver in di)
            {
                TreeNode tnode = new TreeNode(driver.Name);
                if (driver.IsReady)
                {
                    tnode.Tag = driver;
                    tnode.ToolTipText = driver.TotalSize.ToString();
                    txt_tv2.Nodes.Add(tnode);  //为TreeView 控件添加节点
                    MxdrSave.LoadDirectory(Path.GetFullPath(tnode.Text), tnode);
                }
            }
        }
        #endregion

        #region  =★*★*★= 加载〖节点〗 =★*★*★=
        ///  加载指定目录中的项(文件夹) 
        /// 参数1(path):目录路径名称
        /// 参数2(tNode):选定的节点
        ///  
        /// 目录路径
        /// 选定的节点
        public static void LoadDirectory(string path, TreeNode tNode)
        {
            try
            {
                string[] directorys = Directory.GetDirectories(path); //获取选中treeview节点的子目录

                foreach (string item in directorys)
                {
                    if ((File.GetAttributes(item) & FileAttributes.Hidden) != FileAttributes.Hidden)
                    {
                        TreeNode tnode = new TreeNode(Path.GetFileName(item));
                        tnode.Name = item;
                        tnode.ToolTipText = "文件夹: " + item;
                        tnode.ImageIndex = 16;
                        tnode.SelectedImageIndex = 17;
                        tNode.Nodes.Add(tnode); //选中节点添加子节点
                    }
                }
                LoadLvFile(path, tNode);  /* 加载文件节点 */
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }        

        ///  加载指定目录中的项(文件) 
        /// 参数1(path):目录路径名称
        /// 参数2(tNode):选定的节点
        ///  
        /// 目录路径
        /// 选定的节点
        public static void LoadLvFile(string path, TreeNode tNode)
        {
            try
            {
                if (path.Contains("System Volume Information"))
                {
                    return;
                }
                string[] files = Directory.GetFiles(path);  //获取目录中的文件名称
                foreach (string item in files)
                {
                    string eName = Path.GetExtension(item);
                    //string strName = Path.GetFileNameWithoutExtension(item);
                    if (eName == ".txt" && (File.GetAttributes(item) & FileAttributes.Hidden) != FileAttributes.Hidden)
                    {
                        TreeNode tnodes = new TreeNode(Path.GetFileName(item));
                        tnodes.Name = item;
                        tnodes.ToolTipText = "文件名: " + item;
                        tnodes.ImageIndex = 18;
                        tnodes.SelectedImageIndex = 20;
                        tNode.Nodes.Add(tnodes);
                    }
                }
            }
            catch (Exception e) { MessageBox.Show(e.ToString()); }
        }
        #endregion


TreeView 点击节点(如果为目录展开/折叠,假如为文件加载到  txt 中)

LoadFind(nodePath2);    委托   没特殊情况直接加载就好,不必委托

        ///

获取或设置TreeView2 nodes 路径
        string nodePath2 = string.Empty;

        private void txt_tv2_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            TreeView tv = sender as TreeView;
            TreeNode select = tv.GetNodeAt(e.Location);
            if (select != null)
            {   /* 如果选择节点不是null,就设置为你的“选取结点” */
                tv.SelectedNode = select;
            }
            try
            {
                string path = e.Node.FullPath;
                string s = Path.GetPathRoot(path);
                if (s != "")
                {
                    nodePath2 = path;

                    if (e.Button != MouseButtons.Right)  /* 不是右键点击 */
                    {
                        txt_tv2.LabelEdit = false;  //节点不可编辑状态
                        if (File.Exists(nodePath2))
                            LoadFind(nodePath2);   //加载文件
                            openFiles(this,richTextBox1,nodePath2);//上面这句委托 改为直接调用下面的方法
                        else
                            e.Node.Toggle();
                    }
                    else //这里可要可不要
                    {
                        bool TrueFalse = MxdrSave.bools(path);/* 判断节点是否为系统磁盘 */
                        if (TrueFalse)
                        { /* 右键菜单选项不可用(灰色状态) */
                            MenuItem_Rename.Enabled = false;/* 右键〖重命名〗不可用 */ 
                            MenuItemDirX.Enabled = false;/* 右键〖创建同级Dir〗不可用 */ 
                        }
                        else { 
                            MenuItem_Rename.Enabled = true;
                            MenuItemDirX.Enabled = true; 
                        } 
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }
        }

txtName(获取或设置文件名(不含路径))  filePath (获取或设置文件路径)

        #region  =★*★*★= 为TreeView节点打开文件 =★*★*★=
        ///  为TreeView节点打开文件 
        /// 窗口
        /// 文件名(含路径)
        public static void openFiles(Form form, RichTextBox txt, string path)
        {
            FileStream fs = new FileStream(path,
                FileMode.Open, FileAccess.Read, FileShare.None);
            StreamReader sr = new StreamReader(fs, Encoding.Default);
            //readFile(sr.ReadToEnd());  //委托事件
            txt.Text = sr.ReadToEnd();
            txtName = Path.GetFileName(path); //获取文件名 
            //filePath = fileInfo.FullName; //获取文件路径
            filePath = path;
            string str = Directory.GetParent(filePath).ToString();
            string strs = Path.GetExtension(filePath);
            txtName = Path.GetFileNameWithoutExtension(path);
            sr.Close(); fs.Close(); //FbOpen = true; FbSave = true; FbOpens = false; //这里可以忽略 
            form.Text = string.Format("『{0}』{2}〖Mxdr记事本〗 - 所在目录:[{1}]", txtName, str, strs);
        }
        #endregion

 
  C#TreeView加载节点与文件_第1张图片 
  C#TreeView加载节点与文件_第2张图片 
 

你可能感兴趣的:(.NET/C#)