我有一个检查列表框控件,我想一次只选择一个项目,我目前正在使用此代码执行相同操作。
private void CLSTVariable_ItemCheck(object sender, ItemCheckEventArgs e)
{
// Local variable
int ListIndex;
CLSTVariable.ItemCheck -= CLSTVariable_ItemCheck;
for (ListIndex = 0;
ListIndex < CLSTVariable.Items.Count;
ListIndex++)
{
// Unchecked all items that is not currently selected
if (CLSTVariable.SelectedIndex != ListIndex)
{
// set item as unchecked
CLSTVariable.SetItemChecked(ListIndex, false);
} // if
else
{
// set selected item as checked
CLSTVariable.SetItemChecked(ListIndex, true);
}
} // for
CLSTVariable.ItemCheck += CLSTVariable_ItemCheck;
}
此代码工作正常。
但问题是,当我一次又一次地点击所选项目时,不应取消选中该选定项目,这意味着应始终检查至少一项:...
答案 0 :(得分:2)
我同意上面的评论员 - 你应该考虑使用单选按钮。但是如果你真的需要CheckedListBox,那么请使用这个Item Checked事件处理程序:
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (checkedListBox1.CheckedItems.Count == 1)
{
Boolean isCheckedItemBeingUnchecked = (e.CurrentValue == CheckState.Checked);
if (isCheckedItemBeingUnchecked)
{
e.NewValue = CheckState.Checked;
}
else
{
Int32 checkedItemIndex = checkedListBox1.CheckedIndices[0];
checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck;
checkedListBox1.SetItemChecked(checkedItemIndex, false);
checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;
}
return;
}
}
答案 1 :(得分:0)
嗯,这是我的答案!我无法让上面的代码在checkedListBox1_ItemCheck中工作。我必须修改它的一部分并将其包含在checkedListBox1_SelectedIndexChanged事件中。但我无法一起删除原始代码。这是我添加的内容......
private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (checkedListBox1.CheckedItems.Count > 1)
{
Int32 checkedItemIndex = checkedListBox1.CheckedIndices[0];
checkedListBox1.ItemCheck -= checkedListBox1_ItemCheck;
checkedListBox1.SetItemChecked(checkedItemIndex, false);
checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;
}
}
基本上,如果您选中了多个框,请将最后一个切换为新框。我很好奇为什么原始代码不起作用。为什么它必须在那里让我的新代码工作?谢谢。
答案 2 :(得分:0)
我发现这段代码很好用
private void chkboxmov_ItemCheck(object sender, ItemCheckEventArgs e)
{
for (int ix = 0; ix < chkboxmov.Items.Count; ++ix)
if (ix != e.Index)
chkboxmov.SetItemChecked(ix, false);
}
答案 3 :(得分:0)
“至少应经常检查一项”
当前解决方案(最后一个)允许检查项目。如果您的目的是始终选择一个项目,请将其用作 MouseUp 事件
private void ChklbBatchType_MouseUp(object sender, MouseEventArgs e)
{
int index = ((CheckedListBox)sender).SelectedIndex;
for (int ix = 0; ix < ((CheckedListBox)sender).Items.Count; ++ix)
if (index != ix) { ((CheckedListBox)sender).SetItemChecked(ix, false); }
else ((CheckedListBox)sender).SetItemChecked(ix, true);
}