Контекстное меню WinForms - не открывается в определенных частях / обнаруживает элемент управления - PullRequest
1 голос
/ 21 сентября 2008

У меня есть приложение .NET 2.0 для Windows Forms. В этом приложении есть элемент управления Form с строкой меню и строкой состояния. Также в этой форме есть ListView.

Если я добавлю контекстное меню к этой форме, контекстное меню откроется, когда пользователь щелкнет правой кнопкой мыши любую часть формы, включая строку меню и строку состояния.

  1. Как предотвратить открытие контекстного меню, если щелчок произошел в строке меню / строке состояния? Я хочу, чтобы он открывался только при нажатии на «серую область» формы.

  2. Если щелчок произошел над элементом управления в этой форме (например, в ListView), как я могу это определить? Я хотел бы знать, щелкнул ли пользователь правой кнопкой мыши над серой областью или над ListView, чтобы я мог включить / отключить некоторые пункты меню на основе этого.

Ответы [ 2 ]

3 голосов
/ 21 сентября 2008

После того, как вы поместили свою Statusbar внизу и MenuStrip вверху,

  1. Установите ContextMenuStrip в вашей форме на Нет
  2. Поместите стандартную панель посередине (между MenuStrip и StatusStrip), задав для свойства Dock значение Fill .
  3. Установите свойство ContextMenuStrip на панели (вместо формы).

И поместите ListView и все другие элементы управления, которые должны войти в форму, на Панель

Например

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

MenuStrip

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

Группа. Dock = Fill. ContextMenuStrip = yourContextMenu.

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

StatusStrip

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

1 голос
/ 21 сентября 2008

Я нашел ответ:

Point clientPos = this.PointToClient(Form.MousePosition);
Control control = this.GetChildAtPoint(clientPos);

Это должно дать базовый элемент управления, который был нажат в Форме, или нуль, если щелчок был в серой области. Поэтому нам просто нужно проверить тип элемента управления в событии открытия контекстного меню. Если это MenuStrip, ToolStrip или StatusStrip, сделайте e.Cancel = true;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...