首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在menuStrip中只选中一个复选框

在menuStrip中只选中一个复选框
EN

Stack Overflow用户
提问于 2015-09-27 17:27:07
回答 2查看 2.6K关注 0票数 2

我有一个带有复选框的菜单(例如,Settings >使用HTTP/HTTPS/SOCKS5-3不同的复选框),我希望使它能够在选中一个复选框时使其他复选框自动取消选择。

我的想法是使用某种循环来遍历每个元素并取消对它们的选择,除了选定的元素。

我试过这样做:

代码语言:javascript
复制
foreach (ToolStripItem mi in settingsToolStripMenuItem)
            {
                  // code to unselect here
            }

但我搞不懂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-28 03:48:25

在单击“子菜单事件处理程序”中,可以取消选中所有项,只检查单击的项:

代码语言:javascript
复制
private void SubMenu_Click(object sender, EventArgs e)
{
    var currentItem = sender as ToolStripMenuItem;
    if (currentItem != null)
    {
        //Here we look at owner of currentItem
        //And get all children of it, if the child is ToolStripMenuItem
        //So we don't get for example a separator
        //Then uncheck all

        ((ToolStripMenuItem)currentItem.OwnerItem).DropDownItems
            .OfType<ToolStripMenuItem>().ToList()
            .ForEach(item =>
            {
                item.Checked = false;
            });

        //Check the current items
        currentItem.Checked = true;
    }
}

备注:

  • 您可以对所有子菜单使用相同的代码,或者将其放入始终确保只检查一个项的函数中,并在每个子菜单中调用该函数单击处理程序。
  • 我使用((ToolStripMenuItem)currentItem.OwnerItem)来查找单击项的所有者,使其更通用,以便在需要这样的功能的每一种情况下都可以重用。

如果类的用法中没有using System.Linq;,那么添加它。

票数 2
EN

Stack Overflow用户

发布于 2015-09-27 18:03:52

如果您的复选框位于ToolStripControlHost中,则可以在复选框的CheckedChanged事件中执行此操作:

代码语言:javascript
复制
foreach (ToolStripItem mi in settingsToolStrip.Items) {
    ToolStripControlHost item = mi as ToolStripControlHost; 
    if (item != null) {
        if (item.Control is CheckBox) {
            // put your code here that checks all but the one that was clicked.
            ((CheckBox)item.Control).Checked = false;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32810730

复制
相关文章

相似问题

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