2015-09-17 31 views
2

我正在讀取串行端口的值,並希望將這些值放在我的表單上的各種文本框中。將文本插入現有文本框,如數組

的文本框被稱爲:

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

我似乎得到一個空引用異常

+0

你在哪個地方打電話給它? –

+0

打開你的Form.designer.cs,看看這些文本框的名字是什麼。例如。 'this.tbMasterParam1.Name =「textBox1」;' - 這個名字將成爲'Controls'集合中控件的關鍵。 –

回答

3

我寧願提取方法

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

編輯:據我從評論看,問題是掃描不僅形式本身,但孩子面板,組合盒等。在這種情況下,您需要Controls.Find(, true)

+0

這是如何解決空引用異常? –

+0

它不會勒。 – kevintjuh93

+0

@Dmytro Shevchenko:所有'TextBox'es(即'tbMasterParam0..tbMasterParam15')應該存在。如果沒有,最好有一個例外*拋出*然後*吞下*。 –

1

如果我沒有記錯的話,你可以通過使用Find方法實現這一目標。 喜歡傾向: this.Controls.Find()

您可能需要將其轉換爲TextBox