【问题标题】:limited check the CheckBox in c#有限检查C#中的CheckBox
【发布时间】:2011-08-14 09:54:20
【问题描述】:

我制作了一个获胜表格,并提供了一些复选框,显示学生可用的课程,通过选中复选框,他将能够告诉他他想要做什么课程,但我想在他检查三门课程时重新开始他和如果他尝试选中第四个复选框,那么应该出现消息框告诉他他不能选择超过三个并且不应该选中第四个复选框。那我该怎么做呢?

【问题讨论】:

    标签: c# .net winforms checkbox


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您必须实现一个 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;
                }
        
            }
        

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

        并且不要忘记将此检查处理程序应用于复选框的所有 CheckedChange 事件。

        【讨论】:

        • 所以我认为有更好的方法将此检查日历应用于所有 CheckedChanged 事件只需将每个复选框 CheckedChanged 事件分配给 checkBox1_CheckedChanged() 事件然后写下此代码,您将看到结果.... ......谢谢这个很好的答案。
        【解决方案4】:

        我建议您在处理未知数量的选项时使用CheckedListBox。这是一个完整的示例,展示了如何使用ItemCheck 事件来限制选择的总数。

        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();
        

        编辑: 您可以通过移除列表的边框、将其嵌套在 GroupBox 中并更改背景颜色来创建分组外观。

        box.BorderStyle = BorderStyle.None;
        box.BackColor = Control.DefaultBackColor;
        box.MultiColumn = true;
        box.IntegralHeight = false;
        var group = new GroupBox
            {
                Text = "Options",
                Dock = DockStyle.Fill,
                Controls = {box}
            };
        

        【讨论】:

        • 这是一个不错的答案,但我拿了一个分组框,我在其中放置了复选框,所以我该怎么做呢。
        • 您可以通过将 CheckListBox 放入 GroupBox 并将背景颜色设置为默认背景颜色来伪造它。
        【解决方案5】:

        您必须为所有 CheckedBoxes 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;
         }
        

        【讨论】:

          猜你喜欢
          • 2020-09-07
          • 1970-01-01
          • 2012-06-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-08
          相关资源
          最近更新 更多