如何使用上下文菜单栏从列表视图项打开文件位置?

Emreozpalamutcu

新成员
已加入
2012年3月7日
留言内容
2
地点
伦敦,英国,英国
编程经验
Beginner
这是我想做的事情清单:


仅当鼠标悬停在项目上方并右键单击该项目时,才显示上下文菜单栏,我具有的代码是这样的:


C#:
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
        {
            if (listView1.SelectedItems.Count == 0)
                e.Cancel = true;
        }


        private void contextMenuStrip1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                Point pt = listView1.PointToScreen(e.Location);
                contextMenuStrip1.Show(pt);
            }
        }


关于此代码的问题是,选中该项目的时间最长,它将显示菜单栏,我不希望上下文菜单栏不显示,除非直接右键单击该项目。
_______________________________________________________________________________________________________________________


我在上下文菜单栏上有3个选项,分别是打开,打开文件位置和属性。如果用户右键单击该项目并说“打开”,则它应询问用户您要使用Windows资源管理器打开什么!对于打开的文件位置,我想到了这个:


C#:
Process.Start("explorer.exe", "I need filepath from 列表显示 item");


确实会打开自定义位置,但是由于列表视图中将有很多文件,因此我需要该程序自行获取文件位置。


我对扫描文件并将其显示在列表视图中的实现是:


C#:
private void button1_Click(object sender, EventArgs e)
        {


            listView1.Items.Clear();


            string[] directories = new string[] { 
            @"C:\Windows", 
            @"C:\Users\Emre\AppData\Local\CrashDumps" 
            };


            string[] extensions = new string[] { "*" };


            foreach (var dir in directories)
            {
                var dirInfo = new DirectoryInfo(dir);
                foreach (var ext in extensions)
                {
                    foreach (var fileInfo in dirInfo.GetFiles(ext))
                    {
                        listView1.Items.Add(new ListViewItem(new string[] { fileInfo.Name, Path.GetDirectoryName(fileInfo.FullName) + @"\", SizeUnit.FileSizeToString(fileInfo.Length) }));
                    }
                }
            }
        }


希望能对您有所帮助,如果您需要了解更多信息,我也有代码来计算文件的大小,我没有插入是因为我认为您真的不需要它。如果不清楚,请询问并非常感谢所有帮助。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
不要设置ListView的ContextMenuStrip属性。
然后从ListView MouseClick事件处理程序中检查单击了哪个按钮,并使用ListView.GetItemAt方法。
如果单击了某个项目,则存储该项目中您需要的信息(使用私有字段)并显示上下文菜单。
对于上下文菜单项的“单击处理程序”,请使用您存储的信息来执行其操作。
 
最佳 底部