对复选框使用“if”语句的替代方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对复选框使用“if”语句的替代方法相关的知识,希望对你有一定的参考价值。
我尝试用“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”......任何想法?
答案
如果这是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
)。这可能更有效率。
另一答案
您应该将所有复选框加载到列表中并迭代它。或者甚至更好,将它们加载到字典中,将int作为键,将复选框作为值,以便可以“乱序”访问它们。
或者作为替代方法,使用复选框的Tag属性存储整数键,然后通过查找具有匹配int的项来访问它们,可能还会结合使用字典的建议。
有很多方法可以解决这个问题,但不要使用变量名。
以上是关于对复选框使用“if”语句的替代方法的主要内容,如果未能解决你的问题,请参考以下文章