VB - Usando Coleções


Podemos definir coleção como um agrupamento de itens relacionados. O VB está cheio de coleções , e mesmo sem ter percebido você já deve ter usado coleções no VB.

As coleções são usadas para que possamos localizar elementos de um determinado grupo. Os formulários lidos em um programa estão na coleção de formulários - Forms , os registros de um recordset lidos estão na coleção de campos- Fields , os controles de um formulário estão na coleção controles - Controls.

Além destas coleções que eu citei acima - Forms , Controls e Fields - existe uma classe genérica de coleção para a definição de nossas próprias coleções; estou falando da classe Collection . È através desta classe que podemos criar muitos objetos de coleção , usando a terminologia da orientação a objeto , dizemos que podemos criar instâncias da classe Collection.

A classe Collection nos permite referenciar um grupo relacionado de itens como um simples objeto.

Para criar uma instância de um objeto do tipo Collection basta usar o código :

Dim Nome_do_Objeto As New Collection

Em seguida temos acesso aos quatro métodos oferecidos pela classe Collection : Add , Count , Item e Remove.

Abaixo temos um exemplo de código onde estou usando o método Add para incluir itens na em uma coleção e em seguida estou exibindo os valores incluídos. Perceba que o método Add permite a inclusão de um item com uma chave associada. Esta chave é usada para localizar e imprimir os itens.

Dim obj As New Collection

Dim Codigo As String
Dim Nome As String
Dim i As Integer

For i = 0 To 5
   Codigo = InputBox("Informe o código :")
   Nome = InputBox("Informe o nome: ")


   obj.Add Item:=Nome, Key:=Codigo

Next
For i = 1 To 6
   Debug.Print obj.Item(i)
Next

Ao declararmos Dim Obj As New Collection a palavra-chave New faz com que o objeto de coleção seja criado na primeira vez em que for referenciado no código. No caso estou declarando a variável obj como sendo do tipo Collection.

Vamos mostrar um exemplo prático do uso de coleções usando formulários. 

Vamos criar um novo projeto no VB 6.0 do tipo STANDARD e incluir mais dois formulários além do formulário padrão form1. Teremos então 3 formulários : Form1 , Form2 e Form3,

Inclua também uma caixa de combinação - combo1 - a inclua na combo o nome dos dois formulários : Form2 e Form3.

Finalmente inclua um botão de comando - Exibir Formulário - que será usado para exibir o formulário selecionado na combo.

Na seção General Declarations do formulário Form1 inclua o código abaixo onde declaramos o objeto do tipo Collection:

Option Explicit
'declara o objeto FormObjects como uma variável do tipo Collection
Private FormObjects As New Collection

Agora no evento Load do formulário Form1 inclua o código abaixo onde preenchemos a combo e a coleção com o nome dos formulários Form2 e Form3.

' Carrega a coleção com os objetos formularios usando seus nomes como chave
Private Sub Form_Load()

    'inclui na combo o nome dos formulários
    Combo1.AddItem "Form2"
    Combo1.AddItem "Form3"
    Combo1.ListIndex = 0

    'incluimos na coleção os itens e a chave
    FormObjects.Add Form2, "Form2"
    FormObjects.Add Form3, "Form3"

End Sub

Para encerrar no evento Click do botão de comando temos o código a seguir onde atribuímos o nome do formulário selecionado na combo a variável frm que é do tipo coleção Form.

Ao fazermos frm.Show será exibido o formulário cujo nome foi atribuído no código:   Set frm = FormObjects(Combo1.Text)  

' Exibe o formulário de acordo com o nome na coleção
Private Sub cmdExibeFormulario_Click()
    Dim frm As Form
    On Error Resume Next    
    Set frm = FormObjects(Combo1.Text)   
    If Err.Number Then
        MsgBox "Nome do formulário desconhecido"
        Exit Sub
    End If

    On Error GoTo 0   
    frm.Show
End Sub

O resultado pode ser visto na figura abaixo:

Com isto estou carregando formulários com base no seu  nome. Sacou ...

Para descarregar todos os formulário carregados também usamos a coleção Forms. Se você quiser implementar este recurso o código é o seguinte:

' Descarrega todos os formularios
Private Sub Form_Unload(Cancel As Integer)

Dim frm As Form

   'para cada objeto frm na coleção Forms
    For Each frm In Forms
        Unload frm
    Next frm

End Sub

 Aqui percorremos a coleção usando For/Each.

Dica : Podemos usar as coleções para simplificar nosso código. Por exemplo , para limpar todos os controles TextBox de um formulário , ao invés de atribuímos a cada um valor vazio (TextBox1.text="" , TextBox2.text="" , etc.) Podemos percorrer a coleção Controls do formulário verificando o tipo de controle ; se ele for do tipo TextBox limpamos o dito cujo. O código pode ser assim escrito:

Sub limpaControles(frm As Form)
   
 For i = 0 To frm.Controls.Count - 1
       If TypeOf frm.Controls(i) Is TextBox Then
          frm.Controls(i).Text = ""
        End If
 Next

End Sub

Até mais ver ...


José Carlos Macoratti

1