首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在单击项目后使ToolStripMenu保持打开状态

如何在单击项目后使ToolStripMenu保持打开状态
EN

Stack Overflow用户
提问于 2012-11-13 03:27:24
回答 6查看 7.6K关注 0票数 4

我正在创建一个如下所示的ToolStripMenu,它允许用户与"XML“和"Non XML”项进行交互,就像它们是表单上的常规复选框一样。但是,当选中/取消选中某一项时,菜单将关闭。如何在不关闭菜单的情况下允许选中/取消选中项目?或者,是否有不同的标准方法来实现相同的行为?

所以我想要的是能够点击“非XML",显示一个复选框,并使菜单保持打开状态。这个想法是,最后一个菜单项将被“完成”,当它被点击时,"G2S“子项将保持打开状态,但”显示“子项( XML,Non XML )将关闭。

有什么想法吗?

注意:我知道这可能不是最好的用户界面设计。然而,我想知道如何做到这一点,仅仅是为了获得一些处理菜单的技术知识。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-13 09:18:31

有趣的概念在this thread on Stackoverflow中描述

以下是公认答案的精髓:

代码语言:javascript
复制
ParentMenu.DropDown.AutoClose = false;

它所做的正是您所要求的--当单击子项时,防止菜单关闭。

票数 4
EN

Stack Overflow用户

发布于 2018-05-17 18:33:13

这是一个有用的扩展,它需要用户点击菜单项之外的+下拉菜单才能关闭。

代码语言:javascript
复制
    public static void KeepOpenOnDropdownCheck (this ToolStripMenuItem ctl)
    {
        foreach (var item in ctl.DropDownItems.OfType<ToolStripMenuItem>())
        {
            item.MouseEnter += (o, e) => ctl.DropDown.AutoClose = false;
            item.MouseLeave += (o, e) => ctl.DropDown.AutoClose = true;
        }

    }
票数 3
EN

Stack Overflow用户

发布于 2012-11-13 08:32:00

发布了这篇文章,以防有人发现它有帮助。

我没有尝试做我最初想做的事情,而是想出了以下几点:

1-使用ContextMenuStrip

2-当用户点击ToolStripMenu项时,我会在菜单项附近的位置显示ContextMenuStrip,如下所示:(请注意,位置仍然需要调整)

为了使其工作,我在运行时在代码中构建ContextMenuStrip,以便可以根据情况动态构建ContextMenuStrip中的项。

代码片段:

单击菜单项时显示ContextMenuStrip

代码语言:javascript
复制
private void filterToolStripMenuItem_Click(object sender, EventArgs e)
{
    contextMenuStrip1.Show(this, 180, 20);
}

构建ContextMenuStrip

代码语言:javascript
复制
    if (protInfo.Name == "QCOM" )
    {
        BroadCast = new CheckBox();
        BroadCast.Text = "Date/Time Broadcast";
        BroadCast.Checked = FlagSet(CurrentFilter, (Byte)Filter.DateTimeBC);
        ToolStripControlHost Ch1 = new ToolStripControlHost(BroadCast);

        GenPoll = new CheckBox();
        GenPoll.Text = "Status Poll";
        GenPoll.Checked = FlagSet(CurrentFilter, (Byte)Filter.GenStatusPoll);
        ToolStripControlHost Ch2 = new ToolStripControlHost(GenPoll);

        GenPollResp = new CheckBox();
        GenPollResp.Text = "Status Poll Response";
        GenPollResp.Checked = FlagSet(CurrentFilter, (Byte)Filter.GenStatusResponse);
        ToolStripControlHost Ch3 = new ToolStripControlHost(GenPollResp);

        Button btnDone = new Button();
        btnDone.Text = "Done";
        ToolStripControlHost Ch4 = new ToolStripControlHost(btnDone);
        btnDone.Click += new EventHandler(btnDone_Click);

        contextMenuStrip1.Items.Clear();
        contextMenuStrip1.Items.Add(Ch1);
        contextMenuStrip1.Items.Add(Ch2);
        contextMenuStrip1.Items.Add(Ch3);
        contextMenuStrip1.Items.Add(Ch4);
        contextMenuStrip1.Enabled = true;
        filterToolStripMenuItem.Enabled = true;
    }
    else
    {
        filterToolStripMenuItem.Enabled = false;
    }

这可能不是最好的用户界面设计,但似乎是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13350171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档