C# 将文本插入现有文本框,如数组

C# 将文本插入现有文本框,如数组,c#,C#,我正在从串行端口读取值,并希望将这些值放在表单上的各种文本框中 这些文本框称为: tbMasterParam0, tbMasterParam1, tbMasterParam2, ... tbMasterParam15 我想使用一个事实,即它们有一个数字命名结构,并像调用数组一样调用它们。这可能吗 我附上了代码以提供一些上下文 否则,我只是运行一个开关/机箱,但它变得非常庞大。当然,我可以用几句话来表达 private void displayBoardValue(byte[] Bo

我正在从串行端口读取值,并希望将这些值放在表单上的各种文本框中

这些文本框称为:

tbMasterParam0, 
tbMasterParam1, 
tbMasterParam2,
...
tbMasterParam15
我想使用一个事实,即它们有一个数字命名结构,并像调用数组一样调用它们。这可能吗

我附上了代码以提供一些上下文

否则,我只是运行一个开关/机箱,但它变得非常庞大。当然,我可以用几句话来表达

    private void displayBoardValue(byte[] BoardParameters)
    {
        uint measurement;
        string value;
        measurement = (uint)(BoardParameters[3] + (BoardParameters[2] << 8));
        value = measurement.ToString();

        this.Controls[("tbMasterParam" + boardManager.parameter_id)].Text = value;
    }
private void displayBoardValue(字节[]BoardParameters)
{
单位测量;
字符串值;

测量=(uint)(BoardParameters[3]+(BoardParameters[2]如果我没有弄错,您可以使用
Find
方法来实现这一点。 这样地:
this.Controls.Find()

您可能需要将其强制转换为
文本框

我宁愿提取一个方法:

公共文本框FindTextBox(int索引)
{
//在这里找到相应的文本框
//注意.Find(…,true)-不仅扫描窗体上的控件,
//但是所有的子面板、分组框等。
返回Controls.Find(“tbMasterParam”+index.ToString(),true).First()作为文本框;
}
...
私有void displayBoardValue(字节[]BoardParameters)
{
单位测量;
字符串值;

measurement=(uint)(BoardParameters[3]+(BoardParameters[2]在哪个位置调用?打开Form.designer.cs,看看这些文本框的真正名称。例如
this.tbMasterParam1.Name=“textBox1”;
-此名称将是
控件
集合中控件的键。@Dmytro Shevchenko:所有
文本框
(即
tbMasterParam0..tbMasterParam15
)应该存在。如果不存在,最好抛出一个异常,然后将其吞没。我也看不到您的代码如何处理异常。如果未找到具有所需名称的控件,
First()
将抛出
无效操作
异常,并显示消息
“序列不包含任何元素”
@Jonathan Brown:有没有可能,
参数id
实际上超出了
0..15
的范围?看起来在第二轮
参数id
16
而且没有这样的文本框你帮了大忙
public TextBox FindTextBox(int index) 
{
     // Find corresponding TextBox here 
     // Note .Find(..., true) - scan not only controls on the form, 
     // but all the child panels, groupboxes etc.
     return Controls.Find("tbMasterParam" + index.ToString(), true).First() as TextBox;
}

...

private void displayBoardValue(byte[] BoardParameters)
{
    uint measurement;
    string value;
    measurement = (uint)(BoardParameters[3] + (BoardParameters[2] << 8));
    value = measurement.ToString();

    FindTextBox(boardManager.parameter_id).Text = value;
}