我做了一个胜利表格并给出一些复选框,显示学生可以使用的课程,并通过勾选复选框,他将能够告诉他想要做哪些课程,但我想在他检查三门课程时给他留下来如果他尝试检查第四个复选框,则应显示消息框,告诉他不能选择三个以上,不应检查第四个复选框。那我怎么能这样做呢?
答案 0 :(得分:5)
您必须实现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事件。
答案 1 :(得分: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}
};
答案 2 :(得分:2)
您必须为所有CheckBoxes CheckedChanged事件触发相同的事件处理程序。
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;
}
答案 3 :(得分:1)
使用复选框的CheckChanged event并计算表单上当前已选中复选框的数量,然后显示一个消息框并取消选中触发该事件的复选框(如果它当前超过3)。
答案 4 :(得分:1)
假设您正在使用WinForms,CheckBox控件具有OnCheckStateChanged事件。连接所有复选框的事件以调用另一个功能。在此功能中,您可以跟踪已检查的总框数并显示弹出窗口,以便让用户知道已达到最大值。