大家好,
我有一个附加了ContextMenuStrip的UserControl。
我想根据控件表面上单击的对象显示ContextMenu。
问题是,在第一次启动时,当我右键单击控件的表面时,contextMenuStrip不显示!
我在contextMenuStrip_opening和contextMenuStrip_opened事件中都设置了断点,但似乎只触发了contextMenuStrip_opening。
发生了什么事?
在什么情况下contextMenuStrip没有出现?
请帮忙。
答案 0 :(得分:1)
我没有做标记e.Cancel = true或不分配控件的事情。如果是的话,我已经通过调试进行了战斗。
我不知道为什么,但是我在ContextMenuStrip_Opening事件处理程序的开头添加e.Cancel = false然后它工作正常。
答案 1 :(得分:1)
我在UserControl上遇到了一些问题,但是e.Cancel = false对我不起作用
我使用下一个
private void itemMenu_Opened(object sender, EventArgs e)
{
this.itemMenu.Focus();
}
答案 2 :(得分:0)
如果症状是ContextMenuString
根本没有显示,我打赌你的代码会将true
分配给e.Cancel
事件处理程序中的Opening
属性。
如果菜单显示,但未调用Opened
事件处理程序,我的猜测是Opened
事件的事件处理程序由于某种原因未附加。
答案 3 :(得分:0)
尽管问题已经存在很久了,但希望将来有需要的人能够看到它。
我有同样的问题。 根据{{1}}开幕活动的来源:
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());
}
}
时,打开事件Args DisplayedItems.Count == 0
。
因此,当您在打开事件中将某些ContextMenuItems设置为true时,以及在关闭事件或打开事件后的其他事件中将所有ContextMenuItems设置为false时,都会发生这种情况。