C# 当文本更改时,如何从编程文本框中获取文本?

C# 当文本更改时,如何从编程文本框中获取文本?,c#,C#,我正在根据用户的选择(1-5)创建多个文本框。当文本更改时,我如何访问编程文本框的值 class starts{ int i=0; ..... TextBox txtb4 = new TextBox(); txtb4.Name = "textname" + Convert.ToString(i); ArrayText.Add(txtb4); System.Drawing.Point p5 = new System.Drawing.Point(1

我正在根据用户的选择(1-5)创建多个文本框。当文本更改时,我如何访问编程文本框的值

class starts{
    int i=0;

    .....

    TextBox txtb4 = new TextBox();
    txtb4.Name = "textname" + Convert.ToString(i);
    ArrayText.Add(txtb4);
    System.Drawing.Point p5 = new System.Drawing.Point(120, 15);
    txtb4.Location = p5;
    txtb4.Size = new System.Drawing.Size(80, 30);
    txtb4.Text = stringMy;
    grBox1.Controls.Add(txtb4);
    i++;
}
我可以使用下面的代码访问初始文本框文本,但在值更改后无法访问它

label15.Text = grBox1.Controls["textname0"].Text;
所以,有点像

TextBox txtb4 = new TextBox();
txtb4.Name = "textname" + Convert.ToString(i);
txtb4.TextChanged += textbox_TextChanged;
ArrayText.Add(txtb4);

// ...

void textbox_TextChanged(object sender, EventArgs e)
{
    var textbox = (TextBox)sender;
    // work with textbox
}
所以,有点像

TextBox txtb4 = new TextBox();
txtb4.Name = "textname" + Convert.ToString(i);
txtb4.TextChanged += textbox_TextChanged;
ArrayText.Add(txtb4);

// ...

void textbox_TextChanged(object sender, EventArgs e)
{
    var textbox = (TextBox)sender;
    // work with textbox
}
添加事件处理程序

txtb4.TextChanged += Txtb4_TextChanged;
像这样声明处理程序

static void Txtb4_TextChanged(object sender, EventArgs e)
{
    string s = txtb4.Text;
    ...
}    

动态创建文本框;但是,您的代码看起来不是很动态。试试这个

List<TextBox> _textBoxes = new List<TextBox>();
int _nextTextBoxTop = 15;

private void AddTextBox(string initialText)
{
    var tb = new TextBox();
    tb.Name = "tb" + _textBoxes.Count;
    _textBoxes.Add(tb);
    tb.Location = new Point(120, _nextTextBoxTop);
    _nextTextBoxTop += 36;
    tb.Size = new Size(80, 30);
    tb.Text = initialText;
    tb.TextChanged += TextBox_TextChanged
    grBox1.Controls.Add(tb);
}

static void TextBox_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (TextBox)sender;
    string s = tb.Text;
    ...
}    
添加事件处理程序

txtb4.TextChanged += Txtb4_TextChanged;
像这样声明处理程序

static void Txtb4_TextChanged(object sender, EventArgs e)
{
    string s = txtb4.Text;
    ...
}    

动态创建文本框;但是,您的代码看起来不是很动态。试试这个

List<TextBox> _textBoxes = new List<TextBox>();
int _nextTextBoxTop = 15;

private void AddTextBox(string initialText)
{
    var tb = new TextBox();
    tb.Name = "tb" + _textBoxes.Count;
    _textBoxes.Add(tb);
    tb.Location = new Point(120, _nextTextBoxTop);
    _nextTextBoxTop += 36;
    tb.Size = new Size(80, 30);
    tb.Text = initialText;
    tb.TextChanged += TextBox_TextChanged
    grBox1.Controls.Add(tb);
}

static void TextBox_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (TextBox)sender;
    string s = tb.Text;
    ...
}    


您的意思是需要处理TextChanged事件还是找不到控件?错误是什么?什么不起作用?带有upvotes的答案为您提供了所需的信息,但您应该在发布前进行搜索。它已经被回答了好几次。对于许多盒子,你可以做一个foreach控件grBox1@PedroFerreira这不是asp.net文本框,该问题不适用。在初始化期间添加事件处理程序,如
txtb4.TextChanged+=textbox\u TextChanged您的意思是需要处理TextChanged事件还是找不到控件?错误是什么?什么不起作用?带有upvotes的答案为您提供了所需的信息,但您应该在发布前进行搜索。它已经被回答了好几次。对于许多盒子,你可以做一个foreach控件grBox1@PedroFerreira这不是asp.net文本框,该问题不适用。在初始化期间添加事件处理程序,如
txtb4.TextChanged+=textbox\u TextChanged
txtb4
不是一个实例字段,它是一个局部变量。最好将
sender
转换为
TextBox
,而不是直接按名称访问TextBox,特别是因为我们讨论的是以编程方式添加的框。好吧,我被
txtb4
中的数字4误导了。我同时添加了一个更具动态性的解决方案。
txtb4
不是一个实例字段,而是一个局部变量。最好将
sender
转换为
TextBox
,而不是直接按名称访问TextBox,特别是因为我们讨论的是以编程方式添加的框。好的,我被
txtb4
中的数字4误导了。同时,我添加了一个更具动态性的解决方案。知道如何从类中的任何位置访问初始化方法外部的textbox吗?@user1253379:您需要在方法外部声明它,或者(更好)维护这些控件的集合。如果需要通过某个键访问列表或词典,则可以使用它们。我建议不要使用控件的名称作为键。想一想一个更稳固、更有意义的关系(我很难说这是什么,因为我不知道你为什么要创建这些文本框。)因为我会有大约96个文本框,我想列表就是解决方案。我是否只需要在列表中声明它们,并在需要获取文本时引用它们?@user1253379:如果您计划向用户展示96个文本框,您可能需要重新考虑您的总体设计。这是一个非常混乱和难以使用的UI。但是,如果你是这样做的话,那么是的,创建它们,将它们添加到列表或字典中,然后在需要时查找它们;在类的开头,但它没有拾取任何值。知道如何从类中的任何位置访问初始化方法外部的textbox吗?@user1253379:您需要在方法外部声明它,或者(更好)维护这些控件的集合。如果需要通过某个键访问列表或词典,则可以使用它们。我建议不要使用控件的名称作为键。想一想一个更稳固、更有意义的关系(我很难说这是什么,因为我不知道你为什么要创建这些文本框。)因为我会有大约96个文本框,我想列表就是解决方案。我是否只需要在列表中声明它们,并在需要获取文本时引用它们?@user1253379:如果您计划向用户展示96个文本框,您可能需要重新考虑您的总体设计。这是一个非常混乱和难以使用的UI。但是,如果你是这样做的话,那么是的,创建它们,将它们添加到列表或字典中,然后在需要时查找它们;在课程开始时,但它没有获得任何价值。