Явное предотвращение загрузки ContextMenuStrip в C # - PullRequest
1 голос
/ 03 июня 2009

У меня есть требование, чтобы скрыть контекстную меню, когда определенный флаг не установлен. Поскольку я не думаю, что мы можем явно контролировать показ / скрытие полосы контекстного меню, я решил уловить щелчок правой кнопкой мыши на элементе управления, с которым связана контекстная строка. Это UserControl, поэтому я попытался обработать событие MouseClick, внутри которого я проверяю, установлен ли флаг и является ли кнопка правой кнопкой. Однако, к моему изумлению, событие не запускается при щелчке правой кнопкой мыши, а срабатывает только при щелчке левой кнопкой мыши.

Что-то не так со мной или есть обходной путь?

ОБНАРУЖЕНА ПРАВЫЙ ЩЕЛЧОК, изменилось название и описание вопроса

Проведя еще какое-то исследование, я получил щелчок правой кнопкой мыши, когда я обработал событие Mouse_Down в элементе управления. Однако я до сих пор не знаю, как явно запретить загрузку ContextMenuStrip . Другой вопрос, почему MouseClick не обнаруживает щелчок правой кнопкой мыши?


Текущий WorkAround

Регистрация обработчика события

   userControl1.Control1.MouseDown += new MouseEventHandler(Control1_MouseDown);

 void Control1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right && flag == false)
        {
           userControl1.Control1.ContextMenuStrip = null;
        }
        else
        {
            userControl1.Control1.ContextMenuStrip = contextMenuStrip1;
        }

    }

это текущий обходной путь, который я делаю. Но как я могу изменить его в событии открытия ContextMenuStrip

Ответы [ 3 ]

2 голосов
/ 03 июня 2009

Ваше решение в любом случае потерпит неудачу, когда контекстное меню вызывается клавишей контекстного меню (или как она называется) на клавиатуре. Вы можете использовать событие Opening для отмены открытия контекстного меню.

1 голос
/ 03 июня 2009

Есть обходной путь.

Допустим, пункт меню A устанавливает флаг, управляющий контекстным меню на элементе управления B.

В событии click для A вы устанавливаете b.ContextMenu = ничего, чтобы отключить его, и возвращаете b.ContextMenu обратно в элемент управления контекстного меню, чтобы снова включить его.

0 голосов
/ 03 июня 2009

В WinForms также есть событие Click, которое срабатывает при щелчке правой кнопкой мыши.

Если вы используете WPF, у вас должно быть MouseRightButtonDown и MouseRightButtonUp событий.

Просмотрите таблицу на этой странице MSDN , в которой перечислены элементы управления, которые вызывают события щелчка. Важно отметить, что Button, CheckBox, RichTextBox и RadioButton (и некоторые другие) не вызывают и не вызывают события при щелчке правой кнопкой мыши.

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