2012-05-02 155 views
0

我根据用户选择(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; 
+2

你的意思是你需要处理TextChanged事件或者控制的没有发现?什么是错误?什么不行? – MarioDS

+0

[类似的问题](http://stackoverflow.com/questions/4953853/onkeyup-event-asp-net) upvotes的答案为您提供了所需的信息,但您应该在发布之前进行搜索。它已被多次回答。 –

+0

对于很多盒子你可以做一个foreach控制grBox1 –

回答

2

添加事件处理

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; 
    ... 
}  

而且我不会通过grBox1.Controls["textname0"].Text;访问文本框。文本框列表是一个更好的选择,因为你可以通过数字索引来访问它,而不是一个控件名称

string s = _textBoxes[i].Text; 
+0

'txtb4'不是一个实例字段,它是一个局部变量。 – Servy

+0

将'sender'作为'TextBox'而不是直接通过名称直接访问文本框会更好,尤其是因为我们正在讨论以编程方式添加的框。 – saluce

+0

好的,我被'txtb4'中的数字4误导了。我同时添加了更加动态的解决方案。 –

4

所以,像...

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 
} 
+0

伟大的工作,感谢 – GuyWhoReadsStockoverflow

+0

任何想法,我怎么能访问初始化方法之外的文本框,从任何地方类? – GuyWhoReadsStockoverflow

+0

@ user1253379:您将需要在方法之外或(更好)声明它,维护这些控件的集合。如果您需要通过某个键访问它们,则可以使用列表或字典。我建议不要使用控件的名称作为关键。想想一个更强大和更有意义的关系(很难让我说出那是什么,因为我不知道为什么你要创建这些文本框)。 –

相关问题