Visual Basic .NET - Implementando um array de controles


Vamos voltar um pouco no tempo...

Nos áureos tempo do Visual Basic 6, quando você incluía um controle a partir da ToolBox no formulário, um controle Command1 por exemplo, e em seguida copiava (CTRL+C) e colava(CTRL+V) esse controle no mesmo formulário, o VB6 lhe dava a seguinte mensagem: "You Already have a control Command1:Do you want to create a control array ?" (Você já tem um controle Command1: Você quer criar um array de controle ?)

Ao clicar na opção Sim ou Yes seria criado outro controle Command1 no formulário identificado pelo índice 1 e você teria dois controles Command1 : Command1(0) e Command1(1)

Assim para manipular eventos desses controles você teria o seguinte código gerado pelo VB6 para o evento Click:

Para se referenciar para um membro do array de controle usávamos a seguinte sintaxe:  ControlName(Index)[.Property]

Dessa forma podíamos ter um array de controles para o controle TextBox identificado com o nome txtValor, e para se referir a propriedade Text de cada um dos elementos TextBox do array usávamos o seguinte código:

txtField(0).Text
txtField(1).Text
...

Dessa forma ficava muito fácil gerenciar o mesmo evento para diversos controles do mesmo tipo. Além disso usar esse recurso também trás as seguintes vantagens:

Bons tempos...

Infelizmente o VB.NET não suporta o recurso de criar um array de controles da mesma forma que o VB6 fazia.

Mas não se desespere...

Podemos contornar esse problema facilmente, e, neste artigo, eu vou mostrar uma das maneiras de fazer isso. Note que eu disse "uma das maneiras maneiras...", pois existem outras, mas creio que essa seja bem simples de implementar.

Para implementar um array de controles basta você declarar um array do tipo de controle que deseja usar e definir cada elemento do array com o nome do controle existente no formulário.

Exemplo: Criar um array de controles para 3 controles TextBox - TextBox1, TextBox2 e TextBox3

Dim txtExemplo() As TextBox = New TextBox() { TextBox1, TextBox2, TextBox3 }

Depois para acessar as propriedades de cada controle podemos usar um laço for/next :

for i as Integer = 0 to txtExemplo.Length -1
         txtExemplo(i). Text = " Valor do controle TextBox" & i
next

Criando um exemplo prático

Vamos abrir o Visual Studio 2012 Express for Windows Desktop e clicar em New Project;

Selecione o template Windows Forms Application e informe o nome ArrayControlesVBNET;

A seguir inclua no formulário padrão form1.vb os seguintes controles:

Disponha os controles conforme o leiaute da figura abaixo:

Agora vamos implementar o array de controles para o controle TextBox e usar o array para atribuir valores para o controles via propriedade Text.

No evento Click do botão de comando Button1 inclua o código abaixo:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        'implementa o array de controle para 3 controles TextBox
        Dim txtExemplo() As TextBox = New TextBox() {TextBox1, TextBox2, TextBox3}

        'percorre o array e atribui valores aos controles
        For i As Integer = 0 To txtExemplo.Length - 1
            txtExemplo(i).Text = " Valor do controle TextBox" & i + 1
        Next
    End Sub

Executando o projeto iremos obter o resultado abaixo:

Dessa forma, se você nomear seus controles de forma consistente, você pode localizá-los pelo nome na coleção Controls do formulário.

No exemplo acima temos 3  caixas de texto chamadas TextBox1, TextBox2 e TextBox3, vamos inclui outro controle Button(Button2) e usar o código abaixo no evento Click deste botão para localizar os controles e atribuir valores a eles usando sua propriedade Text:

 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        For i As Integer = 1 To 3
            Dim t As TextBox = CType(Me.Controls("TextBox" & i.ToString()), TextBox)
            t.Text = "valor " & i
        Next
 End Sub

Executando o projeto e clicando no Button2 teremos:

No artigo onde apresentei a aplicação para gerenciar os jogos da copa do mundo de 2014 eu utilizo esse recurso criando arrays de controles para Labels, PictureBox, TextBox. Abaixo temos o código usado na declaração dos arrays:

Dim lblDatas() As Label = New Label() {lblData1, lblData2, lblData3, lblData4, lblData5, lblData6}
Dim lblHoras() As Label = New Label() {lblHora1, lblHora2, lblHora3, lblHora4, lblHora5, lblHora6}
Dim lblSelecoes1() As Label = New Label() {lblSelecao11, lblSelecao12, lblSelecao13, lblSelecao14, lblSelecao15, lblSelecao16}
Dim picBandeiras1() As PictureBox = New PictureBox() {picBandeiraSelecao11, picBandeiraSelecao12, picBandeiraSelecao13, picBandeiraSelecao14, picBandeiraSelecao15, picBandeiraSelecao16}
Dim txtGol1s() As TextBox = New TextBox() {txtGol11, txtGol12, txtGol13, txtGol14, txtGol15, txtGol16}
Dim txtGol2s() As TextBox = New TextBox() {txtGol21, txtGol22, txtGol23, txtGol24, txtGol25, txtGol26}
Dim picBandeiras2() As PictureBox = New PictureBox() {picBandeiraSelecao21, picBandeiraSelecao22, picBandeiraSelecao23, picBandeiraSelecao24, picBandeiraSelecao25, picBandeiraSelecao26}
Dim lblSelecoes2() As Label = New Label() {lblSelecao21, lblSelecao22, lblSelecao23, lblSelecao24, lblSelecao25, lblSelecao26}

Espero que agora você seja capaz de usar o recurso de array de controles em uma aplicação VB .NET se precisar.

Ficamos por aqui ...  

João 1:1 No princípio era o Verbo, e o Verbo estava com Deus, e o Verbo era Deus.

João 1:2 Ele estava no princípio com Deus.

João 1:3 Todas as coisas foram feitas por intermédio dele, e sem ele nada do que foi feito se fez.

João 1:4 Nele estava a vida, e a vida era a luz dos homens;

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti