繁体   English   中英

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

[英]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_1TextBox

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM