VB.net - Remplacer les index des contrôles d'une form

Décembre 2016



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 voir également :

Ce document intitulé «  VB.net - Remplacer les index des contrôles d'une form  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.