在windows资源管理器中比如说我的电脑下的C,D,E,F盘程序刚运行时在listview中会显示这四个盘,而当我点了盘之后出现了盘中的文件,当我又点击我的电脑时回不到原来状态,也就是显示不到这几个盘的状态,怎么解决啊!我是菜鸟,请高手指点下!

解决方案 »

  1.   

    写一个独立函数绑定listview 先绑定文件夹 可以包括其名称 大小等 然后是文件 参数为路径字符串 ItemActivate激发该绑定函数 实参为路径
    跟人感觉是这样 不知道你是怎么写的 只是凭理解回答
      

  2.   

      数据绑定还没学啊!现在就学了单纯的treeview和listview!
      

  3.   

    这是我的代码!帮忙看下应该怎么加!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;
    using System.Runtime.InteropServices;
    namespace 练习
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                //将图标加到ImageList中。
                InitializeComponent();
                Icon ic0 = Tools.myExtractIcon(treeView1.Handle, "%SystemRoot%\\system32\\shell32.dll", 15);
                treeImagelist.Images.Add(ic0);
                imageList1.Images.Add(ic0);
                Icon ic1 = Tools.myExtractIcon(treeView1.Handle, "%SystemRoot%\\system32\\shell32.dll", 7);
                treeImagelist.Images.Add(ic1);
                Icon ic2 = Tools.myExtractIcon(treeView1.Handle, "%SystemRoot%\\system32\\shell32.dll", 4);
                treeImagelist.Images.Add(ic2);
            }
            string spath = "";//定义全局变量
            private void InitLizeListView()
            {
                int width = listView1.Width / 3;//将listview中的区域分为3块部分。
                listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);//根据指定的内容调整区域的大小。
                listView1.Columns.Add("文件名", width, HorizontalAlignment.Center);
                listView1.Columns.Add("大小", width, HorizontalAlignment.Center);
                listView1.Columns.Add("创建日期", width, HorizontalAlignment.Center);
                listView1.LargeImageList =imageList1;
                ///遍历所有的驱动器。
                DriveInfo[] dis = DriveInfo.GetDrives();
                foreach (DriveInfo di in dis)
                {
                    if (di.IsReady)
                    {                    ListViewItem item = new ListViewItem(new string[] { di.Name, (di.TotalSize / 1024 / 1024 / 1024).ToString() + "G" }, 0);
                        listView1.Items.Add(item);
                    }
                }
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                treeView1.BeginUpdate();
                treeView1.Nodes.Clear();
                TreeNode p = new TreeNode("我的电脑",0,0);//实例化一个根结点
                p.Name = "我的电脑";
                treeView1.Nodes.Add(p);//添加根结点
                ///遍历所有根结点下的所有驱动器
                DriveInfo[] di = DriveInfo.GetDrives();
                foreach (DriveInfo dm in di) 
                {
                    if (dm.IsReady)//判断驱动器是否准备好。
                    {
                        TreeNode TN = new TreeNode(dm.Name, 1, 1);
                        p.Nodes.Add(TN);//添加在根结点下的节点
                    }
                    
                }
                treeView1.ExpandAll();//展开所有树的的节点
                treeView1.EndUpdate();//启用对数的重绘。
                InitLizeListView();
            }
            private void GetDriveInfo(TreeNode node, string path)
            {
                ///遍历所有驱动器下的子目录。
                DirectoryInfo dti = new DirectoryInfo(path);
                DirectoryInfo[] dtis = dti.GetDirectories();
                foreach (DirectoryInfo mydti in dtis)
                {
                    TreeNode tn = new TreeNode(mydti.Name,2,2);
                    tn.Name = mydti.Name;
                    if (!node.Nodes.ContainsKey(tn.Name))//判断节点中是否存在要添加的节点。
                    {
                        node.Nodes.Add(tn);//添加所有驱动器下的子目录。
                        tn.EnsureVisible();//确保数节点可见,并在必要时展开树节点和滚动树视图。
                    }
                }
                        }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                try
                {
                    if (e.Node.Name != "我的电脑")
                    {                    GetDriveInfo(e.Node, e.Node.FullPath.Substring(5));
                        GetInfo(e.Node.FullPath.Substring(5));
                        spath = e.Node.FullPath.Substring(5);                }
                    
                    
                }
                catch
                {
                    MessageBox.Show("你的操作有错误!", "错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Hand);            }        }        private void 缩略图ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.LargeIcon;
               
            }        private void 平铺ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.List;
            }        private void 图标ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.Tile;
            }        private void 列表ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.SmallIcon;
            }
            private void 列表ToolStripMenuItem_Click_1(object sender, EventArgs e)
            {
                listView1.View = View.Details;
            }
            private void listView1_ItemActivate(object sender, EventArgs e)//点击listview中的选项而引发的事件。
            {
                try
                {
                    string str = Path.Combine(spath, listView1.FocusedItem.Text);
                    spath += "\\" + listView1.FocusedItem.Text;
                    GetInfo(str);
                   
                }
                catch
                {
                    MessageBox.Show("不是文件夹,不能打开!","错误",MessageBoxButtons.OKCancel,MessageBoxIcon.Hand);
                }
                finally 
                {
                    
                }
            }        private void GetInfo(string path)
            {
                Tools.ListViewSysImages(listView1);
                DirectoryInfo dti = new DirectoryInfo(path);
                DirectoryInfo[] dtis = dti.GetDirectories();
                FileInfo[] fis = dti.GetFiles();
                listView1.Items.Clear();
                foreach (DirectoryInfo mydti in dtis)
                {
                    listView1.Items.Add(mydti.Name, Tools.FileIconIndex(mydti.FullName));
                }
                foreach (FileInfo fi in fis)
                {
                    listView1.Items.Add(fi.Name, Tools.FileIconIndex(fi.FullName));
                }
            }
      

  4.   

    这是我的代码应该怎么加啊!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;
    using System.Runtime.InteropServices;
    namespace 练习
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                //将图标加到ImageList中。
                InitializeComponent();
                Icon ic0 = Tools.myExtractIcon(treeView1.Handle, "%SystemRoot%\\system32\\shell32.dll", 15);
                treeImagelist.Images.Add(ic0);
                imageList1.Images.Add(ic0);
                Icon ic1 = Tools.myExtractIcon(treeView1.Handle, "%SystemRoot%\\system32\\shell32.dll", 7);
                treeImagelist.Images.Add(ic1);
                Icon ic2 = Tools.myExtractIcon(treeView1.Handle, "%SystemRoot%\\system32\\shell32.dll", 4);
                treeImagelist.Images.Add(ic2);
            }
            string spath = "";//定义全局变量
            private void InitLizeListView()
            {
                int width = listView1.Width / 3;//将listview中的区域分为3块部分。
                listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);//根据指定的内容调整区域的大小。
                listView1.Columns.Add("文件名", width, HorizontalAlignment.Center);
                listView1.Columns.Add("大小", width, HorizontalAlignment.Center);
                listView1.Columns.Add("创建日期", width, HorizontalAlignment.Center);
                listView1.LargeImageList =imageList1;
                ///遍历所有的驱动器。
                DriveInfo[] dis = DriveInfo.GetDrives();
                foreach (DriveInfo di in dis)
                {
                    if (di.IsReady)
                    {                    ListViewItem item = new ListViewItem(new string[] { di.Name, (di.TotalSize / 1024 / 1024 / 1024).ToString() + "G" }, 0);
                        listView1.Items.Add(item);
                    }
                }
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                treeView1.BeginUpdate();
                treeView1.Nodes.Clear();
                TreeNode p = new TreeNode("我的电脑",0,0);//实例化一个根结点
                p.Name = "我的电脑";
                treeView1.Nodes.Add(p);//添加根结点
                ///遍历所有根结点下的所有驱动器
                DriveInfo[] di = DriveInfo.GetDrives();
                foreach (DriveInfo dm in di) 
                {
                    if (dm.IsReady)//判断驱动器是否准备好。
                    {
                        TreeNode TN = new TreeNode(dm.Name, 1, 1);
                        p.Nodes.Add(TN);//添加在根结点下的节点
                    }
                    
                }
                treeView1.ExpandAll();//展开所有树的的节点
                treeView1.EndUpdate();//启用对数的重绘。
                InitLizeListView();
            }
            private void GetDriveInfo(TreeNode node, string path)
            {
                ///遍历所有驱动器下的子目录。
                DirectoryInfo dti = new DirectoryInfo(path);
                DirectoryInfo[] dtis = dti.GetDirectories();
                foreach (DirectoryInfo mydti in dtis)
                {
                    TreeNode tn = new TreeNode(mydti.Name,2,2);
                    tn.Name = mydti.Name;
                    if (!node.Nodes.ContainsKey(tn.Name))//判断节点中是否存在要添加的节点。
                    {
                        node.Nodes.Add(tn);//添加所有驱动器下的子目录。
                        tn.EnsureVisible();//确保数节点可见,并在必要时展开树节点和滚动树视图。
                    }
                }
                        }        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
            {
                try
                {
                    if (e.Node.Name != "我的电脑")
                    {                    GetDriveInfo(e.Node, e.Node.FullPath.Substring(5));
                        GetInfo(e.Node.FullPath.Substring(5));
                        spath = e.Node.FullPath.Substring(5);                }
                    
                    
                }
                catch
                {
                    MessageBox.Show("你的操作有错误!", "错误", MessageBoxButtons.OKCancel, MessageBoxIcon.Hand);            }        }        private void 缩略图ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.LargeIcon;
               
            }        private void 平铺ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.List;
            }        private void 图标ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.Tile;
            }        private void 列表ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                listView1.View = View.SmallIcon;
            }
            private void 列表ToolStripMenuItem_Click_1(object sender, EventArgs e)
            {
                listView1.View = View.Details;
            }
            private void listView1_ItemActivate(object sender, EventArgs e)//点击listview中的选项而引发的事件。
            {
                try
                {
                    string str = Path.Combine(spath, listView1.FocusedItem.Text);
                    spath += "\\" + listView1.FocusedItem.Text;
                    GetInfo(str);
                   
                }
                catch
                {
                    MessageBox.Show("不是文件夹,不能打开!","错误",MessageBoxButtons.OKCancel,MessageBoxIcon.Hand);
                }
                finally 
                {
                    
                }
            }        private void GetInfo(string path)
            {
                Tools.ListViewSysImages(listView1);
                DirectoryInfo dti = new DirectoryInfo(path);
                DirectoryInfo[] dtis = dti.GetDirectories();
                FileInfo[] fis = dti.GetFiles();
                listView1.Items.Clear();
                foreach (DirectoryInfo mydti in dtis)
                {
                    listView1.Items.Add(mydti.Name, Tools.FileIconIndex(mydti.FullName));
                }
                foreach (FileInfo fi in fis)
                {
                    listView1.Items.Add(fi.Name, Tools.FileIconIndex(fi.FullName));
                }
            }