VB.net - Remplacer les index des contrôles d'une form
Introduction
Pour les programmeurs qui connaissent VB6 les collections de contrôles étaient on ne peut plus facile. En effet, il suffisait de créer des contrôles avec le même nom mais avec un index différent.
En VB.Net Bill Gates a décidé de nous compliquer la vie : ces collections n'existent plus, du moins pas aussi facilement.
Il est donc nécessaire de développer des astuces pour palier ce manque. Mais ne vous en faites pas, tout est possible avec VB.Net !
Nous pouvons considérer que tous les contrôles d'une forme font déjà partie d'une collection, ... de là à les identifier !
Nous pouvons passer en revue tous les "contrôles" qui constituent le design de la forme,
la difficulté est que chaque contrôle a ses propres propriétés.
Cette première approche nous permettra de traiter les propriétés de plusieurs contrôles de différents types avec quelques lignes de code dans une seule "sub".
Préliminaires
- Ouvrir un nouveau projet Windows Form
- Coller 4 textBox et mettre leur propriétés Tag à respectivement 1, 2, 3 et 4
- Coller 6 PictureBox et mettre leur propriétés Tag à respectivement 1, 2, ...6
- Coller 2 Boutons
Le code
Le code est séparé en deux "sub" pour une meilleur compréhension mais pourrait être réalisé en une seule "sub".
Si vous le souhaitez vous pouvez libérer les deux lignes Img.image = ...
Les images sont dans le zip.
'============================================================== 'Sur la forme, '4 TextBox propriété Tag de 1 à 4 '6 PictureBox propriété 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 'boucle sur tout les contrôles de la forme If TypeOf Ctl Is TextBox Then 'Vérifie que c'est un textbox Txt = Ctl If Txt.Tag = NbAlea Then 'S'il n'y a que des TextBox sur la form il n'est pas nécessaire 'de passer par une variable buffer Txt.Text = "c'est le 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 'S'il n'y a que des pictureBox sur la form il n'est pas nécessaire 'de passer par une variable buffer For Each Pic In Me.Controls 'boucle sur tout les contrôles de la forme 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
Téléchargement
La solution VB.Net
Serveur 1 : VbNet Collection.zip
Serveur réserve : VbNet Collection.zip
N'oubliez pas de décompresser le dossier Zip.
A découvrir aussi
- Entrées/sorties : Les flux en C++
- Tri par fusion - récursivité-
- Comment bien stocker et vérifier un mot de passe
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 2 autres membres