鉴于以下疯狂设置(ContextMenuStrip内ToolStripControlHost内的UserControl内的ComboBox):
单击ComboBox弹出窗口中的不同项目会发生奇怪的事情。如果项目在菜单范围内(即阿姆斯特丹,布鲁塞尔或卢森堡),则选择该项目。如果项目在菜单范围之外(即Berlijn和其他),则菜单立即关闭。
忽略任何关于纯粹疯狂的精彩评论,任何人都知道发生了什么以及如果选择了一个遥远的组合框项目,如何停止关闭菜单?
答案 0 :(得分:3)
问题是由于ToolStripManager中的深层检查确定鼠标事件不在孩子身上。
如果ComboBox正在显示,基本上你需要拒绝ContextMenuStrip.OnClosing事件。不可避免地有一个更清洁的解决方案,但我没有看到一个。
public bool IsDropDownShowing { get; private set; }
private void InitializeContextMenu()
{
var userControl = new ComboMenuUserControl();
var toolStripHost = new ToolStripControlHost(userControl);
contextMenuStrip1.Items.Add(toolStripHost);
userControl.comboBox1.DropDown += (o, args) => IsDropDownShowing = true;
userControl.comboBox1.DropDownClosed += (o, args) => IsDropDownShowing = false;
contextMenuStrip1.Closing += (o, args) =>
{
if (IsDropDownShowing == true)
args.Cancel = true;
};
}