Combobox里面的ContextMenuStrip问题

时间:2011-06-17 14:00:00

标签: winforms events combobox contextmenu

鉴于以下疯狂设置(ContextMenuStrip内ToolStripControlHost内的UserControl内的ComboBox):

enter image description here

单击ComboBox弹出窗口中的不同项目会发生奇怪的事情。如果项目在菜单范围内(即阿姆斯特丹,布鲁塞尔或卢森堡),则选择该项目。如果项目在菜单范围之外(即Berlijn和其他),则菜单立即关闭。

忽略任何关于纯粹疯狂的精彩评论,任何人都知道发生了什么以及如果选择了一个遥远的组合框项目,如何停止关闭菜单?

1 个答案:

答案 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;
                                    };
}
相关问题