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...