Site:  Cours VB.net  
3.9 Regroupement de contrôles.

On peut regrouper des contrôles dans :

    Les GroupBox.

    Les Panels.

    Les PictureBox.

    Les TabControl.

    Les SplitContainer.(Framework 2 Vb2005)   

    Les LayoutPanel.(Framework 2 Vb2005)

 

Comment se passer des groupes de contrôles de VB6 qui n'existent plus en VB.Net?

Comment plusieurs contrôles peuvent-ils déclencher un même évènement?

Comment travailler sur plusieurs contrôles identiques?

 

GroupBox et Panel

Il est possible de regrouper des contrôles dans un container, on peut par exemple regrouper plusieurs RadioButton. Le container peut être un GroupBox ou un Panel.

GroupBox           Panel avec AutoScroll =True et BorderStyle=Single

 

Pour l'utilisateur, le fait que toutes les options soient regroupées dans un panneau est un indice visuel logique (Tous les RadioButton permettrons un choix dans une même catégorie de données). Au moment de la conception, tous les contrôles peuvent être déplacés facilement ; si vous déplacez le contrôle GroupBox ou Panel, tous les contrôles qu'il contient sont également déplacés. Les contrôles regroupés dans un panneau ou un GroupBox sont accessibles au moyen de la propriété Controls du panneau.

Le contrôle Panel est similaire au contrôle GroupBox ; mais, seul le contrôle Panel peut disposer de barres de défilement et seul le contrôle GroupBox peut afficher une légende.

La légende de la GroupBox est définie par la propriété Text.

Pour faire apparaître les barres de défilement dans le Pannel mettre AutoScroll =True et AutoScrollMinSize =100;100

Dans un Panel, pour afficher des barres de défilement, attribuez à la propriété AutoScroll la valeur true.. La propriété BorderStyle détermine si la zone est entourée d'une bordure invisible (None), d'une simple ligne (FixedSingle) ou d'une ligne ombrée (Fixed3D).

Comment créer un contrôle Panel ?

Faites glisser un contrôle Panel de l'onglet Windows Forms de la boîte à outils jusqu'à un formulaire.

Ajoutez des contrôles au panneau en les déposant dans le panneau.

Si vous voulez mettre dans le panneau des contrôles existants, sélectionnez-les tous, coupez-les dans le Presse-papiers, sélectionnez le contrôle Panel et collez-les.

 

PictureBox

Le contrôle PictureBox peut afficher une image mais peut aussi servir de conteneur à d'autres contrôles.

Retenons la notion de conteneur qui est le contrôle parent.

 

TabControl

Ce contrôle permet de créer des onglets comme dans un classeur, onglets entièrement gérés par VB. Chaque page peut contenir d'autres contrôles.

En mode conception, en passant par la propriété TabPages, on ajoute des onglets dont la propriété Text contient le texte à afficher en haut (Ici: Page 1..). il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrôles.

En mode run les onglets fonctionnent automatiquement: cliquez sur Page 2 affiche la page correspondante (et déclenche l'événement Click de cet objet TabPage)..

La propriété Alignment permet de mettre les onglets en haut, en bas, à droite, à gauche.

 

SplitContainer:

VB Framework 2.

Permettant de créer facilement une séparation déplaçable entre 2 zones.

On met le SplitContainer, dans les 2 zones on met par exemple 2 textbox. Il faut mettre la propriété Dock de ces 2 textbox à Fill.

En mode Run, cela marche : si je déplace la zone de séparation centrale, cela agrandit un textbox et diminue le second.

Margin  indique la largeur de la séparation.

Orientation permet une séparation horizontale ou verticale.

 

 

LayoutPanel

VB Framework 2.

Permettent de positionner les contrôles dans une Form en mode conception. On ne les voit pas en mode Run.

FlowLayoutPanel: Place les contrôles à droite du précédent, passe 'à la ligne' si nécessaire, c'est génial pour créer plusieurs lignes de label, TextBox, Bouton:

TableLayoutPanel:On crée un tableau de panel, puis on met les contrôles dans les cellules:

 

 

Comment se passer des groupes de contrôles de VB6 qui n'existent plus en VB.Net?

En VB6 on pouvait créer un groupe de plusieurs contrôles identiques et les repérer par un Index.

Texte(0), Texte(1), Texte(2)..

Pour parcourir le groupe, on avait une boucle For Next sur l'index:

For i=1 To 10

Texte(i).text...

Next

 de plus il n'y avait qu'une routine évènement pour l'ensemble du groupe.

Sub Texte_Click (Index)

Cela n'existe plus en VB.Net!!!!!

Comment donc utiliser un groupe de contrôle en VB.Net?

 

1 - Evènement commun.(Comment pallier à la disparition des groupes de contrôles?)

Exemple: 3 cases à cocher permettent de colorer un label en vert rouge ou bleu.

Comment gérer les évènements?

On peut écrire 3 routines complètes pour chaque case à cocher.

Il est aussi toujours possible dans chacune des 3 procédures CouleurX.checkedChanged de vérifier si la case est cochée et de modifier la couleur.

C'est plus élégant d'avoir une procédure unique qui, en fonction de la case à cocher qui a déclenché l'évènement, change la couleur.

On désire donc parfois que l'évènement de plusieurs contrôles différents soit dirigé sur une seule et même procédure.

Mais, la notion de groupe de contrôle  comme en VB6 n'existe plus!!!

 

Par contre par l'intermédiaire du Handles, il est possible d'associer plusieurs évènements à une seule procédure:

Private Sub CouleurCheckedChanges (ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles CouleurVert.CheckedChanged, CouleurRouge.CheckedChanged, CouleurBleu.CheckedChanged

   

End Sub

Cette procédure est activée quand les cases à cocher CouleurVert CouleurBleu, CouleurRouge changent d'état.

A noter que Sender est le contrôle ayant déclenché l'évènement et e l'évènement correspondant.

Pour modifier la couleur il faut ajouter dans la procédure:

 

Select Case sender

    Case CouleurRouge

..

ou

Select Case True
   Case sender Is CouleurRouge
.
End Select

 

 

Enfin la ligne suivante marche !

If sender Is  CouleurRouge Then...

 

2 - Comment travaillez sur plusieurs contrôles.(Comment pallier à la disparition des groupes de contrôles?)

Si j'ai une interface utilisateur avec 20 Textbox, comment modifier la couleur de fond des 20 Textbox?

(En VB6 on créait un groupe de contrôle, cela n'existe plus en VB.net!!)

 

Solution 1

TextBox1.BackColor= Color.Red

TextBox2.BackColor= Color.Red

TextBox3.BackColor= Color.Red

.....  !!!!!!Bof

 

Solution 2

Mettre les 20 TextBox dans un Panel (invisible); la collection Controls du Panel contient tous les contrôles contenus dans le panel, on utilise cette collection pour atteindre tous les textbox:

Dim i As Integer

For i=0 to Panel1.Controls.Count

    Panel1.Controls(i).BackColor=Color.Red

Next

 

ou

For Each TB As TextBox in Panel1.Controls

    TB.BackColor= Color.Red

Next

 

ou

S'il n'y a pas que des TextBox dans le Panel et qu'on ne veut modifier que les TextBox:

For Each TB As Control in Panel1.Controls

    If TypeOf (TB)= TextBox then   

        TB.BackColor= Color.Red

    End if

Next

 

ou

Si les textbox se nomme 'TexteBox1', 'TextBox2', 'TextBox2'....

Dim i As Integer

   For i=1 to 8

         Panel1.controls("TextBox"+cstr(i)).BackColor= Color.Red

Next   

 

Solution 3

Mettre les 20 TextBox dans un tableau:

Créer les textbox suivantes:  TextBox0, TextBox1,...

'En haut du module

Dim Textes(19) As TextBox          
 
'puis dans le form_load
Textes(0) = TextBox0
Textes(1) = TextBox1
Textes(2) = TextBox2
...

'ensuite, on peut bien utiliser la syntaxe de VB 6.0

Dim i As integer
For i = 0 To 19
 Dim MyTexte As Integer= Textes(i).Text
..
Next

Noter qu'on a créer un tableau de TexBox, si on utilise un tableau d'objet, il faut caster l'objet en textbox pour utiliser sa propriété text:

 

Dim Textes(19) As Object

Textes(1) = TextBox1

Textes(2) = TextBox2

...

Dim i As Integer

For i = 1 To 2

Dim MyTexte As String = CType(Textes(i), TextBox).Text

Next