Cómo: Buscar controles de formularios Web Forms en una página recorriendo la colección Controls

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 Sub
    
    private 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;
        }
    }
    
    

Vea también

Conceptos

Identificación de controles de formularios Web Forms