2011-09-05 77 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]; 
    /* ... */ 
    } 
}