Site:  Cours VB.net  
3.1 IU, Classe 'Control', évènements.

L'interface utilisateur (IU) correspond aux fenêtres et contrôles que voit l'utilisateur dans des fenêtres Windows.

Elle assure le dialogue entre l'homme et la machine. C'est l'Interface Homme Machine (IHM). Sous Windows, c'est l'interface graphique.

 

En pratique comment créer l'interface utilisateur ?

 

On a vu que le développeur dessine cette interface en mode conception (Design) dans l'IDE (Environnement de développement):

 

Exemple:

On crée une interface utilisateur avec une fenêtre, un bouton, un label (affichant du texte).

Quand on crée un nouveau projet, il y a création d'un Form1 automatiquement.

 

Comment rajouter une fenêtre?

Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fenêtre ‘Form1’ apparaît. On a bien crée une fenêtre avec la classe WindowsForms.Form (En fait on a crée une Classe 'Form1', on verra cela plus loin.)

Comment ajouter un bouton?

Cliquer sur ‘Boite à Outils’ à gauche , bouton WindowsForms, puis bouton ‘Button’,cliquer dans Form1, déplacer le curseur sans lâcher le bouton, puis lâcher le bouton : un bouton apparaît.

Comment ajouter un label?

Un label est un contrôle qui permet d’afficher un texte.

Comme pour le bouton cliquer sur ‘Boite à Outils’ à gauche, bouton WindowsForms, bouton ‘Label’ et mettre un contrôle label sur la fenêtre.

On obtient dans la fenêtre principale:

 

Modifier les propriétés des l'objets (Bouton, label..) en mode Design.

Il suffit ensuite de modifier les propriétés de l'objet pointé (celui qui est entouré de petits carrés) pour lui donner l’aspect désiré. Les propriétés sont accessibles dans la fenêtre de propriétés de droite.

 

 

Noter que pour modifier la taille des objets, on peut le faire très facilement à la souris en cliquant sur les petits carrés entourant l'objet et en tirant les bords. (on peut interdire les modifications de taille et de position des contrôles par le menu Format puis verrouiller les contrôles une fois que leurs tailles et positions est bien définies.)

 

Modifier les propriétés des l'objets (Bouton, label..) par code.

Dans le code des procédures les propriétés des objets sont aussi accessibles.

 

Button1.Text="OK"    permet par exemple de modifier la propriété Text d'un bouton.

 

 

 

La Classe 'Control':

 

Les contrôles  dit visuel (Button, TextBox ListBox...) héritent tous de la classe Control  qui hérite elle-même de la classe  System.WindowsForms.

Autrement dit, les Button, Label, TextBox... sont des 'Control'.

Tous ces objets avec représentation visuelle  ont des  propriétés communes héritées de la classe Control.

Nous allons voir les plus utilisées:

 

Name : il s’agit du nom de l’objet tel qu’il est géré par l’application.

Par défaut, VB baptise tous les objets que vous créez de  noms génériques, comme Form1, Form2, Form3 pour les fenêtres, List1, List2 pour les listes...

Cette propriété est accessible en mode conception uniquement. L'utilisateur du logiciel ne la verra pas.

Il est  vivement conseillé de renommer les objets que vous venez de créer afin de donner des noms plus évocateurs.

Le bouton sur lequel est écrit « OK » sera nommé BoutonOK ou ButtonOk if you are anglophile.

La liste qui affiche les utilisateurs sera nommée ListUtilisateurs.

Il est conseillé de débuter le nom de l’objet par un mot évoquant sa nature:

BoutonOk ou BtOk ou ButtonOk, btnOk  c’est comme vous voulez.

 

Microsoft conseille:

btn pour les Boutons

lst pour les ListBox

chk pour les CheckBox

cbo pour les combos

dlg pour les DialogBox

frm pour les Form

lbl pour les labels

txt pour les Textbox

tb pour les Toolsbar

rb pour les radiobutton

mm pour les menus

tmr pour les timers

 

 

Text : il s’agit du texte qui est associé à l’objet.

Dans le cas d’une fenêtre  c’est le texte qui apparaît dans la barre de titre en haut.

Pour un TextBox ou un Label c’est évidement le texte qui est affiché.

On peut modifier cette propriété en mode conception ou dans le code :

Exemple : Avec du code comment faire pour que le bouton ButtonOk porte l’inscription ‘Ok’

ButtonOk.Text= "Ok"

 

Enabled : accessible

Indique si un contrôle peut répondre à une interaction utilisateur.

La propriété Enabled permet l'activation ou la désactivation des contrôles au moment de l'exécution. Vous pouvez désactiver les contrôles ne s'appliquant pas à l'état actuel de l'application. Vous pouvez également désactiver un contrôle pour interdire son utilisation. Par exemple, un bouton peut être désactivé  pour empêcher l'utilisateur de cliquer dessus. Si un contrôle est désactivé, il ne peut pas être sélectionné. Un contrôle désactivé est généralement gris, il est pas contre visible.

On peut donner la valeur True ou False à cette propriété.

Exemple : désactiver le ButtonOk

ButtonOk.Enabled=False

 

Visible :

Indique si un contrôle est visible ou non.

ButtonOk.Visible=False fait disparaître le bouton.

 

Attention pour rendre visible une fenêtre on utilisa la méthode .Show.

 

Exemple:

 

 

Button1.Enabled = True (il est accessible )

Button2.Enabled = False (il est grisé, l'utilisateur ne peut pas cliquer dessus)

Button3.Visible = False (on ne voit pas ce bouton 3)

Button4 a le focus. 

Button5.Text= "Ok"

 

 

Font :

Permet le choix de la police de  caractères affichée dans l’objet.

TextBox1.Font = New Font("Courier New", 12, FontStyle.Italic)

Indique que TextBox1 utilise la font "Courier New" de taille 12 en italique.

 

BackColor ForeColor:

Couleur du fond, Couleur de l’avant plan.

Pour un bouton Forecolor correspond au cadre et aux caractères.

ButtonOk.ForeColor=  System.Drawing.Color.Blue

 

Tag:

C'est une variable String liée à un objet visuel.

Permet de stocker une valeur ou un texte lié à l'objet. Chaque objet a un Tag qui peut contenir du texte.

On l'utilise souvent comme un Flag lié à l'objet.

Par exemple: une liste peut contenir la liste des CD ou des DVD ou des K7, quand je charge la liste des CD, je rajoute

List1.Tag="CD" 

cela permet ultérieurement de voir ce qu'il y a dans la liste.

 

Il y a bien d'autres propriétés.

 

Un contrôle peut en contenir d'autres qui en contiennent d'autres.

Exemple: un formulaire contient un cadre qui contient des boutons:

La propriété Parent indique le contrôle conteneur : celui qui contient le contrôle en cours. FindForm retourne le formulaire conteneur.

HasChildren indique  si le contrôle en cours contient d'autres contrôles, dans ce cas ils sont dans la collection Controls.

 

Exemple:

Si un Button1 est dans un formulaire nommé Form1 et dont la barre de titre contient 'Mon formulaire'

Button1.Parent  retourne "NomProgramme.Form1 Text: Mon formulaire"

FindForm retourne la même chose ici.

 

 

Évènements liés aux objets avec représentation visuelle

 

On a vu que les objets de l'interface utilisateur ont des procédures déclenchées par les évènement de cet objet.

2 exemples:

1- Quand l'utilisateur clique sur un bouton Ok  , la procédure BtOkClick s'effectue.

2- Quand l'état (coché ou non coché) d'une case à cocher nommée Co change, la procédure Co.CheckedChanged est activée.

 

La syntaxe complète de la procédure pour le bouton est:

 

Private Sub BtOkClick (ByVal sender As System.Objet, ByVal e As System.EventArgs)  Handles BtOk.Click

End Sub

 

Détaillons:

Private Sub

La procédure évènement est privée donc accessible uniquement dans le module.

BtOkClick

Après le nom Sub il y a un nom de procédure. Ce nom est construit avec le nom du contrôle et l'évènement, mais cela aurait pu être n'importe quel nom car ce n'est pas ce nom qui indique ce qui déclenche la procédure.

Sender

indique le contrôle qui a déclenché l'évènement. c'est un Objet.

sender.Name contient par exemple le nom du contrôle ayant déclenché l'évènement.

 e

C'est une variable de type SystemEventArgs qui permet de connaître l'évènement qui à déclenché la procédure.

Handles

Indique quel objet et évènement à déclenché la procédure. (On verra qu'il peut y en avoir plusieurs.)

Handles BtOk.Click indique que c'est l'évènement Click sur l'objet BtOk qui déclenche la procédure.

 

 

On voit que quand on crée un objet, ses procédures évènements sont automatiquement crées par VB.

On se rend compte que dans une procédure évènement on peut modifier (en mode conception) ou lire (en mode Run) quel objet et quel évènement à déclenché la procédure. On peut même indiquer plusieurs objets liés à cette procédure.

 

 

Certains évènement sont communs à  tous les contrôles:

Click

DoubleClick

GotFocus     Prise du focus

LostFocus    Perte du focus

KeyUp        Remontée d'une touche clavier

KeyPress     Pression d'une touche clavier

KeyDown      Appuie sur une touche clavier

 

Il y a toujours des méthodes Changed déclenchées par un changement d'état: CheckedChanged pour une case à cocher, TextChanged pour un contrôle texte.

 

Pour ne pas alourdir les exemples, nous écrivons souvent une version simplifiée de l'en-tête de la procédure.

Nous écrivons:

Private Sub BtOkClick ()

au lieu de:

Private Sub BtOkClick (ByVal sender As System.Objet, ByVal e As System.EventArgs)  Handles BtOk.Click

 

Attention, au Type des paramètres.

Sender est un 'Object'.

Exemple: dans Form_Load d'une form, le paramètre sender est bien le formulaire qui a déclenché le Load mais son type est 'Objet'. Et sender..ForeColor n'est pas accepté car Forecolor  n'est pas une propriété d'un objet.

 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Couleur=sender..ForeColor <=  ERREUR

End Sub

Pour pouvoir utiliser ForeColor, il faut caster (transformer) l'objet en Form.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Couleur=CType(sender, Form).ForeColor

End Sub

 

 

 En résumé:

Le programmeur dessine les fenêtres et contrôles.

Il peut modifier les propriétés des objets dessinés:

Par la fenêtre de propriétés (en mode conception).

Par du code (des instructions) dans les procédures.