如何在Winforms ListView中获取资源管理器右键菜单?

4

我正在使用Winforms ListView来显示一些文件,但除了像资源管理器一样显示文件之外,我还想在右键单击其中一个项目时得到相同的资源管理器右键菜单。

这可能吗?我如何为我的ListView应用程序启用它?


你想要“资源管理器”菜单还是类似“资源管理器”的上下文菜单?你现在的列表视图中有什么代码?我刚刚在列表视图中完成了一些上下文菜单的内容。 - IAbstract
谢谢,我指的是根据您右键单击的文件显示出来的资源管理器上下文菜单。目前,我的代码只能填充列表视图中的项目,但尚未包含右键菜单。 - Joan Venge
1
还可以考虑使用类似Shell MegaPack的外壳控件 - http://www.ssware.com/megapack.htm - 这些控件具有上下文菜单、拖放、重命名、缩略图视图、详细视图等功能,就像Windows资源管理器一样。 - logicnp
3个回答

2

我实际上在尝试通过右键单击来显示自定义上下文菜单时遇到了问题:Erratic Behavior from ContextMenu

我最终实现了略微不同的方法:

    private void lstModules_MouseDown(object sender , MouseEventArgs e)
    {
        hitTest = lstModules.HitTest(e.Location);

        switch (e.Button)
        {
            case MouseButtons.Right:
                if (hitTest != null && hitTest.Item != null)
                {
                    // right clicking an item in the listview
                    selectedModule = hitTest.Item.Name;

                    lstModules.ContextMenuStrip = mnuContext_OptionsA;
                }
                else
                { 
                    // right clicking in white area of listview
                    lstModules.ContextMenuStrip = mnuContext_OptionsB; 
                }
                break;
        }
    }

2
我所知道的唯一方法是使用PInvoke和COM来实现。我认为你想要的非托管API是SHCreateDefaultContextMenu()。一旦你完成了互操作(首先检查pinvoke.net),你就可以为DEFCONTEXTMENU所需的所有其他内容进行互操作。这并不容易。欢迎来到PIDLs的世界。

1
谢谢,希望我能从中找到自己的方向。 - Joan Venge
我看了一下PInvoke,但好像没有这些内容。我不可能是第一个想要这种行为的人,对吧? - Joan Venge
你可以成为第一个愿意与他人分享的人。那里缺少很多显而易见的东西。 - i_am_jorf

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接