链接动态创建的文本框和标签
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 事件。
【讨论】:
以上是关于链接动态创建的文本框和标签的主要内容,如果未能解决你的问题,请参考以下文章