【问题标题】:Combobox inside ContextMenuStrip problemContextMenuStrip 内的组合框问题
【发布时间】:2011-06-17 13:59:59
【问题描述】:

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

在 ComboBox 弹出窗口中单击不同项目时会发生一些奇怪的事情。如果该项目在菜单范围内(即阿姆斯特丹、布鲁塞尔或卢森堡),则该项目被选中。如果项目在菜单范围之外(即柏林和更远的地方),则菜单会立即关闭。

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

【问题讨论】:

    标签: winforms events combobox contextmenu


    【解决方案1】:

    问题是由于对 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;
                                        };
    }
    

    【讨论】:

    • 谢谢约翰,看起来很有希望。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2011-03-30
    • 2011-11-25
    • 1970-01-01
    相关资源
    最近更新 更多