对复选框使用“if”语句的替代方法

问题描述 投票:1回答:2

我尝试用“for”或“while”替换每个“if”:

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”......任何想法?

c# for-loop if-statement checkbox while-loop
2个回答
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)。这可能更有效率。


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.