Хотя проблема уже давно, есть надежда, что те, кому она понадобится в будущем, смогут ее увидеть.
У меня была такая же проблема.
По словам источника 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, в событии закрытия или другие после события открытия.