Coleção controles para usuários do Visual Basic 6.0
O Visual Basic 6.0 Controls coleção é substituída pelo Control.ControlCollection classe na Visual Basic 2008.
Diferenças Conceituais
No Visual Basic 6.0, a Controls coleção é uma coleção com elementos que representam o s controle em um formulário ou container controle.
In Visual Basic 2008, o Control.ControlCollection classe substitui o Controls coleção. Os formulários têm um padrão de Control.ControlCollection classe que pode ser acessado usando a sintaxe Me.Controls.
Método Add
In Visual Basic 6.0, o Add método para o Controls coleção é limite de forma tardia; controles são criados no Add método, especificando o Control classe sistema autônomo um argumento.
In Visual Basic 2008, o Add método para o Control.ControlCollection classe requer que os controles tenham sido criados usando o New palavra-chave antes de serem adicionados à coleção.
Método Remove
The Remove method of the Visual Basic 6.0 Controls collection could only be used for controls that were added using the Add method; the Visual Basic 2008 Control.ControlCollection class does not have this restriction.
Timer e Controles de Menu
In Visual Basic 6.0, o Timer e Menu controles são membros das Controls coleção. In Visual Basic 2008, esses controles são substituídos pela Timer e MainMenu ou ContextMenu componentes; componentes não são membros do Control.ControlCollection classe.
Controles contidos
The Visual Basic 6.0 Controls collection includes controls that are children of a container control (for example, controls sited on a Frame control); the Visual Basic 2008 Control.ControlCollection class does not.Para iterar em todos os controles em um formulário, você deve recursivamente iterar a Controls classe de cada controle de contêiner.
Alterações código para a coleção Controls
Os exemplos a seguir ilustram as diferenças na codificação técnicas entre o Visual Basic 6.0 e Visual Basic 2008.
Alterações código para adicionar remover controles
The following code illustrates differences between the Visual Basic 6.0 Controls collection and the Visual Basic 2008 Control.ControlCollection class.
' 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
Alterações código para iterar através da coleção Controls
O código a seguir ilustra uma função para iterar em todos os controles em um formulário e então desmarcando todos os CheckBox controles. Este exemplo assume que o CheckBox controles estão situados em GroupBox ou Panel controles em vez de no formulário. No Visual Basic 2008 exemplo, desde que o formulário Controls coleção inclui somente controles situados diretamente no formulário, a função recursivamente chama a própria para qualquer controle que possui filhos.
' 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
Observações de Atualização
Because of differences between Visual Basic 6.0 and the Visual Basic 2008 Controls collections, calls to the Add method are not upgraded.Você deve adicionar código para recriar o comportamento do seu aplicativo usando o novo Add método.