2011-09-05 36 views
0

我創建了一個TextBoxes和一個標籤數組的數組。當信息在TextBox中更新時,我希望它更改標籤。我將如何能夠做到這一點?下面是我的一段代碼。我還沒有創建EvenHandler,我認爲這是我需要幫助的部分。所有在C#中使用Windows應用程序窗體。鏈接動態創建的文本框和標籤

textBoxes = new TextBox[value]; 
labels = new Label[value]; 

for (int i = 1; i < value; i++) 
{ 
    textBoxes[i] = new TextBox(); 
    textBoxes[i].Location = new Point(30, ToBox.Bottom + (i * 43)); 

    labels[i] = new Label(); 
    labels[i].Location = new Point(TopBox3[i].Width + 140, TopBox3[i].Top +3); 

    textboxes[i].ValueChanged += new EventHandler(this.TextBox_ValueChanged) ; 

    this.Controls.Add(labels[i]); 
    this.Controls.Add(textBoxes[i]); 
} 
+0

TextBox沒有ValueChanged事件 - 它是TextChanged。 – Tim

回答

0

你應該寫這樣的事:

private void textBox1_ValueChanged(object sender, EventArgs e) 
    { 
     TextBox changedTxt = sender as TextBox; 
     for (int i = 1; i < value; i++) 
      if (textBoxes[i] == changedTxt) 
      { 
       Label lblToChange = labeld[i]; 
       lblToChange.Text = changedTxt.Text; 
       break; 
      } 
    } 

在該方法中,其文本已更改爲「發件人」傳遞文本框。您可以查看您的數組,以便確定可用於訪問相應標籤並設置其文本的索引「i」。

順便說一句,蒂姆說,事件是TextChanged,而不是ValueChanged。此外請注意,每當文本發生變化時都會觸發事件,即只要您按下某個鍵,標籤就會更新。如果您只想在用戶輸入文本時更新標籤,則應該使用「離開」事件。

1

你能記住TextBox的指數Tag屬性

textBoxes[i].Tag = i; 

,然後用你的事件處理這個值來獲得相應的標籤(假設你持有的標籤陣列作爲一個局部變量)

protected void TextBox_ValueChanged(object sender, EventArgs e) 
{ 
    TextBox textbox = sender as TextBox; 
    if(textbox==null) 
    return; 
    int index = Convert.ToInt32(textbox.Tag); 
    if(index >= 0 && index < this.labels.Length) 
    { 
    Label label = this.labels[index]; 
    /* ... */ 
    } 
}