我有一个带有复选框的菜单(例如,“设置”>“使用 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/