如果它们是输入参数,如何使用checkBox?

时间:2016-03-31 09:13:14

标签: c#

我的checkBox必须是输入参数,事件不是解决方案(我知道如何处理事件)。

我的wf看起来像这样:

enter image description here

抱歉,这不是英语,但没关系,我会解释。我在这个第一组框中有四个复选框(“Načinunosa”:“Kraj dana”是checkBox1,“Pozadinski unos”是checkBox2,“Dopuna”是checkBox3,“Odložen在线”是checkBox4)。当我点击按钮Pretraga(它是搜索按钮)时,我有一些行是可以的,但我不知道如何键入关于复选框的代码。

我知道它只能用两个checkBoxex,

private void btnPretraga_Click(object sender, EventArgs e)
{
    //some code before checkBoxes

    string nacinUnosa;//this is input parameter

    if((checkBox1.Checked = true) && (checkBox2.Checked = true))
    {
        nacinUnosa = "%":
    }
    if((checkBox1.Checked = true) && (checkBox2.Checked = false))
    {
        nacinUnosa = "1"
    }
    if((checkBox1.Checked = false) && (checkBox2.Checked = true))
    {
        nacinUnosa = "2"
    }
    //and so on...
}

但我不知道这是如何使用四个chechBoxex ...必须有另一种方式。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您想检查所有复选框上的checkedstatus吗?

首先,我认为您需要在if语句中使用2 =

if(checkBox1.Checked == true)

我认为唯一的方法是制作更大的if s

我认为if / else结构在这种情况下不是一个坏主意。

像这样:

if(checkBox1.Checked && checkBox2.Checked && checkBox3.Checked && checkBox4.Checked) 
{
}
else if(!checkBox1.Checked && checkBox2.Checked && checkBox3.Checked && checkBox4.Checked) 
{
}
...

并为所有的可能性(这很多,真实)重复这个

答案 1 :(得分:2)

对此的一个解决方案是将它们分成不同的部分,如下所示:

if(checkBox1.Checked)
{
    if(checkBox2.Checked)
    {
        nacinUnosa = "%";
    }
    else
    {

    }
}
//And so on

如果你希望减小if语句的大小而不像这样分割它们,你也可以使用单行if语句,如

nacinUnosa = (checkBox1.Checked && checkBox2.Checked) ? "%" : checkBox1.Checked ? "1" : checkBox2.Checked ? "2" : "0";

这样做的一个好处是,您仍然可以通过拆分将其设置为看起来,就像它是一个多行语句一样。因此,这是具有更好格式的完全相同的代码

nacinUnosa = 
(checkBox1.Checked && checkBox2.Checked) 
? "%" 
: checkBox1.Checked 
? "1" 
: checkBox2.Checked 
? "2" 
: "0";

完整代码

nacinUnosa = 
(checkBox1.Checked && checkBox2.Checked && checkBox3.Checked && checkBox4.Checked) 
? "%" 
: (checkBox1.Checked && checkBox2.Checked && checkBox3.Checked) 
? "123" 
: (checkBox1.Checked && checkBox2.Checked && checkBox4.Checked) 
? "124" 
: (checkBox1.Checked && checkBox3.Checked && checkBox4.Checked) 
? "134" 
: (checkBox2.Checked && checkBox3.Checked && checkBox4.Checked) 
? "234" 
: (checkBox1.Checked && checkBox2.Checked) 
? "12" 
: (checkBox1.Checked && checkBox3.Checked) 
? "13" 
: (checkBox1.Checked && checkBox4.Checked) 
? "14" 
: (checkBox2.Checked && checkBox3.Checked) 
? "23" 
: (checkBox2.Checked && checkBox4.Checked) 
? "24" 
: (checkBox3.Checked && checkBox4.Checked) 
? "34" 
: (checkBox1.Checked) 
? "1" 
: (checkBox2.Checked) 
? "2" 
: (checkBox3.Checked) 
? "3" 
: (checkBox4.Checked) 
? "4" 
: "0";

如何在将来解决这个问题

你可以通过使用组合学来解决这个问题,这可以让你知道每组中有多少种可能性,当你检查了4个复选框时,可能性只有4C4,等于1.当你移动时在它上面变成4C3(等于4),4C2(它是6)和4C1,它是4.结果,应该有15个结果,以及当没有勾选时的额外结果!

答案 2 :(得分:1)

您可以使用标记或数组轻松完成您尝试实现的目标。

我确实已经在Alfie Goodacre his answer上阅读了您的评论,您可以将其保持在简单的地方:

//Instead of storing it in a string, we use a list of strings
nacinUnosa = List<string>();

//Just check each checkbox once...
if (checkBox1.Checked)
    nacinUnosa.push("1");
if (checkBox2.Checked)
    nacinUnosa.push("2");
if (checkBox3.Checked)
    nacinUnosa.push("3");
if (checkBox4.Checked)
    nacinUnosa.push("4");

//Now we have a full list with all the active checkboxes.. For the query, we can do something like:
var query = "SELECT * FROM Clothes WHERE ";
for (var i = 0; i < nacinUnosa.length; i++) {
    //Create your sql query code here.. Something like:
    if (i != 0) 
       query += " OR " ;

    nacinUnosa = " + nacinUnosa[i] " ;
}

答案 3 :(得分:0)

你的所有答案都是正确的。另一种方式:

string nacinUnosa = "";

if (checkBox1.Checked) nacinUnosa = "1";
if (checkBox2.Checked) nacinUnosa = nacinUnosa + "2";
if (checkBox3.Checked) nacinUnosa = nacinUnosa + "3";
if (checkBox4.Checked) nacinUnosa = nacinUnosa + "4";

查询可以这样工作:

SELECT d.nacin_unosa, ....//nacin_unosa is column in table
FROM DNEVNIK d, ... //DNEVNIK is table
WHERE P_NACIN_UNOSA like ('%'||d.nacin_unosa||'%') // P_NACIN_UNOSA is input parameter

谢谢你的回答...... :)