我尝试更换每个"如果"通过" 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" ...任何想法?
答案 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的项来访问它们,可能与使用字典的建议相结合。
有很多方法可以解决这个问题,但不要使用变量名。