循环遍历顺序控制名称C#

时间:2015-12-27 00:58:59

标签: c# winforms for-loop foreach

我希望将值分配给名为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++;
}

2 个答案:

答案 0 :(得分:4)

我会用这种方法:

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));
}

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

答案 1 :(得分:0)

您可以尝试:

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