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;
}
生成TextBoxes后,如何找出键入的内容?
答案 0 :(得分:2)
您需要设置控件的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"];
之后添加空检查
另一个选项: 您可以使用this.Controls.Find
您也可以使用此代码,该代码将返回名称为TextBox
的{{1}}:
someName_1
处理事件: 您可以添加 var txt = this.Controls.Find("someName_1", true).Cast<TextBox>().FirstOrDefault();
事件
您可能觉得有用的另一件事是在创建控件时添加TextChanged
事件:
TextChanged
这样,您应该在表单中使用此方法:
generatedField.TextChanged += generatedField_TextChanged;
答案 1 :(得分:1)
嗯,为什么不跟踪你创造的东西呢?
// 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;
警告:记得清理字典,因为这些文本框超出范围/处置等等!