使用"替代"如果"复选框的声明

时间:2017-12-19 09:02:07

标签: c# for-loop if-statement checkbox while-loop

我尝试更换每个"如果"通过" for"或"而":

if (CheckObject1.Checked)
    XRPC.SetMemory(8184, value);
if (CheckObject2.Checked)
    XRPC.SetMemory(7848, value);
[...]
if (CheckObject20.Checked)
    XRPC.SetMemory(1800, value);

我已经尝试过了,但问题是我不知道如何在checkBox末尾增加数字:

int current = 8184;
int X = 1;
while (current > 1800)
{
    if (CheckObjectX.Checked) // regex?
        XRPC.SetMemory(current, value);
    X += 1;
    current -= 336;
}

我不知道正则表达式是否可以用于" checkBox" ...任何想法?

2 个答案:

答案 0 :(得分:3)

如果这是winforms,您可以使用Controls.Find和LINQ:

int current = 8184;
int X = 1;
while (current > 1800)
{
    CheckBox CheckObjectX = this.Controls.Find("CheckObject"+X, true).OfType<CheckBox>().SingleOrDefault();
    if (CheckObjectX != null && CheckObjectX.Checked)
        XRPC.SetMemory(current, value);
    X += 1;
    current -= 336;
}

如果它们都在同一个父控件中而不是嵌套,则可以将false作为第二个参数传递,并将this替换为容器(如myCheckBoxPanel)。这可能更有效率。

答案 1 :(得分:2)

您应该将所有复选框加载到列表中并迭代它。或者甚至更好,将它们加载到字典中,将int作为键,将复选框作为值,以便可以“乱序”访问它们。

或者作为替代方法,使用复选框的Tag属性来存储整数键,然后通过查找具有匹配int的项来访问它们,可能与使用字典的建议相结合。

有很多方法可以解决这个问题,但不要使用变量名。