Condividi tramite


Procedura: individuare i controlli Web Form di una pagina nell'insieme Controls

Aggiornamento: novembre 2007

Ogni controllo contenitore presente nella pagina, così come la pagina stessa, contiene un'insieme Controls che può essere utilizzato per individuare singoli controlli.

Per individuare un controllo nell'insieme Controls

  • Scorrere in ciclo l'insieme Controls del controllo contenitore. L'insieme è del tipo ControlCollection e restituisce oggetti di tipo Control.

    Nell'esempio riportato di seguito viene illustrato come scorrere in ciclo l'insieme Controls. Si presuppone che esista una pagina Web ASP.NET contenente al suo interno almeno un controllo TextBox, un controllo Label e un controllo Button. Nel codice vengono recuperati tutti i controlli figlio dell'oggetto Page. Poiché in tal modo vengono individuati solo pochi controlli figlio di alto livello, tra cui l'oggetto HtmlForm, viene scorso in ciclo anche l'insieme Controls di ciascun controllo figlio. Vengono cercate le caselle di testo confrontando il tipo di ciascun controllo. Quando viene trovata una casella di testo, il valore di tale casella viene recuperato e concatenato in una stringa che, al termine, viene visualizzata in un controllo Label.

    In questo esempio vengono individuati solo i controlli contenuti nell'oggetto Page e i controlli figlio diretti della pagina. Non vengono individuate le caselle di testo figlio di controlli a loro volta figlio della pagina. Se, ad esempio, si aggiunge un controllo Panel alla pagina, il controllo Panel sarà figlio del controllo HtmlForm contenuto in Page e verrà individuato nell'esempio. Se tuttavia si aggiunge un controllo TextBox nel controllo Panel, il testo del controllo TextBox non verrà visualizzato dall'esempio in quanto non è un figlio della pagina né di un controllo figlio della pagina. Un modo più pratico di scorrere in ciclo i controlli consiste nel creare un metodo ricorsivo che possa essere chiamato per scorrere in ciclo l'insieme Controls di ogni controllo che viene via via rilevato. Nell'esempio riportato di seguito, tuttavia, per chiarezza, non si utilizza una funzione ricorsiva.

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

Vedere anche

Concetti

Identificazione di controlli Web Form