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.