Condividi tramite


Insieme Controls per gli utenti di Visual Basic 6.0

Aggiornamento: novembre 2007

L'insieme Controls di Visual Basic 6.0 è stato sostituito in Visual Basic 2008 dalla classe Control.ControlCollection.

Differenze concettuali

In Visual Basic 6.0 Controls è un insieme i cui elementi rappresentano i controlli di un form o di un controllo contenitore.

In Visual Basic 2008 la classe Control.ControlCollection sostituisce l'insieme Controls. Per i form è presente una classe Control.ControlCollection predefinita, cui è possibile accedere utilizzando la sintassi Me.Controls.

Metodo Add

In Visual Basic 6.0 il metodo dell’insieme Add dell'insieme Controls è ad associazione tardiva; i controlli sono creati nel metodo Add specificando la classe Control come argomento.

In Visual Basic 2008 il metodo Add della classe Control.ControlCollection richiede che i controlli siano creati utilizzando la parola chiave New prima che la classe sia aggiunta all'insieme.

Metodo Remove

Il metodo Remove dell'insieme Controls di Visual Basic 6.0 poteva essere utilizzato solo per i controlli aggiunti mediante il metodo Add; la classe Control.ControlCollection di Visual Basic 2008, invece, non presenta questa restrizione.

Controlli Timer e Menu

In Visual Basic 6.0 i controlli Timer e Menu sono membri dell'insieme Controls. In Visual Basic 2008 questi controlli sono sostituiti dai componenti Timer e MainMenu o dal componente ContextMenu; i componenti non sono membri della classe Control.ControlCollection.

Controlli contenuti

L'insieme Controls di Visual Basic 6.0 include dei controlli figlio di un controllo contenitore, ad esempio controlli situati in un controllo Frame; questo non avviene con la classe Control.ControlCollection di Visual Basic 2008. Per scorrere tutti i controlli di un form è necessario effettuare iterazioni ricorsive sulla classe Controls di ogni controllo contenitore.

Modifiche del codice per l'insieme Controls

Nell'esempio riportato di seguito vengono illustrate le differenze nelle tecniche di codifica tra Visual Basic 6.0 e Visual Basic 2008.

Modifiche del codice per aggiungere e rimuovere controlli

Nel codice riportato di seguito vengono illustrate le differenze tra l'insieme Controls di Visual Basic 6.0 e la classe Control.ControlCollection di Visual Basic 2008.

' Visual Basic 6.0
Private Sub Command1_Click()
    ' Declare a new Control variable.
    Dim c As Control
    ' Create and add the new control.
    Set c = Controls.Add("VB.TextBox", "Text1")
    ' Make the new control visible.
    c.Visible = True
    ' Set the initial text.
    c.Text = "Hello"
    ' Retrieve the text from the new TextBox.
    If Controls.Count > 1 Then
        MsgBox (Controls("Text1").Text)
    End If
    ' Remove the new control.
    Controls.Remove (Text1)
    ' The following line causes a compilation error.
    ' You cannot remove controls added at design time.
    Controls.Remove (Command1)
End Sub
' Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ' Create a new TextBox control.
    Dim TextBox1 As New System.Windows.Forms.TextBox
    TextBox1.Name = "TextBox1"
    ' Add the new control to the form's Controls collection.
    Me.Controls.Add(TextBox1)
    ' No need to set Visible property.
    ' Set the initial text.
    TextBox1.Text = "Hello"
    ' Retrieve the text from the new TextBox.
    If Me.Controls.Count > 1 Then
        MsgBox(Me.Controls("TextBox1").Text)
    End If
    ' Remove the new control.
    Me.Controls.Remove(TextBox1)
    ' Remove the control added at design time.
    Me.Controls.Remove(Button1)
End Sub

Modifiche del codice per scorrere l'insieme Controls

Nel seguente esempio di codice viene mostrata una funzione per scorrere tutti i controlli di un form al fine di eliminare tutti i controlli CheckBox. In questo esempio si presume che i controlli CheckBox siano situati nei controlli GroupBox o Panel anziché sul form. Nell'esempio relativo a Visual Basic 2008 poiché l'insieme Controls del form contiene esclusivamente controlli situati direttamente nel form stesso, la funzione chiama se stessa in maniera ricorsiva per tutti i controlli dotati di elementi figlio.

' Visual Basic 6.0
Private Sub ClearChecks()
    For Each Control in Me.Controls
        If TypeOf Control Is CheckBox Then
            Control.Value = vbUnchecked
        End If
    Next
End Sub
' Visual Basic
Private Sub ClearChecks(ByVal Container As Control)
    Dim ctl As Control
    Dim chk As CheckBox
    For Each ctl In Container.Controls
        If TypeOf ctl Is CheckBox Then
            chk = ctl
            chk.Checked = False
        End If
        ' Recursively call this function for any container controls.
        If ctl.HasChildren Then
            ClearChecks(ctl)
        End If
    Next
End Sub

Note sull'aggiornamento

A causa delle differenze tra gli insiemi di Visual Basic 6.0 e gli insiemi Visual Basic 2008Controls, le chiamate ai metodi Add non vengono aggiornate. Per ricreare il comportamento dell'applicazione, è necessario aggiungere del codice utilizzando il nuovo metodo Add.

Vedere anche

Riferimenti

Control.Controls

Form.ControlCollection