Apprenez à programmer en VB .NET
Last updated on Monday, June 24, 2013
  • 4 semaines
  • Facile

Free online content available in this course.

Paperback available in this course

eBook available in this course.

Got it!

Les contrôles spécifiques

Vous savez désormais comment vous servir des contrôles basiques : les textbox, les labels, les boutons, etc. Mais qu'en est-il pour des contrôles plus spécifiques, mais non moins intéressants ? Vous allez sûrement vouloir faire un peu plus que mettre des boutons et des textbox dans vos programmes.

Je parle des checkbox et des boutons radio entre autres. Comment s'en servir ? C'est ce que nous allons voir.

Checkbox, boutons radio

Créons d'abord un nouveau projet (gardez le TP « voyage en voiture » dans un coin, ça pourrait toujours vous servir :p ), qui va ressembler à la figure suivante.

Notre projet
Notre projet

Je vous donne les noms des composants que j'ai utilisés :

  • Les checkbox (à gauche) :

    • CHK_1

    • CHK_2

    • CHK_4

    • CHK_8

  • Les boutons radio (au centre) :

    • RB_1

    • RB_2

    • RB_3

    • RB_4

  • Les boutons radio (à droite) :

    • RB_ROUGE

    • RB_VERT

    • RB_BLEU

    • RB_JAUNE

  • Bouton BT_1

  • Bouton BT_2

  • Bouton BT_3

  • Textbox TXT_CHK

  • Textbox TXT_RBNB

  • Textbox TXT_RBCOL

Vous n'êtes évidemment pas obligés de travailler avec les mêmes noms que moi, mais je vous le conseille, ce sera plus facile pour vous de vous y retrouver.

Si vous testez ce petit programme, vous pouvez cliquer sur les cases, elles s'allument bien ; seulement, problème du côté des boutons radio : cliquer sur n'importe lequel d'entre eux en décoche un autre même si ce dernier n'est pas dans la même colonne… Eh oui, l'IDE n'est pas intelligent, il ne sait pas ce que nous voulons faire.

Comment faire ?

Eh bien, retournez sur votre IDE et cherchez le contrôle groupbox. Entourez grâce à deux groupbox vos deux colonnes de boutons radio, et allez dans les propriétés des deux groupbox que vous venez de créer pour retirer le texte qu'elles contiennent : elles seront invisibles.

Une fois cela fait, retestez le programme. Vous devriez obtenir la figure suivante.

Le programme fonctionne
Le programme fonctionne

On peut sélectionner un bouton dans chaque colonne. :)

La pratique

Bon, le côté design fonctionne, on va passer à l'accès aux propriétés.

Allons donc du côté du code VB en double-cliquant sur BT_1, ce qui créera notre événement de clic sur le bouton.

Dans cet événement je vais vous demander de faire la somme des checkbox cochées. Donc la propriété qui régit l'état d'une checkbox est…

Checked ! (siii !)

Bon, écrivons donc ce code…

Me.CHK_1.Checked

… pour récupérer l'état de la première checkbox. Cette propriété est définie par true ou false. C'est donc un booléen, vous avez dû vous en rendre compte lorsque vous avez inscrit cette ligne, l'IDE vous a affiché une infobulle.

Nous allons donc facilement pouvoir faire une boucle if :

if Me.CHK_1.Checked then

Cette boucle sera pénétrée si la case 1 est cochée.

Donc, vous avez toutes les cartes en main. Écrivez dans la textbox TXT_CHK la somme des cases cochées.

Private Sub BT_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_1.Click
        Dim Somme As Integer = 0
        If Me.CHK_1.Checked Then
            Somme = Somme + 1
        End If
        If Me.CHK_2.Checked Then
            Somme = Somme + 2
        End If
        If Me.CHK_4.Checked Then
            Somme = Somme + 4
        End If
        If Me.CHK_8.Checked Then
            Somme = Somme + 8
        End If
        Me.TXT_CHK.Text = Somme
    End Sub

Et voilà le code permettant de faire cela.

Ce n'était pas sorcier !

Alors, à vos claviers ! Écrivez dans la seconde textbox quel bouton a été coché et dans la dernière la couleur sélectionnée !

Je vous laisse quand même réfléchir !

Solution
Public Class Form1

    Private Sub BT_1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_1.Click
        Dim Somme As Integer = 0
        If Me.CHK_1.Checked Then
            Somme = Somme + 1
        End If
        If Me.CHK_2.Checked Then
            Somme = Somme + 2
        End If
        If Me.CHK_4.Checked Then
            Somme = Somme + 4
        End If
        If Me.CHK_8.Checked Then
            Somme = Somme + 8
        End If
        Me.TXT_CHK.Text = Somme
    End Sub

    Private Sub BT_2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_2.Click
        If Me.RB_1.Checked Then
            Me.TXT_RBNB.Text = Me.RB_1.Text
        End If
        If Me.RB_2.Checked Then
            Me.TXT_RBNB.Text = Me.RB_2.Text
        End If
        If Me.RB_3.Checked Then
            Me.TXT_RBNB.Text = Me.RB_3.Text
        End If
        If Me.RB_4.Checked Then
            Me.TXT_RBNB.Text = Me.RB_4.Text
        End If
    End Sub

    Private Sub BT_3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_3.Click
        If Me.RB_BLEU.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_BLEU.Text
            Me.BackColor = Color.Blue
        End If
        If Me.RB_JAUNE.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_JAUNE.Text
            Me.BackColor = Color.Yellow
        End If
        If Me.RB_ROUGE.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_ROUGE.Text
            Me.BackColor = Color.Red
        End If
        If Me.RB_VERT.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_VERT.Text
            Me.BackColor = Color.Green
        End If
    End Sub
End Class

Ce code est lourd puisqu'il vérifie toutes les checkbox une par une… De plus, je n'ai mis aucun commentaire. Mais bon il fonctionne et vous avez réussi à accéder et réagir aux checkbox et boutons radio. Essayez donc de le simplifier à coup de IIF !

Petit plus : la couleur (voir figure suivante). Vous auriez dû vous douter que je ne mettais pas des couleurs juste comme ça >_ , et la propriété, vous auriez pu la trouver par vous-mêmes !

La couleur a changé
La couleur a changé
Private Sub BT_3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_3.Click
        If Me.RB_BLEU.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_BLEU.Text
            Me.BackColor = Color.Blue
        End If
        If Me.RB_JAUNE.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_JAUNE.Text
            Me.BackColor = Color.Yellow
        End If
        If Me.RB_ROUGE.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_ROUGE.Text
            Me.BackColor = Color.Red
        End If
        If Me.RB_VERT.Checked Then
            Me.TXT_RBCOL.Text = Me.RB_VERT.Text
            Me.BackColor = Color.Green
        End If
    End Sub

Et l'IDE vous donne automatiquement la liste des couleurs disponibles quand vous écrivez le signe égal « = », il faut juste connaître les noms anglais.

Bon, vous savez désormais accéder aux checkbox et aux boutons radio, et les utiliser !

Les combobox

Bon, attaquons les combobox (aussi appelées DropDownList), que vous retrouvez souvent. Il s'agit de boîtes déroulantes. Nous allons apprendre à les remplir et à réagir avec.

Créez donc la fenêtre visible à la figure suivante : une combobox nommée CB_CHOIX, et une textbox appelée TXT_CHOIX.

Une combobox
Une combobox

Cette fois, au lieu d'utiliser un bouton pour déclencher l'événement, nous allons utiliser l'événement propre de la combobox. Cet événement se déclenche lors du changement de sélection.

Tout d'abord il faut attribuer des valeurs à la combobox, deux choix s'offrent à nous : la manuelle (en dur dans le code) ou l'automatique (grâce à l'assistant de l'IDE). Je vais d'abord vous expliquer l'automatique, puis la manuelle qui offre beaucoup plus de possibilités.

Méthode assistée

Lors du clic sur la combobox (dans l'IDE), elle apparaît sélectionnée et une petite flèche apparaît en haut à droite de cette sélection, comme à la figure suivante.

Une flèche apparaît
Une flèche apparaît

Cliquez maintenant sur Modifier les éléments pour lui en attribuer.

Méthode manuelle

La seconde méthode nous amène côté VB, double-cliquez sur la fenêtre pour créer l'événement onload.

Une technique est de créer un tableau contenant les valeurs et de « lier » ce tableau à la combobox : créons tout d'abord notre tableau…

Dim MonTableau(9) As Integer
 For i As Integer = 0 To 9
     MonTableau(i) = i + 1
 Next

… rempli ici avec des valeurs allant de 1 à 10.

L'instruction pour lier cette combobox (également valable pour les listbox et autres) est :

Me.CB_CHOIX.DataSource = MonTableau

Donc si l'on écrit tout ça dans le Main(), on obtient une liste déroulante avec des nombres allant de 1 à 10.

Nous allons écrire la valeur récupérée dans la textbox lors du changement de choix dans la combobox, la propriété utilisée pour récupérer la valeur sélectionnée est SelectedValue (je vous laisse faire cette modification).

Private Sub CB_CHOIX_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CB_CHOIX.SelectedIndexChanged
        Me.TXT_CHOIX.Text = Me.CB_CHOIX.SelectedValue
    End Sub

Et voilà !

La liste est opérationnelle
La liste est opérationnelle

Après le test, nous voyons que tout fonctionne, nous avons réussi à accéder à une combobox et à la remplir !

MicroTP

Bon, pour vérifier vos connaissances sur les accès aux propriétés et l'utilisation de nouveaux contrôles, je vais vous demander de réaliser un petit programme contenant une progressbar et une trackbar.

Le déplacement de la trackbar par l'utilisateur se répercutera sur le remplissage de la progressbar : si la trackbar est au milieu, la progressbar aussi.

Ce petit TP vous apprendra a trouver par vous-mêmes les propriétés utiles des contrôles. Il va falloir se faire à cette pratique, c'est 50 % du travail d'un développeur : trouver comment faire ce qu'il souhaite sans que personne ne lui montre. Ne vous inquiétez pas, l'IDE vous expliquera l'utilité de chaque propriété.

Bonne chance !

Résultat

La figure suivante vous montre le résultat.

Une barre de progression
Une barre de progression

Alors, une seule ligne côté VB à ajouter dans l'événement de la trackbar :

Private Sub TKB_IN_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TKB_IN.Scroll
        Me.PGB_OUT.Value = Me.TKB_IN.Value
    End Sub

Eh oui ! La propriété à utiliser était value. Vous avez dû avoir des surprises aux premiers tests, du genre la progressbar ne va pas jusqu'au bout alors que le trackbar y est…

Alors, comment résoudre ce problème, pour ceux qui n'ont pas trouvé ?

Eh bien regardez un peu du côté de la propriété Maximum de ces deux contrôles. Si elle n'est pas la même, ça risque de ne pas aller. ^^ Autre chose : je vous conseille de mettre la tickfrequency (autrement dit, le pas) de la trackbar à 0, plus de « tirets » et donc la progressbar est mise à jour en temps réel.

Eh bien, pas trop dur ! :p

  • Les checkbox sont utiles pour les choix multiples.

  • Les boutons radio permettent un choix unique dans une liste.

  • Les combobox sont utiles pour choisir une valeur dans une liste déroulante.

Example of certificate of achievement
Example of certificate of achievement