Sandro Bizioli


Chi sogna di giorno conosce molte cose che sfuggono a chi sogna soltanto di notte. (E.A.Poe)
Mappa

Ottenere l'elenco dei controlli di un contenitore

Qui di seguito una semplice funzione che permette di recuperare tutti i controlli contenuti in un determinato contenitore.
Il risultato della funzione sarà un array dei controlli contenuti in un determinato contenitore. Nel caso in cui uno dei controlli sia lui stesso un contenitore, quindi che la collection .controls non sia vuota, di default la funzione procederà in modo ricursivo all'interno della collection stessa.
La funziona richiede il parametro obbligatorio myCont che, ovviamente, rappresenta il contenitore su cui effettuare la ricerca, form compreso.
Il parametro IncludeSubContainer, se impostato a False, permetterà di recuperare solo i controlli direttamente contenuti nel contenitore e non l'intero insieme. Di default il suo valore è True.
Ultimo parametro è l'array di controlli ctr() che viene utilizzato per iterare all'interno di subControls, ma che permette anche di poter ottenere un array di controlli da due o più contenitori, come spiegato nell'esempio n.2.

Friend Function getControls(ByRef myCont As Control, Optional ByVal IncludeSubContainer As Boolean = True, Optional ByRef ctr() As Control = Nothing) As Control()
        '***********************************************************************************
        'Func.: getControl (Creazione SB 20080707; Mod.:             )
        'Desc.: Restituisce un array dei controlli contenuti in un determinato contenitore
        '      
        'Par. : myCont          Control rappresentante il contenitore da cui partire a ricercare.
        '[IncludeSubContainer]  Opzionale. Boolean indicante se si vuole procedere in modo ricursivo all'interno
        '                       di tutti i controlli contenitore a partite da myCont.
        '[ctr()]                Opzionale. Array di controlli già esistente.
        'Ret. : Control()       Array di controlli
        '***********************************************************************************

        For Each obj As Control In myCont.Controls
            If obj.Controls.Count > 0 AndAlso IncludeSubContainer Then
                Call getControls(myCont:=obj, ctr:=ctr)
            End If
            If ctr Is Nothing Then
                ReDim ctr(0)
            Else
                ReDim Preserve ctr(UBound(ctr) + 1)
            End If
            ctr(UBound(ctr)) = obj
        Next
        Return ctr

    End Function

    '
    '
Esempio n.1
    ' Scorro tutti i controlli contenuti nel form e ne riporto il nome e il nome del proprio parent all'interno di TextBox1
    ' 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = ""
        For Each ctr As Control In getControls(Me)
            TextBox1.Text = String.Concat(TextBox1.Text, ctr.Name, "-", ctr.Parent.Name, vbCrLf)
        Next
    End Sub

    '
    '
Esempio n.2
    ' Vengono restituiti i controlli appartenenti a due contenitori e più precisamente di un ipotetico TabControl e di un Panel
    ' 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim theCtr() As Control = Nothing
        theCtr = getControls(TabControl1, False)
        theCtr = getControls(Panel1, False, theCtr)

        TextBox1.Text = ""
        For Each ctr As Control In theCtr
            TextBox1.Text = String.Concat(TextBox1.Text, ctr.Name, "-", ctr.Parent.Name, vbCrLf)
        Next
    End Sub

Categoria: VB.Net
martedì, 08 lug 2008 Ore. 17.18
Statistiche
  • Views Home Page: 111.256
  • Views Posts: 567.046
  • Views Gallerie: 115.817
  • n° Posts: 227
  • n° Commenti: 222
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003