我有一个窗体,其中有多个NumericUpDown作为输入答案的控件。我希望每个输入对某个操作(乘法,求和等)都是正确的,该操作的NumericUpDown将被禁用。我使用了下面的代码(仅用于求和运算),但是我认为它效率不高,因为我必须制定一种检查每个运算的方法。

 private void IsSumTrue() {
        if (add1 + add2 == sum.Value)
        {
            sum.Enabled = false;
        }
    }

    private void IsDifferenceTrue()
    {
        if (add1 - add2 == difference.Value)
        {
            difference.Enabled = false;
        }
    }

    private void IsProductTrue()
    {
        if (add1 * add2 == product.Value)
        {
            product.Enabled = false;
        }
    }

    private void IsQuotientTrue()
    {
        if (add1 / add2 == quotient.Value)
        {
            quotient.Enabled = false;
        }
    }


有谁知道如何仅通过一种用于所有操作的方法来使其更高效?

下面是我的想法,但是要检查每个NumericUpDown的值是否正确,我不知道如何。

private void DisableIfValueIsTrue()
    {
        foreach(Control control in this.Controls)
        {
            NumericUpDown value = control as NumericUpDown;
            // if(value [NEED HELP]

        }
    }

最佳答案

考虑到您的情况,可以在设计模式下为每个NumericUpDown设置标签,如下所示:

sum.Tag=1;
square.Tag=2;
etc


然后定义一些int变量:

int iSum=add1+add2;
int iSquare= //Whatever you want
etc


最后以这种方式遍历您的控件:

foreach (NumericUpDown control in this.Controls.OfType<NumericUpDown>())
{
  int intCondition = Convert.ToInt32(control.Tag) == 1
                      ? iSum
                      : Convert.ToInt32(control.Tag) == 2
                        ? iSquare
                        : Convert.ToInt32(control.Tag) == 3
                           ? i3
                           : i4; //You should extend this for your 8 controls
control.Enabled = intCondition == control.Value;
}


好!我提供的第二种方式

由于您将必须始终检查8种不同的条件,因此您可以简单地忘记遍历控件,而只需更改方法即可,如下所示:

private void DisableIfValueIsTrue()
{
  sum.Enabled = add1 + add2 != sum.Value;
  difference.Enabled= add1 - add2 != difference.Value;
  product.Enabled= add1 * add2 != product.Value;
  quotient.Enabled= (add2 !=0) && (add1 / add2 != quotient.Value);
  //etc
}

关于c# - 如何使用一种方法禁用多个NumericUpDown控件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33706414/

10-10 08:55