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

Posted

技术标签:

【中文标题】链接动态创建的文本框和标签【英文标题】:Linking dynamically created text boxes and labels 【发布时间】:2011-11-10 12:19:18 【问题描述】:

我创建了一个文本框数组和一个标签数组。当文本框中的信息更新时,我希望它更改标签。我怎么能做到这一点?下面是我的一段代码。我还没有创建我认为是我需要帮助的部分的 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]);

【问题讨论】:

TextBox 没有 ValueChanged 事件 - 它是 TextChanged。 【参考方案1】:

你可以记住Tag属性中TextBox的索引

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

【讨论】:

【参考方案2】:

你应该这样写:

    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 作为“发送者”传递。你在你的数组中寻找它,所以你确定了索引“i”,它可以用来访问相应的标签并设置它的文本。

顺便说一句,正如 Tim 所说,事件是 TextChanged,而不是 ValueChanged。此外请注意,文本的每次更改都会触发该事件,即,只要您按下一个键,标签就会更新。如果您希望仅在用户完成输入文本后更新标签,请使用 Leave 事件。

【讨论】:

以上是关于链接动态创建的文本框和标签的主要内容,如果未能解决你的问题,请参考以下文章

文本框和标签数组如何在 C# 中的提交方法中获取值

Flex 动态组件运行时创建

通过绑定动态创建的带有可点击链接的文本

如何在动态创建的行中添加日期选择器

动态创建的索引字段未与表单一起提交

用户单击删除按钮时如何删除动态控件(文本框和按钮)