2010-10-10 17 views

Respuesta

75

Use Control.ControlCollection.Find.

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

EDIT durante autor de la pregunta:

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() como TextBox; ¿Está bien? –

+0

Obteniendo este error .. .net framework 2.0 .. 'System.Array' no contiene una definición para 'FirstOrDefault' y no se puede encontrar ningún método de extensión 'FirstOrDefault' que acepte un primer argumento de tipo 'System.Array' (¿Está usted ¿falta una directiva using o una referencia de ensamblado?) –

+0

¿Está agregando dinámicamente textbox a su formulario durante el tiempo de ejecución? Si este es el caso, puede asignar un nombre único a cada cuadro de texto y usar controls.find para encontrar el cuadro de texto con su nombre único. – bla

10

Se puede utilizar:

f.Controls[name]; 

Dónde f es la variable de formulario. Eso le da el control con el nombre name.

+5

Tenga en cuenta que esto no funciona si se anida el control (que solamente encontrará controles existentes en ese nivel en la jerarquía de control). –

+0

@Michael: Eso es correcto. – CesarGon

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

Si no se encuentra Controls.Find "textBox1" => error. Debe agregar código.

If(tbx != null) 

Editar:

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