Tableaux de contrôles pour les utilisateurs de Visual Basic 6.0

Mise à jour : novembre 2007

Bien que les tableaux de contrôles ne soient plus pris en charge dans Visual Basic 2008, vous pouvez dupliquer et étendre un certain nombre de fonctionnalités de tableau de contrôles à l'aide du modèle d'événement.

Différences conceptuelles

Dans Visual Basic 6.0, les tableaux de contrôles pourraient être utilisés pour gérer des contrôles sur un formulaire ; ils fournissaient des fonctions de partage de gestionnaires d'événements en parcourant les groupes de contrôles et en ajoutant les contrôles au moment de l'exécution.

Dans Visual Basic 2008, les tableaux de contrôles ne sont plus pris en charge. Les modifications apportées au modèle d'événement rendent les tableaux de contrôles inutiles et .NET Framework fournit les mêmes fonctions pour utiliser les contrôles.

Partage de gestionnaires d'événements

Dans Visual Basic 6.0, les tableaux de contrôles pouvaient être utilisés pour spécifier un groupe de contrôles partageant un ensemble d'événements. Les contrôles devaient être de même type et posséder le même nom.

Visual Basic 2008 permet aux gestionnaires d'événements de gérer des événements à partir de plusieurs contrôles, même les contrôles ayant des noms et des types différents.

Vous pouvez, par exemple, ajouter deux contrôles Button (Button1 et Button2) et un contrôle CheckBox (CheckBox1) à un formulaire, puis créer un gestionnaire d'événement pour gérer l'événement Click pour ces trois contrôles :

Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click

Parcours des contrôles

La possibilité de parcourir un groupe de contrôles à l'aide de la propriété Index était une autre fonctionnalité des tableaux de contrôles Visual Basic 6.0. Par exemple, vous pourriez parcourir le tableau de contrôles en utilisant la propriété Index comme une variable de boucle pour effacer le texte de tous les contrôles TextBox dans un tableau de contrôles.

Les contrôles Visual Basic 2008 n'ont pas de propriété Index, mais vous pouvez toujours parcourir les contrôles sur un formulaire ou un conteneur à l'aide de Control.ControlCollection dans la classe Control.

Dans Visual Basic 6.0, les contrôles contenus dans un seul tableau de contrôles pourraient être placés sur plusieurs conteneurs. Par exemple, les contrôles TextBox contenus sur deux contrôles Frame différents pourraient faire partie du même tableau de contrôles.

Dans Visual Basic 2008, la collection Controls retourne uniquement les contrôles placés dans un conteneur unique. Vous devez parcourir séparément les contrôles de chaque contrôle conteneur ; pour ce faire, vous pouvez utiliser une fonction récursive.

Ajout de contrôles au moment de l'exécution

Dans Visual Basic 6.0, les contrôles auraient pu être ajoutés à un tableau de contrôles au moment de l'exécution à l'aide de l'instruction Load. Les contrôles devaient être du même type que le tableau de contrôles et le tableau de contrôles devait être créé au moment du design avec au moins un élément. Après l'ajout du contrôle, la propriété Visible devait avoir la valeur True.

Dans Visual Basic 2008, les contrôles sont ajoutés au moment de l'exécution à l'aide du mot clé New dans une instruction Dim, puis à l'aide de la méthode Add du conteneur dans lequel vous souhaitez ajouter le contrôle.

Ajout de gestionnaires d'événements au moment de l'exécution

Dans Visual Basic 6.0, lorsque vous avez ajouté un contrôle à un tableau de contrôles au moment de l'exécution, les nouveaux événements des contrôles ont été automatiquement gérés par les événements du tableau de contrôles.

Dans Visual Basic 2008, vous devez définir des gestionnaires d'événements pour les contrôles ajoutés au moment de l'exécution. Pour ce faire, il suffit d'utiliser l'instruction AddHandler.

Modifications du code des tableaux de contrôles

Le code ci-dessous illustre les différences entre les techniques de codage dans Visual Basic 6.0 et dans Visual Basic 2008.

Partage de gestionnaires d'événements

L'exemple suivant montre le partage du gestionnaire d'événements Change (TextChanged dans Visual Basic 2008) pour un groupe de trois contrôles TextBox. Dans Visual Basic 2008, la clause Handles du gestionnaire d'événements spécifie le contrôle qui sera géré par l'événement. Le gestionnaire d'événements retourne un Object générique, donc il doit être casté en type d'objet spécifique (dans ce cas, TextBox) que vous souhaitez gérer à l'aide de la méthode DirectCast.

' Visual Basic 6.0

Private Sub Text1_Change(Index As Integer)

Select Case Index

Case 0

MsgBox("The text in the first TextBox has changed")

Case 1

MsgBox("The text in the second TextBox has changed")

Case 2

MsgBox("The text in the third TextBox has changed")

End Select

End Sub

' Visual Basic
Private Sub TextBoxes_TextChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TextBox1.TextChanged, _
TextBox2.TextChanged, TextBox3.TextChanged
    Select Case DirectCast(sender, TextBox).Name
        Case TextBox1.Name
            MsgBox("The text in the first TextBox has changed")
        Case TextBox2.Name
            MsgBox("The text in the second TextBox has changed")
        Case TextBox3.Name
            MsgBox("The text in the third TextBox has changed")
    End Select
End Sub
Remarque :

Le comportement de l'événement est légèrement différent dans Visual Basic 2008. L'événement TextChanged est déclenché lorsque chaque contrôle est initialisé (par exemple dans l'événement Form_Load), ainsi que lorsque le texte est modifié au moment de l'exécution. Dans Visual Basic 6.0, l'événement Change a été déclenché uniquement une fois le texte modifié.

Parcours des contrôles

L'exemple suivant illustre une fonction pour parcourir un groupe de contrôles zone de texte et effacer leur texte. Dans l'exemple Visual Basic 6.0, la propriété Index d'un tableau de contrôles est utilisée comme une variable de boucle.

Dans Visual Basic 2008, un objet Control est passé comme un argument ; il contient une collection Control.ControlCollection qui inclut tous les contrôles placés sur ce contrôle. L'opérateur Typeof est utilisé pour déterminer si chaque contrôle est de type TextBox.

Remarque :

Un objet Form est de type Control; vous pouvez également passer Form comme un argument.

Comme les contrôles imbriqués ne sont pas inclus dans la collection Control.ControlCollection, la méthode HasChildren est utilisée pour déterminer si chaque contrôle contient d'autres contrôles ; dans le cas échéant, la fonction ClearText est appelée de manière récursive.

' Visual Basic 6.0

Private Sub ClearText()

For i = 0 To Text1().UBound

Text1(i).Text = ""

Next

End Sub

' Visual Basic
Private Sub ClearText(ByVal container As Control)
    Dim ctrl As Control
    For Each ctrl In container.Controls
        If TypeOf (ctrl) Is TextBox Then
            ctrl.Text = ""
        End If
        If ctrl.HasChildren Then
             ClearText(ctrl)
        End If
    Next
End Sub

Ajout de contrôles au moment de l'exécution

L'exemple suivant illustre l'ajout d'un contrôle zone de texte à un formulaire au moment de l'exécution. Dans Visual Basic 6.0, le contrôle est ajouté à un tableau de contrôles. Dans Visual Basic 2008, le contrôle est ajouté à la collection Control.ControlCollection. Dans Visual Basic 6.0, les événements du nouveau TextBox ont été gérés automatiquement par le tableau de contrôles. Dans Visual Basic 2008, vous devez connecter la gestion des événements via l'instruction AddHandler.

Ces deux exemples supposent qu'un contrôle zone de texte est ajouté au formulaire au moment du design, et dans l'exemple Visual Basic 6.0 qu'un tableau de contrôles à un seul élément a été créé. L'exemple Visual Basic 2008 suppose également qu'un gestionnaire d'événements nommé TextChangedHandler existe pour le premier contrôle TextBox.

' Visual Basic 6.0

Private Sub AddControl()

' Add a TextBox as the second element of a control array.

Load Text1(1)

' Set the location below the first TextBox.

Text1(1).Move Text1(0).Left, Text1(0).Top + 500

' Make the new TextBox visible

Text1(1).Visible = True

' Visual Basic
' Declare a new TextBox.
Dim TextBox2 As New TextBox
' Set the location below the first TextBox
TextBox2.Left = TextBox1.Left
TextBox2.Top = TextBox1.Top + 30
' Add the TextBox to the form's Controls collection.
Me.Controls.Add(TextBox2)
AddHandler TextBox2.TextChanged, AddressOf TextChangedHandler

Mettre à niveau des remarques

Lorsqu'une application créée avec Visual Basic 6.0 est mise à niveau vers Visual Basic 2008, tous les tableaux de contrôles sont mis à niveau vers des classes spéciales du tableau de contrôles spécifiques au contrôle. Ces classes sont contenues dans l'espace de noms Microsoft.VisualBasic.Compatibility.VB6 et sont utilisées par les outils de mise à niveau pour émuler le comportement du tableau de contrôles Visual Basic 6.0.

Bien qu'il soit possible d'utiliser ces classes de tableau de contrôles dans un nouveau développement Visual Basic 2008, nous vous recommandons d'utiliser le modèle d'événement et les fonctions du .NET Framework.

Voir aussi

Concepts

Événements et gestion des événements pour les utilisateurs de Visual Basic 6.0

Autres ressources

Contrôles Windows Forms pour les utilisateurs de Visual Basic 6.0