我有一个带有多个ToolStrip
的ToolStripDropDownButton
,每个都有一套DropDownItems
。
当用户单击DropDownItem时,将显示复选标记。
默认情况下,可以单击多个项目,因此会出现多个复选标记。
我正在尝试做的是,当用户单击一个DropDownItem时,应取消选中其他已检查的项目。换句话说,在下拉列表中应该始终只有一个选中的项目。
我已经花了一段时间了,但是我真的无法弄清楚如何保留当前选中的项目,而取消选中其他项目。
下面是我到目前为止的代码。
private void subietm1ToolStripMenuItem_Click(object sender, EventArgs e)
{
UncheckOtherToolStripMenuItems(sender);
}
public void UncheckOtherToolStripMenuItems(object selectedMenuItem)
{
List<ToolStripDropDownButton> dropdownButtons = new List<ToolStripDropDownButton>();
foreach (ToolStripItem item in toolStrip1.Items)
{
if (item is ToolStripDropDownButton)
{
dropdownButtons.Add((ToolStripDropDownButton)item);
}
}
foreach (ToolStripDropDownButton btn in dropdownButtons)
{
foreach (ToolStripMenuItem d in btn.DropDownItems)
{
if (d.Checked)
d.CheckState = CheckState.Unchecked;
}
}
}
如果有人能对此有所启发或告诉我一种简单的解决方法,我将不胜感激。
谢谢你。
最佳答案
太简单...
实现如下所述的方法:
private void subietm1ToolStripMenuItem_Click(object sender, EventArgs e)
{
UncheckOtherToolStripMenuItems((ToolStripMenuItem)sender);
}
public void UncheckOtherToolStripMenuItems(ToolStripMenuItem selectedMenuItem)
{
selectedMenuItem.Checked = true;
// Select the other MenuItens from the ParentMenu(OwnerItens) and unchecked this,
// The current Linq Expression verify if the item is a real ToolStripMenuItem
// and if the item is a another ToolStripMenuItem to uncheck this.
foreach (var ltoolStripMenuItem in (from object
item in selectedMenuItem.Owner.Items
let ltoolStripMenuItem = item as ToolStripMenuItem
where ltoolStripMenuItem != null
where !item.Equals(selectedMenuItem)
select ltoolStripMenuItem))
(ltoolStripMenuItem).Checked = false;
// This line is optional, for show the mainMenu after click
selectedMenuItem.Owner.Show();
}
一个细节是,您可以为所有click menuItens实现相同的方法,为此在每个ToolstripMenuItem的事件单击中为方法
UncheckOtherToolStripMenuItems((ToolStripMenuItem)sender);
添加相同的调用,请参见此示例到另外两个ToolstripMenuItens: private void subietm2ToolStripMenuItem_Click(object sender, EventArgs e)
{
UncheckOtherToolStripMenuItems((ToolStripMenuItem)sender);
}
private void subietm3ToolStripMenuItem_Click(object sender, EventArgs e)
{
UncheckOtherToolStripMenuItems((ToolStripMenuItem)sender);
}
关于winforms - 仅检查一个ToolStripMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13603654/