Reutilizando controles no VB


Muitas vezes sem perceber estamos reescrevendo código já escrito ou criando um formulário ou um controle que já utilizamos em nosso projeto. Será que podemos aproveitar os controles já usados , evitando assim desperdício de código e consequentemente aumento no tempo de execução do nosso projeto ?

Antes da parte prática vamos a um pouco de teoria.

Usando Classes

Inicie um novo projeto no VB e crie um formulário com o seguinte aparência:

Nosso projeto possue somente um formulário o qual chamamos de frmprincipal e o seguintes controles:

1- Uma caixa de texto - text1 - com a propriedade text definida como - Form Inicial

2- Dois botões de comandos : Command1-> Criar um novo Formulário Command2 - Sair

No evento Click do botão de comando command1 (Criar um novo Formulário), insira o seguinte código:

Private Sub Command1_Click()
Dim frmnovo As New frmprincipal
Static numero As Integer

  numero = numero + 1
  
  frmnovo.Caption = "Formulário : " & numero
  frmnovo.BackColor = QBColor(numero)
  frmnovo.Text1 = numero
  frmnovo.Show
  frmnovo.Command1.Caption = " Criei o Form : " & numero

End Sub

No evento click do botão de comando - Command2 (Sair) , digite o seguinte código:

Private Sub Command2_Click()
   Unload Me
End Sub

Agora execute o projeto e clique três vezes no botão de comando - Criar um novo Formulário. Você deve obter algo como a figura abaixo.

Espantou-se !!! Voce acabou de criar três novos formulários com os mesmos controles usados no formulário original mas com propriedades diferentes. Como ? Vamos explicar o código que usamos para fazer essa "mágica".

Cada vez que clicamos no botão - Criar um novo Formulario - do formulario principal executamos o código associado ao botão , vamos analisá-lo:

1-) Dim frmnovo As New frmprincipal

Aqui definimos uma variável frmnovo do tipo frmprincipal como uma nova instância de frmprincipal. Lembre-se que frmprincipal é o nome do nosso formulário , então cada vez que clicamos no botão vamos criar uma nova instância do objeto frmprincial (que é um formulário), ou seja, criamos uma 'cópia' do formulário frmprincipal, como você pode ter percebido.

2-) numero = numero + 1
frmnovo.Caption = "Formulário : " & numero
frmnovo.BackColor = QBColor(numero)
frmnovo.Text1 = numero
frmnovo.Show
frmnovo.Command1.Caption = " Criei o Form : " & numero


Este código define novas propriedades para cada formulário que é criado como uma instância do formulário principal alterando assim sua aparência. Se você alterar o conteúdo da caixa de texto de um dos formulário vai perceber que os demais permanecem inalterados, indicando que as instâncias criadas são independentes umas das outras.

Usando Coleções

Uma Coleção é um grupamento de itens relacionados. Temos assim uma coleção de formulários , de controles , etc.. Além disto temos uma classe genérica de coleção com a qual podemos definir nossas próprias coleções - a classe Collection

Cada formulário em nossa aplicação possui uma coleção de controles embutida , e , você pode usar a coleção de controles em tempo de execução para ter acesso aos controles em um formulário sem precisar saber o nome de cada controle ou mesmo o tipo do controle. Tudo já esta pronto , você não precisar declarar nada , pois o VB monta e mantêm a coleção enquanto você desenha o formulário : incluindo e/ou excluindo controles do mesmo.

Aonde você pode usar toda esta teoria ??? Bem , que tal na entrada de dados usando formulários !!! Assim você pode escrever uma rotina genérica que pesquise a coleção de controles procurando por controles relacionados com os dados que você quer usar e alterar suas propriedades.

Você pode acessar a coleção de controles através da propriedade Controls de um formulário. Esta propriedade é um vetor (array) de variáveis objeto , onde cada elemento do vetor é um controle; o elemento 0 é o primeiro controle , o elemento 1 , o segundo , e por ai vai...

Assim se tivermos duas caixas de texto  (TextBox) teremos:

Form1.Controls(0).text = " Controle 0 "

Form1.Controls(1).text = " Controle 1 "

Identificando controles em um formulário

Uma coleção de controles possui a propriedade Count , que permite saber quantos controles existem no formulário. (lembre-se  a coleção começa no elemento 0 ). O chato é que não tem jeito de saber que controle corresponde a qual número. A única forma de identificar um número específico em uma coleção e usar o método TypeOf

Usamos o método TypeOf para tratar grupos de controles do mesmo tipo.  Vejamos um exemplo:

Sub Limpa_Controles(Formulario as Form)
     for i=0 To Formulario.Controls.Count - 1
           if TypeOf Formulario.Controls(i) is TextBox then
                  Formulario.Controls(i).Text = ""
           endif
     next
End Sub

Este pequeno trecho de código atribui à propriedade Text de cada controle TextBox do formulário o valor vazio ( "" ), limpando assim esses controles. Note que da propriedade Count subtraímos um , pois nosso contador começa no zero.

Além da propriedade Count , temos o método  Add (adiciona um item) , o método Item (retorna um ítem por índice) ,e o método Remove para remover um item da coleção. Usando este arsenal podemos realizar operações básicas com coleções. 

 

este artigo vai continuar...