如何限制多个选中列表框中的选择?

时间:2016-09-19 00:02:34

标签: c# selection limit windows-forms-designer checkedlistbox

在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表单。

编辑:我希望这会让我更清楚我的目标:

说我有以下checkedListBoxescheckedListBox1, 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*/);

1 个答案:

答案 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