c# - WinForms 上下文菜单 - 在某些部分未打开/检测底层控件

标签 c# .net winforms contextmenu

我有一个 .NET 2.0 Windows 窗体应用程序。在这个应用程序中有一个带有菜单栏和状态栏的表单控件。此表单上还有一个 ListView。

如果我向此表单添加上下文菜单,则当用户右键单击表单的任何部分(包括菜单栏和状态栏)时,上下文菜单将打开。

  1. 当单击菜单栏/状态栏时,如何防止上下文菜单打开?我希望它仅在单击表单的“灰色区域”时打开。

  2. 如果点击发生在该表单的某个控件之上(例如,在 ListView 上),我该如何识别?我想知道用户是否在灰色区域上方或 ListView 上方右键单击,因此我可以根据此启用/禁用某些菜单项。

最佳答案

将 Statusbar 放在底部并将 MenuStrip 放在顶部后,

  1. 将表单上的 ContextMenuStrip 设置为None
  2. 将一个标准面板放在中间(在 MenuStrip 和 StatusStrip 之间),并将 Dock 属性设置为 Fill
  3. 在您的面板(而不是表单)上设置 ContextMenuStrip 属性。

并将 ListView 和所有其他应该进入表单的控件放在 Panel

例如

~~~~~~~~~~~~~

菜单条

~~~~~~~~~~~~~

面板。停靠=填充。 ContextMenuStrip=您的上下文菜单。

~~~~~~~~~~~~~

状态条

~~~~~~~~~~~~~

关于c# - WinForms 上下文菜单 - 在某些部分未打开/检测底层控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/109262/

相关文章:

java - 使用 Guice 自动绑定(bind)所有 `Services`

.net - 如何更改 DataGridView 列的宽度

c# - 获取 ListView 可见项

.net - WPF 中 WinForms Control.Invoke 的等价物是什么?

c# - 如何在 iPhone 中显示/查找从 xamarin.ios 下载的图像?

c# - 在 C# 中取消定义关键字

c# - C# 递归方法的意外结果

mysql - 如何使用 MySQL .net 连接器为大型数据集流式传输结果集

c# - 设置 Webview2 header 或 cookie

c# - C# Windows 应用程序中的两个 UI 线程