链接动态创建的文本框和标签

时间:2011-09-05 10:03:17

标签: c# winforms dynamic

我创建了一个TextBoxes数组和一个Labels数组。当在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]);
}

2 个答案:

答案 0 :(得分:1)

您可以记住Tag属性

中TextBox的索引
 textBoxes[i].Tag = i;

然后在eventhandler中使用此值来获取相应的标签(假设您将labels数组作为局部变量保存)

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];
    /* ... */
  }
}

答案 1 :(得分: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;
            }
    }

在方法中,文本已更改的TextBox将作为“sender”传递。您可以查看数组,因此您可以识别索引“i”,该索引可用于访问相应的Label并设置其文本。

Tim说道,事件是TextChanged,而不是ValueChanged。此外,请注意,对于文本中的每个更改都会触发事件,即,只要按下某个键,标签就会更新。如果您希望仅在用户完成输入文本时更新标签,则“离开”是您应该使用的事件。