我正在使用 Winforms ListView 来显示一些文件,但除了像资源管理器那样显示文件之外,当你右键单击里面的项目时,我希望拥有相同的资源管理器右键菜单。
这可能吗?如何为我的 ListView 应用启用它?
我实际上无法通过右键单击来显示自定义上下文菜单:来自 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;
}
}
我知道这样做的唯一方法是使用 pinvoke 和 COM 来做到这一点。我认为,您想要的非托管 API 是SHCreateDefaultContextMenu()。一旦完成互操作(首先检查 pinvoke.net),您就可以对DEFCONTEXTMENU所需的所有其他事情进行互操作。这并不容易。欢迎来到 PIDL 的土地。
您将需要IContextMenu接口。也看到这个非常有用的系列。