复选框的功能或循环

时间:2019-02-06 23:01:53

标签: c# checkbox

例如,我有5个复选框,分别名为checkbox1,checkbox2等。

它们都在其他功能中分配了参数(checkbox1的字符串为text1 =“ t1”,checkbox2的字符串为text2 =“ t2”等)。这些字符串可以是随机的,但只有在如上所述的情况下才可以提供真值。

让用户选择3个复选框,单击一些按钮,然后....

如何使功能/循环仅检查那些选定的复选框,并查看checkbox1是否具有text1 = t1等? 像这样:

string text1, text2, text3, text4, text5 = null;
int a = 0;

while (a != 347)
{
    text1 = SomeOperation1();
    text2 = SomeOperation2();
    text3 = SomeOperation3();
    text4 = SomeOperation4();
    text5 = SomeOperation5();

    if ((checkbox1.Checked && text1 == "t1") && 
        (checkbox3.Checked && text3 == "t3") && 
        (checkbox5.Checked && text5 == "t5"))
    {
        SomeOperation6();
        a = 347;
    }
}

if是错误的,因为它必须选中复选框(用户可以选择多于或少于3个),但现在也许您明白我想要的内容了:)

1 个答案:

答案 0 :(得分:1)

可以在表单的Controls集合中找到表单上的所有控件(请注意,作为容器控件一部分的控件将在该容器控件的Controls集合中找到)。

您可以使用System.Linq扩展方法OfType通过执行以下操作来仅获取特定类型的控件:

var allCheckboxControls = Controls.OfType<CheckBox>();

如果只想获取选中的控件,则可以在其中添加一个Where子句:

var allCheckedCheckBoxes = Controls.OfType<CheckBox>().Where(c => c.Checked);

最后,如果您想将Name属性与Text属性进行比较(我不确定这一部分,您的问题尚不清楚),那么您可以执行以下操作这个:

private void button1_Click(object sender, EventArgs e)
{
    // Display a message box showing the Name and Text for each Checked CheckBox
    foreach (var checkbox in Controls.OfType<CheckBox>().Where(c => c.Checked))
    {
        MessageBox.Show($"Checkbox named {checkbox.Name}, " + 
            $"with Text {checkbox.Text}, is checked");
    }
}

我更新了示例代码,以便对其进行编译,从而更好地表达我的想法,即您的意图基于您的评论。如果我弄错了,请更正它。

似乎您在三件事之间建立了映射-Checkbox,方法调用的string和比较前一个字符串的string似乎您只想评估已选中复选框的字符串比较

如果是这种情况,那么考虑到您现有的代码,最简单的操作可能是简单地向每个现有条件添加另一个条件,以便在以下情况下返回true :(未选中 复选框)或(条件为真)。请注意,如果未选中相应的复选框,则条件不会被评估,这是您当前代码隐式执行的操作。

例如:

while (a != 347)
{
    text1 = SomeOperation1();
    text2 = SomeOperation2();
    text3 = SomeOperation3();
    text4 = SomeOperation4();
    text5 = SomeOperation5();

    // This will only evaluate the text comparison for checkboxes that are checked
    if ((!checkBox1.Checked || text1 == "t1") &&
        (!checkBox2.Checked || text2 == "t2") &&
        (!checkBox3.Checked || text3 == "t3") &&
        (!checkBox4.Checked || text4 == "t4") &&
        (!checkBox5.Checked || text5 == "t5"))
    {
        SomeOperation6();
        a = 347;
    }
}