Controle de matrizes para usuários do Visual Basic 6.0

Embora controle arrays não sejam suportadas em Visual Basic 2008, usando o modelo de evento pode duplicar e expandir para grande parte da funcionalidade de matriz de controle.

Diferenças Conceituais

No Visual Basic 6.0, matrizes de controle podem ser usadas para gerenciar os controles em um formulário; eles fornecidos recursos para o compartilhamento evento manipuladores, iterando através de grupos de controles e adicionar controles em time de execução.

In Visual Basic 2008, não há mais suporte para matrizes de controle. As alterações o modelo de evento tornam o e controle arrays desnecessários.NET Framework fornece os mesmos recursos para trabalhar com controles.

Compartilhamento evento manipuladores

No Visual Basic 6.0, matrizes de controle podem ser usadas para especificar um agrupar de controles um conjunto de eventos compartilhado.Os controles tinham de ser do mesmo tipo e eles precisavam ter o mesmo nome.

Visual Basic 2008 permite que qualquer manipulador de eventos para manipular eventos a partir de vários controles, mesmo que controles com nomes diferentes e tipos diferentes.

Por exemplo, você pode adicionar dois Button controles (Button1 e Button2) e um CheckBox controle (CheckBox1) a um formulário e, em seguida, crie um manipulador de eventos para manipular o Click evento para todos os três controle s.

Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click

Fazendo a iteração por meio de controles

Outro recurso de matrizes de controle do Visual Basic 6.0 foi a capacidade para iterar por meio de um agrupar de controles usando o Index propriedade. Por exemplo, para desmarcar o texto de todos sistema autônomo TextBox controles em uma matriz de controle, você pode percorrer a matriz de controle usando o Índicepropriedade sistema autônomo uma variável de loop.

Visual Basic 2008 controles não têm um Index propriedade, mas você ainda pode iterar através dos controles em um formulário ou contêiner usando o Control.ControlCollection da Control classe.

No Visual Basic 6.0, controles em uma matriz de controle único podem ser localizados em diferentes recipientes.Por exemplo, TextBox controles contidos em dois diferentes Frame controles podem ser parte do mesmo conjunto de controle.

In Visual Basic 2008, o Controls coleção retorna apenas controles localizados em um único contêiner. Você deve iterar em controles de cada controle de contêiner separadamente; isso pode ser concluído usando uma função recursiva.

Adicionando controles em time de execução

No Visual Basic 6.0, controle s pôde ser adicionado a um controle matriz no time de execução usando o Load demonstrativo. sistema autônomo controles tinham ser do mesmo tipo de matriz de controles e matriz de controles teve que ser criado em time de design com em lest um elemento.Depois de adicionar o controle, a Visible propriedade tinha que ser definida True.

In Visual Basic 2008, controles são adicionados em time de execução usando o New palavra-chave em um Dim demonstrativo, em seguida, usando o Add método para o contêiner em que você deseja adicionar o controle.

Adicionando manipuladores de evento em time de execução

No Visual Basic 6.0, quando você adicionou um controle em uma matriz de controle em time de execução, os novos eventos de controles foram automaticamente tratados pelos eventos para a matriz de controle.

In Visual Basic 2008, você precisará definir evento manipuladores para os controles adicionados em time de execução. Isso é realizado usando o AddHandler demonstrativo.

Alterações código para controle Arrays

O código a seguir ilustra as diferenças na codificação técnicas entre o Visual Basic 6.0 e Visual Basic 2008.

Compartilhamento evento manipuladores

O exemplo a seguir demonstra o compartilhandoChange evento manipulador ()TextChanged em Visual Basic 2008) para um agrupar de três TextBox controles. In Visual Basic 2008, o Handles cláusula do manipulador de eventos especifica qual controle manipulará o evento. O manipulador de eventos retorna um genérico Object, para que ele deve ser converter para o tipo de objeto específico (neste caso, TextBox) que você deseja manipular usando o DirectCast método.

' Visual Basic 6.0

Private Sub Text1_Change(Index As Integer)

Select Case Index

Case 0

MsgBox("The text in the first TextBox has changed")

Case 1

MsgBox("The text in the second TextBox has changed")

Case 2

MsgBox("The text in the third TextBox has changed")

End Select

End Sub

' Visual Basic
Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _
TextBox2.TextChanged, TextBox3.TextChanged
    Select Case DirectCast(sender, TextBox).Name
        Case TextBox1.Name
            MsgBox("The text in the first TextBox has changed")
        Case TextBox2.Name
            MsgBox("The text in the second TextBox has changed")
        Case TextBox3.Name
            MsgBox("The text in the third TextBox has changed")
    End Select
End Sub
Observação:

O comportamento do evento é um pouco diferente em Visual Basic 2008.The TextChanged evento é disparado quando inicializar cada controle (por exemplo, na Form_Load evento), bem sistema autônomo quando o texto é alterado em time de execução. No Visual Basic 6.0, a Change evento era habilitado apenas quando o texto foi alterado.

Fazendo a iteração por meio de controles

O exemplo a seguir demonstra uma função para iterar em um agrupar de controles de caixa de texto e limpar o texto.No exemplo do Visual Basic 6.0, a Index propriedade de uma matriz de controle é usada sistema autônomo uma variável loop.

In Visual Basic 2008, um Control objeto é passado sistema autônomo um argumento; ele tem um Control.ControlCollection coleção que inclui todos sistema autônomo controles localizados em que o controle. The Typeof operador é usado para determinar se cada controle é do tipo TextBox.

Observação:

A Form o objeto é do tipo Control; Você também pode passar um Form sistema autônomo um argumento.

Porque controles aninhados não são incluídos no Control.ControlCollection coleção, o HasChildren método é usado para determinar se cada controle contém outros controles, nesse caso o ClearText função é chamada recursivamente.

' Visual Basic 6.0

Private Sub ClearText()

For i = 0 To Text1().UBound

Text1(i).Text = ""

Next

End Sub

' Visual Basic
Private Sub ClearText(ByVal container As Control)
    Dim ctrl As Control
    For Each ctrl In container.Controls
        If TypeOf (ctrl) Is TextBox Then
            ctrl.Text = ""
        End If
        If ctrl.HasChildren Then
             ClearText(ctrl)
        End If
    Next
End Sub

Adicionando controles em time de execução

O exemplo a seguir demonstra como adicionar um controle caixa de texto a um formulário em time de execução.No Visual Basic 6.0, o controle é adicionado a uma matriz de controle.In Visual Basic 2008 o controle é adicionado para o Control.ControlCollection coleção. No Visual Basic 6.0, eventos para o novo TextBox foram manipuladas automaticamente pelo array de controle. In Visual Basic 2008, você precisará ligar evento manipulação por meio do AddHandler demonstrativo.

Ambos os exemplos pressupõem que um controle caixa de texto é adicionado ao formulário em time de design e no exemplo do Visual Basic 6.0 que controlam um elemento único array foi criado.The Visual Basic 2008 exemplo também pressupõe que uma evento manipulador chamado TextChangedHandler existe para o primeiro TextBox controle.

' Visual Basic 6.0

Private Sub AddControl()

' Add a TextBox as the second element of a control array.

Load Text1(1)

' Set the location below the first TextBox.

Text1(1).Move Text1(0).Left, Text1(0).Top + 500

' Make the new TextBox visible

Text1(1).Visible = True

' Visual Basic
' Declare a new TextBox.
Dim TextBox2 As New TextBox
' Set the location below the first TextBox
TextBox2.Left = TextBox1.Left
TextBox2.Top = TextBox1.Top + 30
' Add the TextBox to the form's Controls collection.
Me.Controls.Add(TextBox2)
AddHandler TextBox2.TextChanged, AddressOf TextChangedHandler

Observações de Atualização

Quando um aplicativo criado com Visual Basic 6.0 é atualizado para Visual Basic 2008, todos os arrays controle são atualizados para classes da matriz de controle especiais de controle específico. Essas classes estão contidas no Microsoft.VisualBasic.Compatibility.VB6 namespace e são usadas pelas ferramentas de atualização para emular o Visual Basic 6.0 controlar o comportamento de array.

Embora seja possível usar essas classes de matriz de controle no novo Visual Basic 2008 desenvolvimento, recomendamos que você use o .NET Framework modelo de eventos e funções em vez disso.

Consulte também

Conceitos

Eventos e Manipulação de Eventos para Usuários do Visual Basic 6.0

Outros recursos

Controles Windows Forms para Usuários do Visual Basic 6.0