例如C:\desk\下还有文件夹和文件如何使他们在treeview控件下显示,且怎么设定节点行为,调用另一个方法

解决方案 »

  1.   

    看看这个代码试试
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;namespace FileManager
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            //生成所有磁盘树
            private void Form1_Load(object sender, EventArgs e)
            {
                TreeNode tr1 = new TreeNode();
                tr1.Tag = "我的电脑";
                tr1.Text = "我的电脑";
                tr1.ImageIndex = 6;
                System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
                foreach (DriveInfo drive in drives)
                {
                    TreeNode tr = new TreeNode();
                    tr.Tag = drive.Name.ToString();
                    tr.Text = drive.Name.ToString().Replace(@":\","");
                    tr = DrivePic(tr, drive.DriveType);
                    tr1.Nodes.Add(tr);
                }
                treeView1.Nodes.Add(tr1);
            }        public TreeNode DrivePic(TreeNode tr,DriveType dt)
            {
                switch (dt)
                {
                    case DriveType.CDRom: tr.ImageIndex=0;
                        break;
                    case DriveType.Fixed: tr.ImageIndex =2;
                        break;
                    case DriveType.Network: tr.ImageIndex = 0;
                        break;
                    case DriveType.Ram: tr.ImageIndex = 0;
                        break;
                    case DriveType.Removable: tr.ImageIndex = 1;
                        break;
                    case DriveType.Unknown: tr.ImageIndex = 0;
                        break;
                    default: break;
                }
                return tr;
            }
           //组成所有磁盘树
            public static object[] GetHardDiskFreeSpace(string str_HardDiskName)
            {
                object[] Space = {"","","",""};
     
                System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
                foreach (DriveInfo drive in drives)
                {
                    if (drive.Name == str_HardDiskName)
                    {
                        Space[2] = DriveTypes(drive.DriveType);
                       
                        try
                        {
                            decimal Tolsize = decimal.Parse(drive.TotalFreeSpace.ToString());
                            Tolsize = Tolsize / (1000 * 1000 * 1024);
                            decimal Tolsize1 = decimal.Parse(drive.TotalSize.ToString());
                            Tolsize1 = Tolsize1 / (1000 * 1000 * 1024);
                            Space[0] = Convert.ToString(decimal.Round(Tolsize, 2));
                            Space[1] = Convert.ToString(decimal.Round(Tolsize1, 2));
                           
                            Space[3] = drive.DriveFormat;
                        }
                        catch
                        {
                            return Space;
                        }
                        break;
                    }
                }
                return Space;
            }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                TreeNode tr = treeView1.SelectedNode;
                if (tr.Tag.ToString().Length < 4)
                {
                    object[] s = GetHardDiskFreeSpace(tr.Tag.ToString());
                    LblDiskInfos.Text = tr.Tag.ToString().Replace(@":\", "") + " 盘\t剩余容量:" + s[0].ToString() + " GB\t总共容量:" + s[1].ToString() + " GB" + " \n磁盘类型:" + s[2].ToString() + " \t文件系统:" + s[3].ToString();
                }
                AddNode(treeView1.SelectedNode.Tag.ToString());
             
            }
            public static string DriveTypes(DriveType dt)
            {
                string type = "";
                switch (dt)
                {
                    case DriveType.CDRom: type = "光盘驱动器";
                        break;
                    case DriveType.Fixed: type = "本地磁盘";
                        break;
                    case DriveType.Network: type = "网络驱动器";
                        break;
                    case DriveType.Ram: type = "软盘驱动器";
                        break;
                    case DriveType.Removable: type = "可移动磁盘";
                        break;
                    case DriveType.Unknown: type = "未知类型驱动器";
                        break;
                    default: break;
                }
                return type;
           
            }
            //获取文件目录
            public void AddNode(string Name) 
            {
                panel2.Controls.Clear();
                if (treeView1.SelectedNode.Text!= "我的电脑")
                {
                    treeView1.SelectedNode.Nodes.Clear();
                }
                try
                {
                    int i = 0, j = 0;
                  
                    foreach (string directory in Directory.GetDirectories(Name))
                    {
                       
                        //MessageBox.Show(directory);
                        TreeNode TempNode = new TreeNode();
                        TempNode.Text = directory.Substring(directory.LastIndexOf(@"\") + 1);
                        TempNode.Tag = directory;
                        TempNode.ImageIndex = 7;                    PictureBox pc = new PictureBox();
                        pc.Height = 50;
                        pc.Width = 50;
                        pc.Name = TempNode.Tag.ToString();
                        pc.Cursor = System.Windows.Forms.Cursors.Hand;
                        pc.Image = imageList2.Images[0];
                        pc.Tag = "Directory";
                        pc.DoubleClick += new EventHandler(pc_Click);
                        pc.DoubleClick += new EventHandler(pc_DoubleClick);
                        Label lb = new Label();
                        lb.Text = TempNode.Text;
                        lb.TextAlign = ContentAlignment.MiddleCenter;
                        lb.Height = 50;
                        lb.Width = 50;
                        pc.Location = new Point(75 * j, 120 * i);
                        lb.Location = new Point(75 * j, 120 * i + 50);
                        j++;
                        if (j % 7 == 0)
                        {
                            i++;
                            j = 0;
                        
                        }
                        panel2.Controls.Add(pc);
                        panel2.Controls.Add(lb);
                        treeView1.SelectedNode.Nodes.Add(TempNode);
                       
                        treeView1.SelectedNode.Nodes[treeView1.SelectedNode.Nodes.Count - 1].EnsureVisible();
                        
                    }
                   
                    foreach (string s in Directory.GetFiles(Name)) 
                    {
                        PictureBox pc = new PictureBox();
                        pc.Height = 50;
                        pc.Width = 50;
                       
                        pc.Name = s;
                        pc.Image = imageList2.Images[1];
                        pc.Tag = "file";
                        pc.Cursor = System.Windows.Forms.Cursors.Hand;
                        //pc.DoubleClick += new EventHandler(pc_Click);
                        Label lb = new Label();
                       
                        lb.Text = s.Replace(Name, "");
                        lb.Text = lb.Text.Replace(@"\", "");
                        lb.TextAlign = ContentAlignment.MiddleCenter;
                        lb.Height = 50;
                        lb.Width = 50;
                        pc.Location = new Point(75 * j, 120 * i);
                        lb.Location = new Point(75 * j, 120 * i + 50);
                        j++;
                        if (j % 7 == 0)
                        {
                            i++;
                            j = 0;
                        }
                        panel2.Controls.Add(pc);
                        panel2.Controls.Add(lb);
                    
                    }
                }
                catch 
                {   }
            
            }        void pc_DoubleClick(object sender, EventArgs e)
            {            PictureBox pc = (PictureBox)sender;
                TreeNode tnRet = null;
            
                foreach (TreeNode tn in treeView1.Nodes)
                {                tnRet = FindNode(tn, pc.Name.ToString());
                    {
                        if (tnRet != null)
                        {
                            // MessageBox.Show(tnRet.Text);
                            treeView1.Focus();
                            treeView1.SelectedNode = tnRet;
                            break;
                        }
                    }
                }
            }        void pc_MouseMove(object sender, MouseEventArgs e)
            {
                
            }        void pc_Click(object sender, EventArgs e)
            {
               
            }        private TreeNode FindNode(TreeNode tnParent, string strValue)
            {
                if (tnParent == null) return null;
                if (tnParent.Tag.ToString() == strValue) return tnParent;
                TreeNode tnRet = null;
                foreach (TreeNode tn in tnParent.Nodes)
                {
                    tnRet = FindNode(tn, strValue);
                    if (tnRet != null) break;
                }
                return tnRet;
            }
        }
    }
      

  2.   

    要用到这几个类:
    DirectoryInfo 
    FileInfo
    TreeViewDirectoryInfo.GetDirectories获得所有子目录。
    DirectoryInfo.GetFiles获得所有的文件。把获得的子目录和文件绑定到TreeView的节点下,根据是文件还是目录创建不同的节点类型(DirNode:TreeNode,FileNode:TreeNode)。每个节点有Click事件,点击节点时触发这个Click事件,调用另一个方法。
      

  3.   

    LblDiskInfos和 panel2这两个变量是什么 ,没有定义
      

  4.   

    回复2楼
    DirectoryInfo.GetDirectories获得所有子目录。 
    DirectoryInfo.GetFiles获得所有的文件。 把获得的子目录和文件绑定到TreeView的节点下,根据是文件还是目录创建不同的节点类型(DirNode:TreeNode,FileNode:TreeNode)。 能将这几个具体实现吗?