Astuces de recherche...
Home
- Accueil & nouveautés
- Les newsgroups VB
- Téléchargements
- L'équipe
- Nous contacter
- Liens
Rubriques
- Toutes les questions
- Affichage & graphismes
- Algorithmique
- API
- Base de registre
- Bases de données
- Contrôles
- Date & heure
- Déploiement
- Divers
- Erreurs & problèmes
- Fichiers & dossiers
- Généralités
- Impression
- Internet & mails
- Math
- Multimédia
- Réseaux
- Structures de données
- Texte & strings
- VB .Net
- VB Script
- VBA
- Windows

Question 174

Comment manipuler un contrôle par son nom ?

Introduction

Il est possible avec VB de manipuler un contrôle de façon indirecte, c'est à dire par son nom plutôt que par manipulation directe de l'objet. Il y a plusieurs façons de faire cela. Cet article expose les différentes méthodes possibles, le lecteur choisira la meilleure ou la plus pratique en fonction de l'application.


La collection Controls

La collection "Controls" est attachée à une Form. Tous les contrôles présents sur une feuille se retrouvent dans cette collection. En utilisant cette collection "Controls", il est facile d'accéder aux contrôles présents par leurs noms.

L'exemple suivant montre comment affecter le texte "Hello, World" à une TextBox nommée "Text1" :

Dim controlName As String

    controlName = "Text1"

    Controls(controlName).Text = "Hello, World"

L'exemple suivant montre comment changer la couleur de fond de tous les contrôles de type "TextBox" de la feuille :

Dim ctl As Control

    For Each ctl In Controls
        If TypeOf ctl Is TextBox Then
            ctl.BackColor = RGB(255, 0, 0)
        End If
    Next

L'exemple suivant montre comment changer la couleur de fond de tous les TextBox en vert, sauf pour la TextBox nommée "Text2" (si elle existe), auquel cas on change la couleur de fond en rouge :

Dim ctl As Control

    For Each ctl In Controls
        If TypeOf ctl Is TextBox Then
            If ctl.Name = "Text2" Then
                ctl.BackColor = RGB(128, 0, 0)
            Else
                ctl.BackColor = RGB(0, 128, 0)
            End If
        End If
    Next
End Sub

L'exemple suivant affecte la propriété Caption de 4 labels (Label1, Label2, Label3 et Label4) avec 4 textes différents. On parcourt les labels avec une simple boucle For :

Dim i As Integer

    For i = 1 To 4
        Controls("Label" & Trim$(Str$(i))).Caption = "COUCOU - " & Str$(i)
    Next i

Variables Objet

Il est aussi possible de créer des variables objets pour référencer les contrôles de la form. Par exemple, le code suivant crée une variable permettant de garder une référence sur le contrôle text1. Puis en utilisant la variable, on change la couleur de fond à jaune :

Dim MyControl As Object

    Set MyControl = Text1
    
    MyControl.BackColor = RGB(255, 255, 0)

Il est aussi possible, si on connaît à l'avance le type de contrôle que l'on veut référencer de déclarer une variable avec exactement le type du contrôle, ce qui permet entre autre de bénéficier de l'intellisense. Par exemple, une variable permettant de manipuler un Label:

Dim MyLabel As Label

    Set MyLabel = Label1
    
    MyLabel.Caption = "COUCOU"

Les groupes de contrôles

Une alternative souvent valable pour ce genre de problématique est d'utiliser les contrôles indexés ou groupe de contrôles . Il suffit lors de la création d'affecter la propriété index du contrôle. Ainsi, pour créer 4 textBox ayant comme nom "txtSample", il suffit de créer txtSample(0), txtSample(1), txtSample(2) et txtSample(3). Note: cette focntionalité n'existe pas en VBA.

Pour affecter un texte à ces 4 contrôles, une simple boucle For suffit :

Dim i As Integer
    For i = 0 To 3
        txtSample(i).Text = "Hello " & Str$(i)
    Next i


Il faut souligner que sauf pour des cas très particuliers de programmation avancée, un design bien réfléchi devrait permettre d'éviter d'avoir à manipuler un contrôle par son nom. Les groupes des contrôles sont une excellente solution alternative, valable dans presque tous les cas.

L'usage de la collection Controls peut en revanche s'avérer utile, par exemple pour changer une propriété d'un ensemble de contrôles de même nature, comme on peut le voir dans le deuxième exemple de cet article.

Pour aller plus loin

Date de publication : 13 septembre 2007
Dernière modification : 13 septembre 2007
Rubriques : Contrôles, Généralités
Mots-clés : controle, contrôle, variable, nom, Controls, objet, TypeOf, Is, manipuler, accéder, retrouver