2010-10-10 15 views

Odpowiedz

75

Użyj Control.ControlCollection.Find.

TextBox tbx = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox; 
tbx.Text = "found!"; 

EDIT dla pytającego:

Control[] tbxs = this.Controls.Find(txtbox_and_message[0,0], true); 
if (tbxs != null && tbxs.Length > 0) 
{ 
    tbxs[0].Text = "Found!"; 
} 
+0

TextBox tBox = this.Controls.Find (txtbox_and_message [0, 0], true) .FirstOrDefault() jako TextBox; Czy to jest w porządku? –

+0

Otrzymanie tego błędu .. .net framework 2.0 .. "System.Array" nie zawiera definicji "FirstOrDefault" i nie można znaleźć metody rozszerzenia "FirstOrDefault" akceptującej pierwszy argument typu "System.Array" (czy jesteś brakuje dyrektywy użycia lub odniesienia do zespołu?) –

+0

Czy dynamicznie dodajesz pole tekstowe do formularza podczas wykonywania? W takim przypadku możesz przypisać unikalną nazwę do każdego pola tekstowego i użyć controls.find, aby znaleźć pole tekstowe o unikalnej nazwie. – bla

10

Można użyć:

f.Controls[name]; 

Gdzie f jest zmienną formularz. To daje kontrolę pod nazwą name.

+5

Należy pamiętać, że to nie działa, gdy kontrola jest zagnieżdżony (znajdziesz tylko kontroli obecnych na tym samym poziomie w hierarchii sterowania). –

+0

@Michael: Zgadza się. – CesarGon

3
TextBox tbx = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox; 
tbx.Text = "found!"; 

Jeśli Controls.Find nie znaleziono "TextBox1" => błąd. Musisz dodać kod.

If(tbx != null) 

Edit:

TextBox tbx = this.Controls.Find("textBox1", true).FirstOrDefault() as TextBox; 
If(tbx != null) 
    tbx.Text = "found!"; 
Powiązane problemy