[英]Get text of dynamically generated TextBox controls?
for(int i = 0; i < numberOfFields; i++)
{
TextBox generatedField = new TextBox();
generatedField.Text = "Please enter Field Report ID Here";
generatedField.Width = 176;
generatedField.Location = new Point(pointX, pointY);
panel1.Controls.Add(generatedField);
panel1.Show();
pointY += 25;
}
生成文本框后,如何找出键入的内容?
您需要设置控件的Name
,然后可以通过以下方式按名称访问它们:
创建控件并分配名称:
for(int i = 0; i < numberOfFields; i++)
{
TextBox generatedField = new TextBox();
generatedField.Name = "someName_" + i.ToString();
generatedField.Text = "Please enter Field Report ID Here";
generatedField.Width = 176;
generatedField.Location = new Point(pointX, pointY);
panel1.Controls.Add(generatedField);
panel1.Show();
pointY += 25;
}
查找和使用控件:
var txt = (TextBox)panel1.Controls["someName_1"];
MessageBox.Show(txt.Text);
一些注意事项:
唯一名称:请注意生成唯一名称。
空检查:您可能想在var txt = (TextBox)panel1.Controls["someName_1"];
之后添加空检查var txt = (TextBox)panel1.Controls["someName_1"];
另一个选择:您可以使用this.Controls.Find
您还可以使用此代码,它将返回一个名称为someName_1
的TextBox
:
var txt = this.Controls.Find("someName_1", true).Cast<TextBox>().FirstOrDefault();
处理事件:您可以添加TextChanged
事件
您可能会发现有用的另一件事是在创建控件时添加TextChanged
事件:
generatedField.TextChanged += generatedField_TextChanged;
这样,您应该以以下形式使用此方法:
void generatedField_TextChanged(object sender, EventArgs e)
{
var txt = (TextBox)sender;
// do what you need with txt.Text and other properties
}
嗯,为什么不跟踪您的创作呢?
// somewhere else in your code, maybe when the form is created...
var MapOfMyBoxes = new Dictionary<string, TextBox>();
然后像这样修改您的代码块:
for(int i = 0; i < numberOfFields; i++)
{
TextBox generatedField = new TextBox();
MapOfMyBoxes.Add("dontUseThisLiteralUseSomethingElse", generatedField);
generatedField.Text = "Please enter Field Report ID Here";
generatedField.Width = 176;
generatedField.Location = new Point(pointX, pointY);
panel1.Controls.Add(generatedField);
panel1.Show();
pointY += 25;
}
稍后,您可以参考您的文本框:
var message = MapOfMyBoxes["dontUseThisLiteralUseSomethingElse"].Text;
注意 :请记住清理字典,因为这些文本框超出了范围/已配置,等等!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.