Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
Cada control contenedor de la página (y la página en sí) tiene una colección Controls que se puede utilizar para obtener controles individuales.
Para buscar controles en la colección Controls
Ejecute un bucle en la colección Controls del control contenedor. La colección es de tipo ControlCollection y devuelve objetos de tipo Control.
En el ejemplo siguiente se muestra la forma de recorrer la colección Controls. En el ejemplo se supone una página Web ASP.NET con al menos un control TextBox en ella, un control Label y un control Button. El código obtiene todos los controles secundarios del objeto Page. Como esto produciría sólo unos pocos controles secundarios de alto nivel, incluido el objeto HtmlForm, el código recorre también la colección Controls de cada control secundario individual. El código busca cuadros de texto comparando el tipo de cada control. Cuando encuentra un cuadro de texto, obtiene el valor del mismo y lo une a una cadena que se muestra al final de un control Label.
Este ejemplo busca sólo los controles contenidos en el objeto Page y los que son secundarios directos de la página. No busca cuadros de texto que sean secundarios de un control que, a su vez, sea un secundario de la página. Por ejemplo, si ha agregado un control Panel a la página, el control Panel sería un secundario del control HtmlForm contenido en el objeto Page, y se encontraría en este ejemplo. Sin embargo, si ha agregado después un control TextBox al control Panel, el texto del control TextBox no se mostraría en el ejemplo, porque no es un secundario de la página ni de un control que sea secundario de la página. Una aplicación más práctica del recorrido de controles de esta manera sería crear un método recursivo al que se pudiera llamar para recorrer la colección Controls de cada control que se encuentre. Sin embargo, por claridad, el ejemplo siguiente no se ha creado como una función recursiva.
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim allTextBoxValues As String = "" Dim c As Control Dim childc As Control For Each c In Page.Controls For Each childc In c.Controls If TypeOf childc Is TextBox Then allTextBoxValues &= CType(childc, TextBox).Text & "," End If Next Next If allTextBoxValues <> "" Then Label1.Text = allTextBoxValues End If End Subprivate void Button1_Click(object sender, System.EventArgs e) { string allTextBoxValues = ""; foreach (Control c in Page.Controls) { foreach (Control childc in c.Controls) { if (childc is TextBox) { allTextBoxValues += ((TextBox)childc).Text + ","; } } } if (allTextBoxValues != "") { Label1.Text = allTextBoxValues; } }