2012-05-02 156 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:您將需要在方法之外或(更好)聲明它,維護這些控件的集合。如果您需要通過某個鍵訪問它們,則可以使用列表或字典。我建議不要使用控件的名稱作爲關鍵。想想一個更強大和更有意義的關係(很難讓我說出那是什麼,因爲我不知道爲什麼你要創建這些文本框)。 –

相關問題