C# 选中c中的复选框#

C# 选中c中的复选框#,c#,.net,winforms,checkbox,C#,.net,Winforms,Checkbox,我制作了一张获胜表格,并给出了一些复选框,显示学生可以选择的课程,通过勾选复选框,他可以告诉我他想选哪些课程,但我想在他勾选三门课程时重新给他发短信,如果他尝试勾选第四个复选框,那么消息框应该会显示,告诉他不能选择更多课程三个以上,第四个复选框不应选中。那么我该怎么做呢?使用复选框并计算表单上当前选中的复选框数,然后显示一个消息框并取消选中触发事件的复选框(如果当前超过3个)。假设您使用的是WinForms,复选框控件有一个OnCheckStateChanged事件。连接所有复选框的事件以调用另

我制作了一张获胜表格,并给出了一些复选框,显示学生可以选择的课程,通过勾选复选框,他可以告诉我他想选哪些课程,但我想在他勾选三门课程时重新给他发短信,如果他尝试勾选第四个复选框,那么消息框应该会显示,告诉他不能选择更多课程三个以上,第四个复选框不应选中。那么我该怎么做呢?

使用复选框并计算表单上当前选中的复选框数,然后显示一个消息框并取消选中触发事件的复选框(如果当前超过3个)。

假设您使用的是WinForms,复选框控件有一个OnCheckStateChanged事件。连接所有复选框的事件以调用另一个函数。在此函数中,您可以跟踪选中框的总数,并显示一个弹出窗口,让用户知道已达到最大值。

您必须实现OnCheckedChange处理程序,并将其设置为每个复选框。 这将根据复选框的状态增加/减少计数器

    private int checkCounter;

    private void OnCheckedChanged(object sender, EventArgs e)
    {
        // Increase or decrease the check counter
        CheckBox box = (CheckBox) sender;
        if (box.Checked)
            checkCounter++;
        else
            checkCounter--;

        // prevent checking
        if (checkCounter == 4)
        {
            MessageBox.Show("YOU ARE EVIL", "Bad");
            box.Checked = false;
        }

    }
如果达到计数,您可以输出一个消息框并重置复选框。 就这些


不要忘记将此checkhandler应用于复选框的所有CheckedChange事件。

我建议您在处理未知数量的选项时使用。下面是一个完整的示例,演示如何使用事件限制选择的总数

var box = new CheckedListBox
    {
        Dock = DockStyle.Fill,
        CheckOnClick = true
    };
box.ItemCheck += (sender, e) =>
    {
        // is the item being checked when 3 are already checked?
        if (e.NewValue == CheckState.Checked && box.CheckedItems.Count == 3)
        {
            // block the change
            e.NewValue = CheckState.Unchecked;
        }
    };
for (var i = 0; i < 10; i++)
{
    box.Items.Add("item " + i);
}
new Form {Controls = {box}}.ShowDialog();

您必须为所有CheckedBox CheckChanged事件启动相同的事件处理程序

CheckBox1.CheckedChanged += new System.EventHandler(MyCheckedChanged)
CheckBox2.CheckedChanged += new System.EventHandler(MyCheckedChanged)

private void MyCheckedChanged(object sender, EventArgs e)
{
      CheckBox checkbox = sender as CheckBox;

      // Check all the checked items. If already 3 selectec
      checkbox.Checked = false;
 }

这是一个很好的答案,但我选择了一个groupbox,我在其中放置复选框,这样我就可以在那里进行操作。你可以通过将复选框放在groupbox中并将背景色设置为默认背景色来伪造它。所以我认为有更好的方法将此CheckCalendar应用于所有CheckedChanged事件,只需指定每个复选框即可CheckedChanged事件到checkBox1_CheckedChanged()事件,然后写下这段代码,您将看到结果………..Thx获得这个漂亮的答案。
CheckBox1.CheckedChanged += new System.EventHandler(MyCheckedChanged)
CheckBox2.CheckedChanged += new System.EventHandler(MyCheckedChanged)

private void MyCheckedChanged(object sender, EventArgs e)
{
      CheckBox checkbox = sender as CheckBox;

      // Check all the checked items. If already 3 selectec
      checkbox.Checked = false;
 }