我有一个带复选框的菜单(例如,设置>使用HTTP / HTTPS / SOCKS5 - 3个不同的复选框),我想这样做,以便当选中一个复选框时,其他复选框将自动取消选择。
我的想法是使用某种循环来遍历每个元素并取消选择它们,除了所选元素。
我试过这样:
foreach (ToolStripItem mi in settingsToolStripMenuItem)
{
// code to unselect here
}
但我无法弄清楚。
答案 0 :(得分:1)
在子菜单的点击事件处理程序中,您可以取消选中所有项目并仅检查点击的项目:
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;
,请添加它。
答案 1 :(得分:0)
如果您的复选框位于ToolStripControlHost中,
您可以在复选框的CheckedChanged
事件中执行此操作:
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;
}
}
}