【问题标题】:Use an alternative of "if" statement for checkBoxes对复选框使用“if”语句的替代方案
【发布时间】:2017-12-19 09:02:06
【问题描述】:

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

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

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

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

我不知道“checkBox”是否可以使用正则表达式...有什么想法吗?

【问题讨论】:

  • checked 是一个bool 值,不需要regex
  • 您可以将复选框存储在数组或列表中。
  • 您是否尝试过 checkboxarray 并且您可以在循环中使用它们 checkbox[i]

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


【解决方案1】:

如果这是 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 的项目来访问它们,可能结合使用字典的建议。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-19
      • 2012-10-10
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多