我总共有6个复选框。我想根据剩余5个复选框的状态选中或取消选中第6个复选框。 如果两个或多个复选框中的任何一个被选中为true,则第6个复选框应为true,否则为false。 我尝试了不同的if语句,但未成功。 到目前为止,我发现的最好的就是这种逻辑
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
if (checkBox2.Checked == true || checkBox3.Checked == true || checkBox4.Checked == true || checkBox5.Checked == true)
{
checkBox6.Checked = true;
}
else
{
checkBox6.Checked = false;
}
}
else
{
if ((checkBox2.Checked == true || checkBox3.Checked == true) || (checkBox4.Checked == true || checkBox5.Checked == true))
{
checkBox6.Checked = true;
}
else
{
checkBox6.Checked = false;
}
}
}
当我只有1个复选框为true时,此逻辑不起作用。在这种情况下,第六个应该为假,但不能为假。 有什么建议?? 对于选中事件下的所有复选框,我都有此代码。
答案 0 :(得分:2)
问题出在第16行的if语句中,因为如果未选中checkBox1并选中了其他复选框之一,它将自动启用checkBox6。因为您基本上是在检查是否检查了其他4个复选框中的任何一个,如果没有选中checkBox1,则它将转到第16行并传递if语句,因为您使用的是||。运算符,请考虑使用&&运算符,并查看其工作原理。
进行此操作的另一种方法是检查窗体中的控件是否为CheckBox并计算已选中的复选框的数量,并确保它不是checkBox6的实例,这样您就可以使用无止境的checkBox并仅具有一个检查所有功能的小功能
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
int i = 0;
foreach (CheckBox item in this.Controls) // Loop all checkboxes in form
{
if (item.CheckState == CheckState.Checked && item != checkBox6) // Check if checkbox is checked and not instance of checkBox6
{
i++; // Increment amount of checkBoxes checked
}
}
checkBox6.Checked = i >= 2 ? true : false; // enable checkBox6 if more than 2 checkboxes are checked
}
别忘了将CheckChanged事件“ checkBox1_CheckedChanged”添加到所有其他复选框中
答案 1 :(得分:2)
我将创建一个单独的方法,您的每个复选框CheckChange事件均可调用:
private void SetCheckBox6()
{
var checkboxStatuses = new List<bool>
{
checkbox1.Checked,
checkbox2.Checked,
checkbox3.Checked,
checkbox4.Checked,
checkbox5.Checked
}
checkbox6.Checked = false;
if(checkboxStatuses.Where(x => x == true).Count() > 1)
{
checkbox6.Checked = true;
}
}
像这样使用它:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
//Other logic that needs to happen on check changed...
SetCheckBox6();
}
答案 2 :(得分:1)
尝试这种方式:
向此方法添加1-5个复选框的input >> D.SetDay(day) >> D.SetMonth(month) >> D.SetYear(year);
事件。
day
答案 3 :(得分:1)
您可以尝试使用 Linq 查询function rotateArray(N, NArray) {
const lastItem = NArray[NArray.length - 1];
const firstItems = NArray.slice(0, NArray.length - 1);
return [lastItem].concat(firstItems);
}
console.log(rotateArray(1, [1, 2, 3, 4]));
es
CheckBox
不要忘记将全部 using System.Linq;
...
private void checkBox1_CheckedChanged(object sender, EventArgs e) {
checkBox6.Checked = new bool[] {
checkBox1.Checked,
checkBox2.Checked,
checkBox3.Checked,
checkBox4.Checked,
checkBox5.Checked}.Count(c => c) >= 2;
}
.. checkBox1
checkBox5
事件处理程序分配给CheckedChanged
答案 4 :(得分:0)
根据您的逻辑尝试此操作
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
checkBox6.Checked = false;
if (checkBox1.Checked && (checkBox2.Checked || checkBox3.Checked || checkBox4.Checked || checkBox5.Checked))
{
checkBox6.Checked = true;
}
else if ((checkBox2.Checked && checkBox3.Checked) || (checkBox4.Checked && checkBox5.Checked))
{
checkBox6.Checked = true;
}
}