在C#中,对于一个checklistbox
我发现以下内容足够好:
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked && checkedListBox1.CheckedItems.Count >= 3)
e.NewValue = CheckState.Unchecked;
}
但是我有很多检查列表框,我想对所有这些列表实施不同的限制。例如,我想将checkedListBox1
限制为只有3个项目选择,而checkedListBox2
将限制为2个项目选择,依此类推......
我尝试制作多个checkedListBox_ItemCheck
方法,但似乎没有一个方法会影响其他检查表。它只影响我的第一个。任何人都可以帮助我吗?
非常感谢,我刚刚开始使用Windows表单。
编辑:我希望这会让我更清楚我的目标:
说我有以下checkedListBoxes
:checkedListBox1, checkedListbox2, checkedListBox3
这是我想要做的事情:
checkedListBox1 = (/*limit the number of items users are able to select to only 3 items*/);
checkedListBox2 = (/*limit the number of items users are able to select to only 2 items*/);
checkedListBox3 = (/*limit the number of items users are able to select to only 4 items*/);
答案 0 :(得分:1)
为了实现这一目标,您可以进行以下Method
:
public void LimitCheckedListBoxMaxSelection(int maxCount, ItemCheckEventArgs e)
{
if (checkedListBox1.CheckedItems.Count == maxCount)
{
if (!checkedListBox1.GetItemChecked(checkedListBox1.SelectedIndex))
e.NewValue = e.CurrentValue;
}
}
然后要使用它,您必须在ItemCheck
的{{1}}事件中调用该方法
第一个参数是您要强制执行的限制,即允许的最大检查项目数
第二个参数是来自控件事件的CheckedListBox
,默认情况下名为ItemCheckEventArgs
。
的然而强>
您还可以制作e
并进一步调整delegate
,以便通过执行以下操作将Method
事件附加到ItemCheck
:
CheckedListBox
然后为了使用此功能,您必须在表单的 public void LimitCheckedListBoxMaxSelection(CheckedListBox checkedLB, int maxCount)
{
checkedLB.ItemCheck += (o, args) =>
{
if (checkedListBox1.CheckedItems.Count == maxCount)
{
if (!checkedListBox1.GetItemChecked(checkedListBox1.SelectedIndex))
(args as ItemCheckEventArgs).NewValue = (args as ItemCheckEventArgs).CurrentValue;
}
};
}
事件中调用此方法,然后将Load
限制为此方法的CheckedListBox
一次{ {1}}:
CheckedListBox