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

2023-11-19

        在前面讲述过使用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/)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • mac上通过自动操作达到右键通过vscode打开文件、文件夹

    mac上通过自动操作达到右键通过vscode打开文件 文件夹 打开mac中的自动操作app 搜索运行shell脚本 工作流程收到当前 xff1a 文件或文件夹 xff0c 位于 xff1a 访达 xff0c 传递输入为 xff1a 变量 x
  • windows新增右键菜单,通过wsl中的vim打开文件

    文章目录 查看wsl打开方式添加右键菜单增加图标效果 非常简单的方式 x1f44d 查看wsl打开方式 可以看到我这里使用ubuntu2004 exe可以打开 添加右键菜单 按下win输入regedit xff0c 在右边选择管理员打开 然
  • python打开bat文件_Python之批处理字符串(打开文件)

    关注微信公众号 黑客易先生 xff0c 关注了你就知道我活儿好 前辈今天让我帮他弄16个新的QQ xff0c 无保无绑 一个一个申请虽然可以 xff0c 但是想起以前黑过一台刷空间访问量的服务器 xff0c 里面有1000个QQ小号 xff
  • python 打开读取文件 出现异常 关闭文件的处理(世界上没有傻问题!但我是个傻子)

    事情梗概 try 尝试读取一个不存在的文件 except Exception as e 打印异常 finally 关闭文件 但是关闭文件时报异常 算了 看代码吧 try f open file name rb file data f rea
  • EXCEL-VBA:弹出对话框,打开文件(指定扩展名)两种方法

    方法一 Dim FileName As String FileName Application GetOpenFilename Excel 文件 xls xlsx 方法二 With Application FileDialog msoFil
  • C# 连接SQLServer数据库及登录验证知识

    最近在做联系数据库的系统项目 这里重新回顾了一些数据库的知识 主要是使用VS2012与SQL Server 2012简单的做了下面两个数据库的应用 虽然比较简单 但我认为这是非常有用的知识 尤其对刚接触这样的系统知识的同学 同时也巩固了自己
  • C# 数据库存储过程的讲解应用

    在使用VS 2012 SQL Server做简单的销售系统中 通常会遇到一些使用存储过程的情况 那究竟什么是存储过程 它的好处是什么呢 如果在SQL Server中创建一个存储过程 C 中怎样联系存储过程呢 一 存储过程 存储过程 Stor
  • QT5 创建“打开文件”按钮

    在GUI界面设计中 有时需要 打开文件 按钮 以加载外部文件 则需要我们用QFileDialog的静态函数完成 QT5中几个文件相关函数如下 函数名 作用 getOpenFileName 加载用户选择文件的文件名 getSaveFileNa
  • C# 基础知识 (五).变量类型和字符串处理

    这篇文章是阅读 C 入门经典 Beginning C 书籍里面的内容 作者Karli Watson 主要包括自己缺乏的一些C 基础知识和在线笔记使用 文章主要包括C 简单变量类型和复杂变量类型 命名规则 隐式转换和显示转换 变量字符串处理等
  • C# 系统应用之清除Cookies、IE临时文件、历史记录

    本文主要是项目 个人电脑使用记录清除软件 系类文章中关于清除浏览器Cookies IE临时文件 最近使用历史记录等内容 该篇文章的基本思想路线是首先了解上网历史记录的Windows中常用文件路径 再通过文件delete方法删除该文件下内容
  • C# 系统应用之清空回收站操作

    由于毕业设计项目是基于U盘防御的软件 所以涉及些系统应用的知识 本文主要讲述的是如何通过C 代码实现清空回收站的资源 主要通过SHEmptyRecycleBin函数实现 一 SHEmptyRecycleBin函数 SHEmptyRecycl
  • C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标

    在C 系统应用毕设U盘防御软件中需要实现文件不可恢复的删除 首先需要实现类似于资源管理器的界面 通过TreeView控件显示 我的电脑 所有磁盘文件树状目录并加载相应图标 显示结果如下图所示 一 界面设计 主窗体是一个Windowss窗体文
  • C# VS2012操作word文档 (二).插入表格图片

    在上一篇文章 C VS2012创建word文档 一 中我们讲述了如何使用VS2012引用COM中Miscrosoft Word 14 0 Object Library实现创建文档 而这篇文章将讲述如何添加表格和图片 因为我在C 联系数据库做
  • C# 系统应用之注册表使用详解

    在平时做项目时 我们有时会遇到注册表的操作 例如前面我们需要获取IE浏览器地址栏的信息 获取 我的电脑 地址栏输入的文件夹信息 USB最近使用信息等 注册表项是注册表的基本组织单位 它包含子表项和值条目 简言之 注册表项相当于注册表里的文件
  • C#实现百度地图附近搜索&调用JavaScript函数

    前一篇文章 C 调用百度地图API入门 解决BMap未定义问题 讲述了如何通过C 调用百度API显示地图 并且如何解决BMap未定义的问题 这篇文章主要更加详细的介绍百度地图的一些功能 包括附近搜索 城市搜索 路线规划 添加覆盖物等等 希望
  • C# 系统应用之无标题窗体移动的两种方法

    在做项目界面设计中 常常为了美观需要设置窗体属性 FormBorderStyle 窗体边框和标题栏外观 为None无标题窗口 此时隐藏标题的窗口怎样实现移动呢 我根据自己的项目从自己完成的两种方法进行讲解 一 MouseDown Mouse
  • C# 基础知识 (四).C#简介及托管代码

    暑假转瞬即逝 从10天的支教生活到1周的江浙沪旅游 在这个漫长的暑假中我经历了很多东西 也学到了很多东西 也认识到了很多不足之处 闲暇之余我准备重新进一步巩固C 相关知识 包括C 入门知识 C 并行开发 ASP网站等 这篇文章我介绍的是书籍
  • DataGridView 单元格、RowHeader 和 ColumnHeader 的不同 ContextMenuStrip

    我想设置不同ContextMenuStrip for DataGridView Cells RowHeaders and ColumnHeaders 这个想法是 当我右键单击这些项目中的任何一个时 会出现一个不同的ContextMenuSt
  • 创建控件的透明部分以查看其下方的控件

    我已经修改了超级上下文菜单条在 CodeProject 找到的 可以满足我的一些项目需求 我将其用作地图标记的工具提示GMap NET 地图控件 下面是它的示例 我想做的就是通过让它看起来更像一个泡沫来稍微美化一下 类似于旧的 Google
  • 获取 DropDownMenu 的 SourceControl

    我在 ContextMenuStrip 中有两个菜单项的单击事件 我可以通过执行以下代码获取单击的上下文菜单项的 SourceControl Control c sender as ToolStripItem Owner as Contex

随机推荐

  • Python连接MySQL数据库

    一 准备模块 python连接SQL数据库首先需要用到 pymysql 模块 这里使用pip install指令来安装步骤如下 1 在安装的python的路径下找到Scripts文件夹并打开 在路径上面写成 cmd 后回车 2 进入这个界面
  • springboot配置自定义数据源(Druid德鲁伊)的步骤。

    今天和大家分享下在Springboot中配置自定义数据源Druid的两种方法及步骤 方法一 1 在pom xml配置依赖 注释里面的内容 2 配置自己的数据源设置 我是在yaml文件中配置的 顺便提醒一下 在配置yaml文件的时候缩进问题一
  • 【引用】四元组与旋转矩阵

    引用 四元组与旋转矩阵 2011 09 22 17 13 39 分类 DirectX资料 举报 字号 订阅 下载LOFTER客户端 本文转载自ericyang1231 四元组与旋转矩阵 在3D程序中 通常用quaternion来计算3D物体
  • iOS开发之状态栏statusBar颜色变化

    在网上搜索了很久 我也试了很多种情况 下面我为每种情况排布一下优先级 刚开始的时候我没有写播放器 使用的是腾讯的SDK 发现我之前设置的状态栏变化不在发生变化啦 所以在这里做一个小结 Xcode默认的颜色是黑色 记录优化代码的点滴 第一种
  • C++---背包模型---装箱问题(每日一道算法2023.3.9)

    注意事项 本题是 动态规划 01背包 的扩展题 dp和优化思路不多赘述 题目 有一个箱子容量为 V 同时有 n 个物品 每个物品有一个体积 正整数 要求 n 个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入格式 第一行是一个整数
  • int $0x80系统调用的idea

    1 基础知识 用户态和内核态 一般现代CPU都有几种不同的指令执行级别 Linux总共划分为4个指令执行级别 内核运行在0级别上 1 2级别默认不运行 用户程序运行在3级别上 在内核指令执行级别上 代码可以执行特权指令 访问任意的物理地址
  • 微信小程序组件 - 部门机构人员岗位树组件

  • 国产版Airtag防丢器

    Airtag是什么 AirTag是苹果公司设计的一款定位神奇 它通过一款纽扣电池进行供电 即可实现长达1 2年的关键物品的定位 查找的功能 按照苹果公司自己的话说 您 丢三落四这门绝技 要 失 传 了 AirTag 可帮你轻松追踪并查找各种
  • 华为手机怎样才算激活了_华为P30 Pro手机壳不要闹,简约个性才是王道

    提起手机壳相信大家都不会陌生 在曾经 很多人对于手机壳的印象还只是停留于保护阶段 但是伴随着人们生活水屏的不断提升 手机壳设计师们为了迎合年轻消费者的需求 在外观上做出了升级 风格款式多样 材质分门别类 如今市场上的手机壳可谓是琳琅满目 不
  • 【大数据】Hive: 获取字段数据类型

    2018 12 01 文章目录 前言 方法 前言 某项目涉及将Hive中的textFile表转换成parquet表 由于parquet表不支持date类型 需要判断字段是否是date 并cast成timestamp 方法 采用DESCRIB
  • redis缓存机构-持久化详解(二)

    redis缓存机构 持久化详解 1 redis对于生产环境的灾难恢复的意义 在于故障恢复 2 redis的持久化 RDB AOF 区别 特点是什么 适合什么场景 1 RDB持久化机制 对redis中的数据执行周期性的持久化 数据快照 RDB
  • luaj使用 方法签名规则 Cocos2dxLuaJavaBridge

    function AndroidHandler getParamJson local args nil local ok ret luaj callStaticMethod className getParamJson args Ljava
  • P1609 最小回文数 题解

    本题位数较大 所以只能使用字符串读入 因为是回文数 所以我们只考虑前半部分的情况就能确定一个回文数 如一个型为 x y z overline xyz xy
  • 在安装了vcpkg,并编译了osgEarth后,osgEarth工程中所有依赖项vs2019会自动默认生成最新,解决办法

    前言 问题描述 在安装了vcpkg 并编译了osgEarth后 osgEarth工程中所有依赖项 1 hdf dll 2 hdf5 dll 3 hdf5 cpp dll 4 hdf5 hl dll 5 hdf5 hl cpp dll 6 l
  • sql sever文件导入mysql服务器,怎样将外部数据库文件导入MySQL

    怎样将外部数据库文件导入MySQL 内容精选 换一换 数据导入 章节适用于MRS 3 x及后续版本 Loader是实现MRS与外部数据源如关系型数据库 SFTP服务器 FTP服务器之间交换数据和文件的ETL工具 支持将数据或文件从关系型数据
  • Dubbo快速入门

    文章目录 一 初识Dubbo 1 Dubbo是什么 2 Dubbo现状 3 Dubbo的故事 主要历程 二 RPC介绍 三 Dubbo工作原理 四 案例实操 项目编写 1 项目创建 2 服务提供者 producer 的开发 3 服务消费方
  • RISC-V嵌入式开发准备篇2:嵌入式开发的特点介绍

    原文出处 https mp weixin qq com s ljYZwMj3JaPN29dTAXA3bQ 随着国内第一本RISC V中文书籍 手把手教你设计CPU RISC V处理器篇 正式上市 越来越多的爱好者开始使用开源的蜂鸟E203
  • EOS智能合约安全开发终极指南

    EOS智能合约安全终极指南 当世界上最大的ICO EOS于2018年6月推出时 加密社区变得持怀疑态度 并且由于软件错误而被冻结了2天 但快进4个月 EOS今天占了以太网今天所做交易的两倍以上 通过免费和更快速交易的承诺 EOS最顶级的Da
  • 高通平台下安卓opencl小例子

    1 从高通官网下载Adreon SDK 需要注册为会员 2 解压以后 把文件夹Development Inc 内的CL文件夹拷贝到 android ndk r9d platforms android 19 arch arm usr incl
  • C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开删除文件

    在前面讲述过使用TreeView控件和ListView控件显示磁盘目录信息 但仅仅是显示信息是不够的 我们还需要具体的操作 在 个人电脑使用历史痕迹 项目中我还需要添加 打开文件 和 删除文件 两种方法 具体如下 在第一篇文章 C 系统应用