c# - 在menuStrip中只选择一个复选框

标签 c# winforms checkbox menu

我有一个带有复选框的菜单(例如,“设置”>“使用 HTTP/HTTPS/SOCKS5 - 3 个不同的复选框)”,我想这样做,以便在选择一个复选框时自动取消选择其他复选框。

我的想法是使用某种循环来遍历每个元素并取消选择除所选元素之外的其他元素。

我尝试过这样的:

foreach (ToolStripItem mi in settingsToolStripMenuItem)
            {
                  // code to unselect here
            }

但是我想不通。

最佳答案

在子菜单的单击事件处理程序中,您可以取消选中所有项目并仅选中单击的项目:

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;,请添加它。

关于c# - 在menuStrip中只选择一个复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810730/

相关文章:

javascript - ReactJs 复选框在第一次使用后不会更改值

c# - 为什么 MapPageRoute/RedirectToRoute 在开发计算机上工作但在生产服务器上不起作用?

c# - 获取被请求/被请求的页面名称

winforms - 如何在 Windows 窗体应用程序中向具有多个控件的 Panel 控件添加滚动条?

html - 复选框输入是否仅在选中后才发布数据?

javascript - 全选复选框仅在某些时候有效

c# - EF ToTraceString SQL 生成结果列顺序

c# - Aspnet Core Decimal 绑定(bind)不适用于非英语文化

C#创建绘图对象

c# - 如何获取/设置 winforms 应用程序的工作目录?