Introdução
Para os programadores que conhecem o VB6, as coleções de controle eram muito fáceis, bastava criar controles com o mesmo nome, mas com um índice diferente.
VB.Net e BG decidiram complicar a coisa, estas coleções não existem mais, pelo menos, tão fácil assim.
Por conseguinte, é necessário desenvolver truques para superar essa carência, mas não se preocupe, tudo é possível com o VB.Net.
Podemos considerar que todos os controles de uma forma já fazem parte de uma coleção... e, a partir daí, identificá-los!
Podemos rever todos os "controles" que constituem o design da forma,
A dificuldade é que cada controle tem suas próprias propriedades.
Essa primeira abordagem nos permitirá tratar das propriedades de vários controles de tipos diferentes, com algumas linhas de código em uma única "sub".
Preliminares
- Abrir um novo projeto Windows Form
- Colar 4 textBox e colocar suas propriedades Tag (marcação) em, respectivamente, 1, 2, 3 et 4
- Colar 6 PictureBox e colocar suas propriedades Tag (marcação) em, respectivamente, 1, 2, ...6
- Colar 2 Botões
O código
O código se divide em duas « subs » para uma melhor compreensão, mas poderia ser realizado em apenas uma.
Se você quiser, você pode liberar as duas linhas Img.image = ...
As imagens estão no zip.
'==============================================================
'Na forma,
'4 TextBox propriedade Tag de 1 à 4
'6 PictureBox propriedade Tag de 1 à 6
'==============================================================
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
InitPic()
InitText()
End Sub
Sub InitText()
Dim Ctl As Control
Dim Txt As TextBox
Static NbAlea As Integer
NbAlea += 1 : If NbAlea > 4 Then NbAlea = 1
For Each Ctl In Me.Controls 'loop sobre todos os controles da forma
If TypeOf Ctl Is TextBox Then 'Verifique se é um textbox
Txt = Ctl
If Txt.Tag = NbAlea Then
'Se só tiver TextBox na forma, não á necessário
'passar por uma variável buffer
Txt.Text = "é o TextBox : " & Txt.Name
Txt.BackColor = Color.Fuchsia
Else
Txt.Text = ""
Txt.BackColor = Color.Empty
End If
End If
Next
End Sub
Sub InitPic()
Dim Pic As Control
Dim Img As PictureBox
Static NbAlea As Integer
NbAlea += 1 : If NbAlea > 6 Then NbAlea = 1
'Se só tiver pictureBox na forma, não é necessário
'passer por uma variável buffer
For Each Pic In Me.Controls 'loop sobre todos os controles da forma
If TypeOf Pic Is PictureBox Then
Img = Pic
If Pic.Tag = NbAlea Then
Img.BackColor = Color.Aquamarine
Img.BorderStyle = BorderStyle.Fixed3D
'Img.Image = System.Drawing.Bitmap.FromFile(My.Application.Info.DirectoryPath & "\bt" & NbAlea & ".bmp")
'Img.SizeMode = PictureBoxSizeMode.StretchImage
Else
Img.BackColor = Color.Chocolate
Img.BorderStyle = BorderStyle.FixedSingle
End If
End If
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
InitText()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
InitPic()
End Sub
End Class
Download
O projeto Zip
Não esqueça de descompactar o arquivo Zip.