获取动态生成的TextBox控件的文本?

时间:2015-10-02 15:22:04

标签: c# winforms

 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后,如何找出键入的内容?

2 个答案:

答案 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;

警告:记得清理字典,因为这些文本框超出范围/处置等等!