我希望将值分配给名为numericUpDown1numericUpDown2等的NumericUpDowns。我想要实现的是这样的:

for (int i = 0; i < readBuf.Length; i++)
{
    numericUpDown[i + 1].Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));
}


我尝试做的是这里描述的方法:Loop through Textboxes,但是当我像这样使用它时,它没有给出预期的结果

var allNumUpDwn = this.GetChildControls<NumericUpDown>();
int i = 0;
foreach (NumericUpDown nud in allNumUpDwn)
{
    nud.Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));
    i++;
}

最佳答案

我会使用这种方法:

var nuds = new []
{
    numericUpDown1, numericUpDown2,
    numericUpDown3, numericUpDown4,
    numericUpDown5, numericUpDown6,
    // etc
};

for (int i = 0; i < readBuf.Length; i++)
{
    nuds[i].Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));
}


这里的最大优点是您的代码经过编译时检查,因此,如果您开始删除或重命名控件,则将遇到编译错误,而不是运行时错误。

09-25 17:31