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