在前面讲述过使用TreeView控件和ListView控件显示磁盘目录信息,但仅仅是显示信息是不够的,我们还需要具体的操作.在"个人电脑使用历史痕迹"项目中我还需要添加"打开文件"和“删除文件”两种方法.具体如下:
        在第一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中显示如下:
        http://blog.csdn.net/eastmount/article/details/19453107
        免费下载地址:http://download.csdn.net/detail/eastmount/7414709

在第二篇文章"C# 系统应用之ListView控件 (二).加载选中节点文件夹下文件信息"中显示加载文件信息,如下图所示:http://blog.csdn.net/eastmount/article/details/21241313

该文章第三篇主要讲述的是为ListView控件中显示的文件添加一个鼠标右键菜单栏"打开文件"和"删除文件",打开文件能打开具体的文件,删除文件能删除至回收站.效果图如下图所示:
        打开文件

删除文件

一.添加控件ContextMenuStrip
        首先添加一个ContextMenuStrip控件(右键关联控件显示相关菜单),并在"请在此处键入"处添加"打开文件"和"删除文件"两栏,将添加两项的Name设置为openFileToolStripMenuItem和deleteFileToolStripMenuItem.(否则为中英名)
        然后为filesList(ListView)控件添加鼠标事件,添加代码如下:

#region 鼠标右击事件 添加contextMenuStrip控件
private void filesList_MouseClick(object sender, MouseEventArgs e)
{//禁止多选filesList.MultiSelect = false;//鼠标右键if (e.Button == MouseButtons.Right){//filesList.ContextMenuStrip = contextMenuStrip1;//选中列表中数据才显示 空白处不显示String fileName = filesList.SelectedItems[0].Text; //获取选中文件名Point p = new Point(e.X, e.Y);contextMenuStrip1.Show(filesList, p);}
}
#endregion

此时,运行软件点击文件就会添加了相应的菜单栏.
二.打开文件
        现在需要添加打开文件功能.需要自定义两个全局变量记录打开文件的路径和名称.

//全局变量
public string fileNamePublic = ""; //文件名
public string filePathPublic = ""; //文件路径

在更改选定内容AfterSelect事件中为选中的路径赋值,同时为openFileToolStripMenuItem添加Click事件.具体代码如下:

#region 打开文件操作
//设置contextMenuStrip1控件中"打开文件"Name为openFile
private void openFileToolStripMenuItem_Click(object sender, EventArgs e)
{//文件没有选中if (this.filesList.SelectedItems.Count == 0)return;//获取选中文件var selectedItem = this.filesList.SelectedItems[0];//全局变量文件名 SubItems[1]表示文件名fileNamePublic = filePathPublic + "\\" + selectedItem.SubItems[1].Text;//MessageBox.Show(fileNamePublic);try{//实例化一个新的Process类 命名空间using System.Diagnostics;using (Process p = new Process()){p.StartInfo.FileName = fileNamePublic; //指定要启动的文件路径p.StartInfo.CreateNoWindow = false; //在当前窗口启动程序//指定窗口的显示样式p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;p.StartInfo.UseShellExecute = true; //使用操作系统的shell启动进程p.Start(); //开始打开文件}}catch (Exception msg) //异常处理{MessageBox.Show(msg.Message);}
}
#endregion

它是通过实例化一个Process进程类,指定ProcessStartInfo参数,调用Process的Start()方法执行打开文件.
三.删除文件
        删除文件开始准备的方法是使用File.Delete删除,但是删除的文件并不是添加至回收站的,同时系统文件不能访问.所以采用了SHFileOperation外壳函数实现文件操作.为deleteFileToolStripMenuItem添加Click事件,具体代码如下:

#region 删除文件
//删除文件
//文件删除到回收站中
private const int FO_DELETE = 3;               //删除
private const int FOF_SILENT = 0x0004;         //不显示进度条提示框
private const int FOF_NOCONFIRMATION = 0x0010; //不出现任何对话框
private const int FOF_ALLOWUNDO = 0x0040;      //允许撤销
private const int FOF_NOCONFIRMMKDIR = 0x0200; //创建文件夹的时候不用确认//添加命名空间using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
private struct SHFILEOPSTRUCT
{public int hwnd;                     //父窗口句柄,0为桌面public int wFunc;                    //功能标志 FO_COPY复制 FO_DELETE删除 FO_MOVE移动 FO_RENAME重命名public string pFrom;                 //source file源文件或者源文件夹public string pTo;                   //destination目的文件或文件夹public int fFlags;                   //控制文件的标志位 FOF_ALLOWUNDO 准许撤销 FOF_CONFIRMMOUSE 没有被使用public bool fAnyOperationsAborted;public int hNameMappings;public string lpszProgressTitle;
}//SHFileOperation外壳函数 实现文件操作 参数SHFILEOPSTRUCT结构
[DllImport("shell32.dll")]
private static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);/// <summary>
/// 删除文件 Delete("c:\\test.txt",true) 把"c:/test.text"删除到回收箱
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private static int Delete(string sPath, bool recycle)
{SHFILEOPSTRUCT FileOp = new SHFILEOPSTRUCT();FileOp.hwnd = 0;FileOp.wFunc = FO_DELETE;      //实现操作是删除文件FileOp.fFlags = 0;FileOp.fFlags = FileOp.fFlags | FOF_SILENT;FileOp.fFlags = FileOp.fFlags | FOF_NOCONFIRMATION;FileOp.fFlags = FileOp.fFlags | FOF_NOCONFIRMMKDIR;if (recycle){FileOp.fFlags = FileOp.fFlags | FOF_ALLOWUNDO;}FileOp.pFrom = sPath + "\0";return SHFileOperation(ref FileOp);
}//设置contextMenuStrip1控件中"删除文件"Name为deleteFile
private void deleteFileToolStripMenuItem_Click(object sender, EventArgs e)
{//文件没有选中if (this.filesList.SelectedItems.Count == 0)return;//获取选中文件var selectedItem = this.filesList.SelectedItems[0];//全局变量文件名 SubItems[1]表示文件名fileNamePublic = filePathPublic + "\\" + selectedItem.SubItems[1].Text;//MessageBox.Show(fileNamePublic);try{if (MessageBox.Show("确认要删除该最近浏览文件信息?", "提示",System.Windows.Forms.MessageBoxButtons.YesNo,System.Windows.Forms.MessageBoxIcon.Question) ==System.Windows.Forms.DialogResult.Yes){//删除文件Delete(fileNamePublic, true);//移除文件foreach (ListViewItem item in this.filesList.SelectedItems){this.filesList.Items.Remove(item);}}MessageBox.Show(this, "成功删除了文件!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);}catch (Exception msg) //异常处理{MessageBox.Show(msg.Message);}
}
#endregion

四.总结
       
最后,希望该文章对大家有所帮助.这三篇文章主要讲述了如何使用C#的TreeView控件加载磁盘目录信息,同时在ListView控件中显示具体信息,为ListView控件添加鼠标右键ContextMenuStrip控件菜单栏.在这几篇文章中你可以实现到项目中的:
        1.如何使用TreeView控件添加图标,添加节点及其展开事件
        2.如何使用ListView控件加载数据,设置标题头、添加数据、listItem.SubItems.Add等,尤其在数据库处理等操作或显示信息时,经常会应用到该控件显示内容
        3.如何为控件添加右键菜单栏ContextMenuStrip,并设置其Item,为其添加相应的响应事件
        最后,希望文章对大家有所帮助,如果文章中有错误或不足之处,还请海涵.我这系列文章最后的运行效果如下图所示,高仿360同时能实现各种功能,具体参照博客每部分:

上面的打开删除文件源代码地址:http://download.csdn.net/detail/eastmount/7414709

(By:Eastmount 2014-5-28 夜8点 原创CSDNhttp://blog.csdn.net/eastmount/)

C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开删除文件相关推荐

  1. C# 系统应用之ListView控件 (二).加载选中节点文件夹下文件信息

    在项目中的前面一篇文章"C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标"中我讲述了如何使用TreeView控件树状实现显示"我的电脑&quo ...

  2. activex控件 新对象 ocx 初始化_VBA代码利用Listview控件来显示你的工作表任务

    VBA++ 题记:一剪闲云一溪月,一程山水一年华.一世浮生一刹那,一树菩提一烟霞.岁月静好,现世安稳.纵算云水漂泊,心若安宁,亦可淡若清风.希望见者与不见者都能安康.静下心,多学习有用的知识,多提高自 ...

  3. vb.net listview 删除选定行_VBA学习笔记59-1: listview控件

    学习资源:<Excel VBA从入门到进阶>第59集 by兰色幻想 本节学习Listview控件,它可以用多种视图方式显示项目的控件.由于其外形美观而且非常实用,所以使用频率很高. Lis ...

  4. C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标

    在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...

  5. VB 单击ListView控件某列表头进行排序

    VB 单击ListView控件某列表头进行排序,实现方法比较简单,不用写什么函数,ListView控件本身就有排序功能了. Private Sub ListView1_ColumnClick(ByVa ...

  6. ListView控件和Adapter

    文章目录 1.ListView组件的作用 2.Adapter的作用 2.1 android adapter的类图 3.adapter的使用 3.1 ArrayAdapter(数组适配器) 案例 3.2 ...

  7. Android获取景点的信息,景点介绍(ListView控件应用)

    1. 案例概述 此案例主要是对ListView列表控件的使用.当应用中包含多项数据,每项数据结构相同,只是内容不同时,可通过列表显示.对于列表中的内容,可以是显示字符串的TextView,也可以是结构 ...

  8. listview控件不兼容

    如果只是内部使用,只要把不同机器上的MSCOMCTL.OCX版本统一下,就可以避免老是要去重画LISTVIEW控件了.最好就用最新版本的,从某个机器上复制到别的机器上去,重新注册下.我亲自试过了,只要 ...

  9. (4)Android之路====APK基础入门4(ListView控件)

    本次来说一下ListView控件的情况: (一)ListView 概念: ListView是Android中最重要的组件之一,几乎每个Android应用中都会使用ListView.它以垂直列表的方式列 ...

最新文章

  1. 全球数百万台 Mac 疑似因 Big Sur 更新险酿计算灾难,苹果官方回应来了!
  2. mangodb collection level operations
  3. 包括 一个 20像素的黑条条
  4. iOS 淘宝买 开发者证书 进行真机调试
  5. (转) C#如何使用异步编程
  6. 搜索引擎的十大秘密(收藏)
  7. python基础练习题(按条件对指定序列求和,打印99乘法表、求斐波那契数列、百马百担、求水仙花数、求n以内的所有质数(素数)和)、集合的讲解、一些公关方法
  8. thymeleaf的url属性
  9. 写刀路的一些经验[分享] 铜公加工方法及注意事项
  10. [sprd]Android Q修改 Launcher 上文件夹图标的大小和应用的图标大小一致
  11. finereport与finebi差别_FineBI与FineReport对比
  12. 方框加对勾怎么输入_word里如何往方框中加对号?带方框的对号怎么弄,原来是这样的...
  13. 柱状图怎么设置xy轴_excel表格xy轴数据-怎么做用excel设置xy轴
  14. 【matplotlib】画图基本函数 pyplot.barh 画水平柱状图
  15. 双臂二指魔方机器人的制作(一)--总体设计
  16. C语言用双曲线函数拟合曲线,c语言绘制函数曲线
  17. 03.random_forest_demo
  18. 今天去元征科技,被SB面试了
  19. mysql json官方文档,10分钟了解MySQL5.7对原生JSON的支持与用法
  20. MyBatis Generator:[WARNING] Table Configuration users matched more than one table

热门文章

  1. 字符设备和块设备的区别
  2. lazy初始化和线程安全的单例模式
  3. Json,Hashlib与Base64(占坑待补)
  4. PhotoSwipe 图片浏览插件使用方法
  5. C#如何释放已经加载的图片 (转)
  6. teraterm 执行sql命令_tera term的ttl脚本使用方法 | 学步园
  7. 三维点云可以导航吗_基于视觉高精定位的“室内AR导航”技术点解析
  8. 7-4 jmu-Java-03面向对象基础-04-形状-继承 (15 分)
  9. 过程工程中的计算机应用基础,CDIO工程教育培养模式在《计算机应用基础》课中的应用...
  10. 网络部署过程中_郑州萤火云SEO网络优化:SEO过程中的容易犯的错误