2010-10-10 23 views

risposta

75

Utilizzare Control.ControlCollection.Find.

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

EDIT per richiedente:

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() come TextBox; Va bene? –

+0

Ottenere questo errore .. .net framework 2.0 .. 'System.Array' non contiene una definizione per 'FirstOrDefault' e nessun metodo di estensione 'FirstOrDefault' che accetta un primo argomento di tipo 'System.Array' potrebbe essere trovato (sei tu? Manca una direttiva using o un riferimento all'assembly?) –

+0

Stai aggiungendo in modo dinamico la casella di testo nel modulo durante il runtime? In tal caso, è possibile assegnare un nome univoco a ciascuna casella di testo e utilizzare controls.find per trovare la casella di testo con il suo nome univoco. – bla

10

È possibile utilizzare:

f.Controls[name]; 

Dove f è la variabile modulo. Questo ti dà il controllo con il nome name.

+5

Si noti che questo non funziona se il controllo è annidato (avrete solo trovare i controlli presenti in quel livello nella gerarchia di controllo). –

+0

@ Michael: è corretto. – CesarGon

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

Se Controls.Find non viene trovato "textBox1" => errore. È necessario aggiungere il codice.

If(tbx != null) 

Edit:

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