循环通过顺序控制名称C#

循环通过顺序控制名称C#,c#,winforms,for-loop,foreach,C#,Winforms,For Loop,Foreach,我希望为名为numericUpDown1,numericUpDown2等的NumericUpDowns赋值。我希望实现如下目标: for (int i = 0; i < readBuf.Length; i++) { numericUpDown[i + 1].Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0)); } for(int i=0;i

我希望为名为
numericUpDown1
numericUpDown2
等的NumericUpDowns赋值。我希望实现如下目标:

for (int i = 0; i < readBuf.Length; i++)
{
    numericUpDown[i + 1].Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));             
}
for(int i=0;i
我尝试的是这里描述的方法:,但是当我像这样使用它时,它没有给出预期的结果

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 allNumUpDwn=this.GetChildControls();
int i=0;
foreach(allNumUpDwn中的数字上下nud)
{
num.Value=Convert.ToDecimal(BitConverter.ToSingle(readBuf[i],startIndex:0));
i++;
}
您可以尝试:

for (int i = 0; i < readBuf.Length; i++)
{
    ((NumericUpDown)Controls.Find("numericUpDown" + (i+1))).Value = Convert.ToDecimal(BitConverter.ToSingle(readBuf[i], startIndex: 0));             
}
for(int i=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));
}
var nuds=new[]
{
numericUpDown1,numericUpDown2,
数字上下3,数字上下4,
数字上下5,数字上下6,
//等
};
for(int i=0;i

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

我同意Enigmativity。这种方法更好,除非你的数字设置是动态构建的。@Enigmativity啊,我希望我可以避免在数组中重复写入每个数字设置,但是如果这是需要做的,那就必须做。谢谢你的回答@RikusHoney-您始终可以使用
控件收集数组。查找
和LINQ,但如果存在运行时错误,则会返回运行时错误。究竟
readBuf
是什么?你必须调试你的应用程序。在代码中插入断点,看看发生了什么。@Dmitry我正在从另一个进程读取内存,并使用numericUpDown控件对其进行更改,但有时程序中的值会更改,而numericUpDowns不会更新,因此我需要再次读取内存。