版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://zhjjzhjj.blog.51cto.com/1802676/379525

做的c#资源管理器所用到的一些事件和方法:一些方法需要自己去掌握。比如怎样把系统定义的

枚举转化成自己想要的枚举类型。怎样展开节点,怎样判断一个文件是不是隐藏文件等等一些很

小的细节需要自己慢慢去积累去学习。下面是个例子帮助自己学习和理解这些小知识。
//遍历所有的磁盘
            foreach (string log in Directory.GetLogicalDrives())
            {
                //得到磁盘符的类型
                DriveInfo dif = new DriveInfo(log);

if (dif.DriveType == DriveType.CDRom)//如果为驱动器的设置树形节点的

图标
                {
                    treeView1.Nodes.Add(log, log, 3, 3);
                }
                else
                {
                    TreeNode tn = treeView1.Nodes.Add(log, log, 2, 2);//设置如果不是

驱动器的树形节点的图标
                    foreach (string logs in Directory.GetDirectories(log))
                    {
                        DirectoryInfo difs = new DirectoryInfo(logs);
                        if (!difs.Attributes.ToString().Contains("Hidden"))//判断如

果不是隐藏文件
                        {
                            tn.Nodes.Add(logs, Path.GetFileName(logs), 0, 1);
                        }
                    }

}
            }

foreach (string view in Enum.GetNames(typeof(ViewCN)))
            {
                toolStripSplitButton3.DropDownItems.Add(view).Click += ViewClick;//

遍历所有的枚举类型把他转化成我们自定义的类型
            }

void ViewClick(object sender, EventArgs e)
        {
            listView1.View = (View)(int)((ViewCN)Enum.Parse(typeof(ViewCN),

((ToolStripMenuItem)sender).Text));//把所有的枚举类型把他转化成自定义的类型
        }
        //自定义与系统给定的一致的枚举类型
        enum ViewCN
        {
            大图标 = 0,
            详细列表 = 1,
            小图标 = 2,
            列表 = 3,
            平铺 = 4,
        }

//在树形节点被展开后得到它的文件名称
        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
        {
            toolStripComboBox1.Text = e.Node.Name;
            foreach (TreeNode tn in e.Node.Nodes)
            {
                try
                {
                    foreach (string str in Directory.GetDirectories(tn.Name))
                    {
                        DirectoryInfo dif = new DirectoryInfo(str);

if (!dif.Attributes.ToString().Contains("Hidden"))
                        {
                            tn.Nodes.Add(str, Path.GetFileName(str), 0, 1);
                            //tn.Nodes.Add(str, Path.GetFileName(str), 1, 2);
                        }
                    }
                }
                catch
                {
                }
            }
        }
        //双击listView时让对应的节点文件也展开
        private void listView1_DoubleClick(object sender, EventArgs e)
        {

if (listView1.SelectedItems.Count > 0)
            {
                string path = listView1.SelectedItems[0].Name;
                toolStripComboBox1.Text = path;
                GetDirFile(path);

string[] DirArr = path.Split('\\', '/');
                foreach (TreeNode tn in treeView1.Nodes)
                {
                    if (DirArr[tn.Level] == tn.Text.Trim('\\'))  //判断数组的内容和节点的内容是否一致
                    {
                        tn.Expand();//节点展开
                        ExpadNode(tn, DirArr);//一致递归调用展开所有的符合条件的节点
                    }
                }
            }
        }
        /// <summary>
        /// 展开节点方法
        /// </summary>
        /// <param name="tn"></param>
        /// <param name="DirArr"></param>
        void ExpadNode(TreeNode tn, string[] DirArr)
        {
            foreach (TreeNode tns in tn.Nodes)
            {
                if (tns.Level < DirArr.Length)
                {
                    if (DirArr[tns.Level] == tns.Text)
                    {
                        tns.Expand();
                        ExpadNode(tns, DirArr);
                        break;
                    }
                }
            }
        }

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Environment.Exit(0);//应用程序退出
        }
        //对文件进行重命名
        private void button1_Click(object sender, EventArgs e)
        {
            listView1.LabelEdit = true;
            listView1.SelectedItems[0].BeginEdit();
            //foreach (string str in Directory.GetDirectories(@"C:/"))
            //{
            //    DirectoryInfo di = new DirectoryInfo(str);
            //    MessageBox.Show(str + "---" + di.Attributes.ToString());
            //}
        }
        //拖文件实现复制的功能
        private void listView1_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                string ath = (((string[])e.Data.GetData(DataFormats.FileDrop))[0]);
                File.Copy(ath, toolStripComboBox1.Text + "\\" + Path.GetFileName

(ath), true);
            }
        }
 //在树形节点被选择以后得到它的图标和名称
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            GetDirFile(e.Node.Name);
            toolStripComboBox1.Text = e.Node.Name;
        }
        /// <summary>
        /// 大小图片的转化和引用系统的文件转化图标
        /// </summary>
        /// <param name="path"></param>
        void GetDirFile(string path)
        {
            listView1.Items.Clear();
            SmallImaList.Images.Clear();
            LargeImaList.Images.Clear();
            int nIndex = 0;

SHFILEINFO shinfo = new SHFILEINFO();
            listView1.SmallImageList = SmallImaList;
            listView1.LargeImageList = LargeImaList;
            try
            {
                foreach (string file in Directory.GetFiles(path))
                {
                    Win32.SHGetFileInfo(file, 0, ref shinfo, (uint)Marshal.SizeOf

(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON);
                    Icon myIcon = Icon.FromHandle(shinfo.hIcon);
                    this.SmallImaList.Images.Add(myIcon);

Win32.SHGetFileInfo(file, 0, ref shinfo, (uint)Marshal.SizeOf

(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_LARGEICON);
                    myIcon = Icon.FromHandle(shinfo.hIcon);
                    this.LargeImaList.Images.Add(myIcon);

FileInfo fi = new FileInfo(file);
                    if (!fi.Attributes.ToString().Contains("Hidden"))
                    {
                        ListViewItem lvi = listView1.Items.Add(file,

Path.GetFileName(file), nIndex++);
                        lvi.SubItems.Add(Directory.GetLastWriteTime(file).ToString

());
                        lvi.SubItems.Add(Path.GetExtension(file));
                    }
                }
            }
            catch
            { }

SmallImaList.Images.Add(imageList1.Images[0]);
            LargeImaList.Images.Add(imageList1.Images[0]);
            try
            {
                foreach (string dir in Directory.GetDirectories(path))
                {
                    DirectoryInfo dif = new DirectoryInfo(dir);
                    if (!dif.Attributes.ToString().Contains("Hidden"))
                    {
                        ListViewItem lvi = listView1.Items.Add(dir,

Path.GetFileName(dir), SmallImaList.Images.Count - 1);
                        lvi.SubItems.Add(Directory.GetLastWriteTime(dir).ToString

());
                        lvi.SubItems.Add("文件夹");
                    }

}
            }
            catch
            { }

}

///引用系统文件获得系统文件对应的图标
    [StructLayout(LayoutKind.Sequential)]
    public struct SHFILEINFO
    {
        public IntPtr hIcon;
        public IntPtr iIcon;
        public uint dwAttributes;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
        public string szDisplayName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
        public string szTypeName;
    }

class Win32
    {
        public const uint SHGFI_ICON = 0x100;
        public const uint SHGFI_LARGEICON = 0x0; // 'Large icon
        public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
        [DllImport("shell32.dll")]
        public static extern IntPtr SHGetFileInfo(string pszPath, uint

dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags);
    }

本文出自 “zhangjingjing” 博客,请务必保留此出处http://zhjjzhjj.blog.51cto.com/1802676/379525

c#资源管理器【转】相关推荐

  1. “解决方案资源管理器”中不能自动选择正在编辑的文档

    本来正在编辑的文档应该在"解决方案资源管理器"中自动选中的,但是我的VS2005机器好像没有这个功能,后来发现 "工具->选贤"里边的"项目和解 ...

  2. 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门

    1.1 环境 Visual Studio + GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Me ...

  3. OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  4. bat 重启资源管理器

    文件名称:重启文件管理器.bat 批处理内容如下:(编码ANSI) @echo off color 0a title 重启资源管理器echo. echo ----------------------- ...

  5. elementui如何在input 框中搜索_在 Windows 10 中的文件资源管理器中删除搜索历史记录...

    Windows 资源管理器带有搜索功能,用户可以通过该功能找到特定的文件或文件夹.默认情况下,您在搜索框中进行的所有搜索都会保存到其历史记录中.下次您在搜索框中输入内容时,它将在下拉对话框中显示最近输 ...

  6. 调整Win7资源管理器中导航栏和计算机的位置

    原文:http://blog.163.com/roc_sp/blog/static/39012041201141111280971/ 在默认情况下,Win7资源管理器中的计算机是排在库下面的,本文的目 ...

  7. 资源管理器方法访问FTP服务

    老方最近换了工作,做了乙方的项目经理,但技术实施的活也是要做的哈. 说话,最近在一个部队做项目,项目之外,协助他们建立了一个FTP服务器,权限什么的设置凭着老方的通天晓地(板砖,你慢慢的拍)的能耐,很 ...

  8. win8计算机管理打不开,win8,资源管理器未响应,文件夹打不开,假死……

    您好, 资源管理器未响应是系统进程explorer.exe崩溃导致的. 发生这样的错误可能是运行的进程过多,或者内存占用过大造成的. 首先您可以尝试使用干净启动开启计算机: 1.从屏幕右边缘滑入,然后 ...

  9. .exe已停止工作_这几天我遇到了前所未有的问题windows10 1809 explorer.exe资源管理器频繁崩溃...

    这几天 我遇到了前所未有的问题 windows10 1809 explorer.exe资源管理器频繁崩溃? 这系统这玩意儿 你越折腾他 他越容易出毛病 本想着Windows10 1703用到win10 ...

  10. Windows Phone 7 隔离存储空间“.NET研究”资源管理器

    我们知道Windows Phone 7 目前是不支持访问外部存储空间的,我们的应用程序可以使用的数据空间包括隔离存储空间(IsolatedStorage)和云端(Could)空间.作为开发人员,我们以 ...

最新文章

  1. php log在哪里看,PHP Log时时查看小工具
  2. linux 数据复制 dd 简介
  3. WAF果真是个好东西
  4. python的turtle画曲线_python的turtle模块画折线图
  5. 几个有用的word小技巧,保准提升效率~
  6. Python学习-基础篇14 Web框架本质及第一个Django实例
  7. PageStateLayout
  8. CSS侦测方法(侦测是否支持某个CSS属性)
  9. 远程登录服务器时,提示未被授予终端服务器登录权限?
  10. php还原时间戳,如何将php时间戳转换回日期
  11. 哆啦A梦的神奇口袋 - 这全是宝藏 https://baozangku.com/
  12. supervisor 使用详解
  13. vue中如何展现快速增长数字的动画
  14. ping www.baidu.com 不通
  15. Python网络爬虫与信息提取
  16. 电位器的阻值曲线变化特性解析与应用
  17. redis 生产环境 谨慎执行的命令
  18. IOS去除文件后缀名
  19. C语言必会面试题(3、耶稣有13个门徒,当中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个開始报号:1,2,3,1,2,3...。凡是报到“3”就退出圈子,...)...
  20. 练习(京东图片,导航左侧,网易列表,3school导航条,京东轮播图/电影卡片)

热门文章

  1. 嵌入式开发之hi3519---PCIE DMA
  2. 安装Kubernetes-Dashboard插件
  3. Python线程同步机制: Locks, RLocks, Semaphores, Condition
  4. Android Studio下加入百度地图的使用 (一)——环境搭建
  5. 各类型磁盘的IOPS一览表
  6. CentOs配置网卡
  7. (转)pipe row的用法, Oracle split 函数写法.
  8. jQuery 分页插件 jPages 使用
  9. 在showModalDialog和showModelessDialog中提交form时不弹出新窗口
  10. hbase开发环境搭建及运行hbase小实例(HBase 0.98.3新api)