Явное предотвращение загрузки ContextMenuStrip в C#

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

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

НАЖМИТЕ ПРАВИЛЬНЫЙ ЩЕЛЧОК, НАЗВАНИЕ ВОПРОСА И ОПИСАНИЕ ИЗМЕНЕНО

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


Текущая работа

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

   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 ответа

Решение

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

Есть работа вокруг.

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

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

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

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

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

Другие вопросы по тегам