C# 当文本更改时,如何从编程文本框中获取文本?
我正在根据用户的选择(1-5)创建多个文本框。当文本更改时,我如何访问编程文本框的值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
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。但是,如果你是这样做的话,那么是的,创建它们,将它们添加到列表或字典中,然后在需要时查找它们;在课程开始时,但它没有获得任何价值。