使用动态创建的TextBoxes中的文本
本文关键字:TextBoxes 文本 创建 动态 | 更新日期: 2023-09-27 17:58:32
我有一个关于C#中文本框的问题。我做了一个按钮,点击后会创建文本框:
private void helloButton_Click(object sender, EventArgs e)
{
TextBox txtRun = new TextBox();
TextBox txtRun2 = new TextBox();
txtRun2.Name = "txtDynamic2" + c++;
txtRun.Name = "txtDynamic" + c++;
txtRun.Location = new System.Drawing.Point(40, 50 + (20 * c));
txtRun2.Location = new System.Drawing.Point(250, 50 + (20 * c));
txtRun2.ReadOnly = true;
txtRun.Size = new System.Drawing.Size(200, 25);
txtRun2.Size = new System.Drawing.Size(200, 25);
this.Controls.Add(txtRun);
this.Controls.Add(txtRun2);
}
如何将用户键入的文本拉到这些新生成的文本框中,以将其用作不同函数(将由不同按钮调用)的参数?我对这方面还很陌生,需要帮助。
提前谢谢。
var matches = this.Controls.Find("txtDynamic2", true);
TextBox tx2 = matches[0] as TextBox;
string yourtext = tx2.Text;
这将返回一个名为txtDynamic2的控件数组,在您的情况下,第一个控件将是您要查找的控件,除非您创建更多具有相同名称的控件。这将允许您在找到文本框时完全访问该文本框。
var text = (TextBox)this.Controls.Find("txtDynamic2", true)[0];
如果您想在其他方法中使用实例化的文本框,那么您可以通过将它们传递给方法或将它们存储为类的成员来实现这一点。
将它们存储在下面的类中的示例。
public class YourForm
{
private TextBox txtRun;
private TextBox txtRun2;
private void helloButton_Click(object sender, EventArgs e)
{
txtRun = new TextBox();
txtRun2 = new TextBox();
// removed less interesting initialization for readability
this.Controls.Add(txtRun);
this.Controls.Add(txtRun2);
}
public void DoStuffWithTextBoxes()
{
if (txtRun != null && txtRun2 != null)
{
// Retrieve text value and pass the values to another method
SomeOtherMagicMethod(txtRun.Text, txtRun2.Text);
}
}
private void SomeOtherMagicMethod(string txtRunText, string txtRun2Text)
{
// Do more magic
}
}
你可以很容易地做到:
//get the text from a control named "txtDynamic"
string text = this.Controls["txtDynamic"].Text;
只需记住确保您的控件具有唯一Name
属性,否则您将从使用指定名称找到的第一个控件中获取文本。