Открытое событие ContextMenuStrip не срабатывает после открытия события - PullRequest
0 голосов
/ 20 августа 2009

Привет всем,

У меня есть UserControl с прикрепленной к нему ContextMenuStrip.

Я хочу отобразить базу ContextMenu, на которой объект был нажат на поверхности элемента управления.

Проблема в том, что при первом запуске, когда я щелкаю правой кнопкой мыши по поверхности элемента управления, contextMenuStrip не отображается!

Я установил точку останова внутри события contextMenuStrip_opening и contextMenuStrip_opened, но похоже, что срабатывает только contextMenuStrip_opening.

Что случилось?

В какой ситуации contextMenuStrip не отображается?

Пожалуйста, помогите.

Ответы [ 4 ]

1 голос
/ 24 августа 2009

Я не делал такие вещи, как пометить e.Cancel = true или не назначить элемент управления. Если бы это было так, я боролся с помощью отладки.

Я не знаю почему, но я добавляю e.Cancel = false в начале обработчика события ContextMenuStrip_Opening, тогда он работает нормально.

1 голос
/ 11 января 2013

У меня были некоторые проблемы с UserControl, но e.Cancel = false у меня не работает

Я использую следующий

 private void itemMenu_Opened(object sender, EventArgs e)
    {
        this.itemMenu.Focus();
    }
0 голосов
/ 10 августа 2018

Хотя проблема уже давно, есть надежда, что те, кому она понадобится в будущем, смогут ее увидеть.

У меня была такая же проблема. По словам источника ContexMenuStrip событие открытия:

 CancelEventArgs openEventArgs = new CancelEventArgs(/*cancel=*/(DisplayedItems.Count == 0));
 OnOpening(openEventArgs); 

 openingEventCancelled = openEventArgs.Cancel;

 if (!openingEventCancelled) {
 // do the actual work to open the window.                            
 if (TopLevel) {
    ReparentToActiveToolStripWindow();
 }
 //...other logics
 finally{
    if (!openingEventCancelled) {
       OnOpened(new EventArgs());
    }
 }

при DisplayedItems.Count == 0, событие открытияArgs e.Cancel = true.

, поэтому это будет происходить, когда вы устанавливаете некоторые ContextMenuItems, видимые в true в событии открытия, также устанавливаете все ContextMenuItems, видимые в false, в событии закрытия или другие после события открытия.

0 голосов
/ 20 августа 2009

Если признаком является то, что ContextMenuString не отображается вообще, я бы поспорил, что ваш код присваивает true свойству e.Cancel в обработчике Opening.

Если меню отображается, но обработчик события Opened не вызывается, я предполагаю, что обработчик события для события Opened по какой-то причине не присоединен.

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