0% ont trouvé ce document utile (0 vote)
257 vues45 pages

Interfaces Graph I Ques VB

Transféré par

satmania
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
257 vues45 pages

Interfaces Graph I Ques VB

Transféré par

satmania
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

4.

Interfaces graphiques avec [Link] et [Link]

Nous nous proposons ici de montrer comment construire des interfaces graphiques avec [Link]. Nous voyons tout d'abord quelles sont les classes de base de la plate-forme .NET qui nous permettent de construire une interface graphique. Nous n'utilisons dans un premier temps aucun outil de gnration automatique. Puis nous utiliserons Visual [Link] ([Link]), un outil de dveloppement de Microsoft facilitant le dveloppement d'applications avec les langages .NET et notamment la construction d'interfaces graphiques. La version [Link] utilise est la version anglaise.

4.1 4.1.1

Les bases des interfaces graphiques Une fentre simple

Considrons le code suivant :


' options Option Strict On Option Explicit On ' espaces de noms Imports System Imports [Link] Imports [Link] ' la classe formulaire Public Class Form1 Inherits Form ' le constructeur Public Sub New() ' titre de la fentre [Link] = "Mon premier formulaire" ' dimensions de la fentre [Link] = New [Link](300, 100) End Sub ' fonction de test Public Shared Sub Main(ByVal args() As String) ' on affiche le formulaire [Link](New Form1) End Sub End Class

Le code prcdent est compil puis excut


dos>vbc /r:[Link] /r:[Link] /r:[Link] [Link] dos>frm1

L'excution affiche la fentre suivante :

Une interface graphique drive en gnral de la classe de base [Link] :


Public Class Form1 Inherits Form

Interfaces graphiques

104

La classe de base Form dfinit une fentre de base avec des boutons de fermeture, agrandissement/rduction, une taille ajustable, ... et gre les vnements sur ces objets graphiques. Ici nous spcialisons la classe de base en lui fixant un titre et ses largeur (300) et hauteur (100). Ceci est fait dans son constructeur :
Public Sub New() ' titre de la fentre [Link] = "Mon premier formulaire" ' dimensions de la fentre [Link] = New [Link](300, 100) End Sub

Le titre de la fentre est fixe par la proprit Text et les dimensions par la proprit Size. Size est dfini dans l'espace de noms [Link] et est une structure. La procdure Main lance l'application graphique de la faon suivante :
[Link](New Form1)

Un formulaire de type Form1 est cr et affich, puis l'application se met l'coute des vnements qui se produisent sur le formulaire (clics, dplacements de souris, ...) et fait excuter ceux que le formulaire gre. Ici, notre formulaire ne gre pas d'autre vnement que ceux grs par la classe de base Form (clics sur boutons fermeture, agrandissement/rduction, changement de taille de la fentre, dplacement de la fentre, ...).

4.1.2

Un formulaire avec bouton

Ajoutons maintenant un bouton notre fentre :


' options Option Strict On Option Explicit On ' espaces de noms Imports System Imports [Link] Imports [Link] ' la classe formulaire Public Class Form1 Inherits Form ' attributs Private cmdTest As Button ' le constructeur Public Sub New() ' le titre [Link] = "Mon premier formulaire" ' les dimensions [Link] = New [Link](300, 100) ' un bouton ' cration [Link] = New Button ' position [Link] = New [Link](110, 20) ' taille [Link] = New [Link](80, 30) ' libell [Link] = "Test" ' gestionnaire d'vt AddHandler [Link], AddressOf cmdTest_Click ' ajout bouton au formulaire [Link](cmdTest) End Sub ' gestionnaire d'vnement Private Sub cmdTest_Click(ByVal sender As Object, ByVal evt As EventArgs) ' il y a eu un clic sur le bouton - on le dit [Link]("Clic sur bouton", "Clic sur bouton", [Link], [Link]) End Sub ' fonction de test Public Shared Sub Main(ByVal args() As String) ' on affiche le formulaire [Link](New Form1) End Sub End Class

Nous avons rajout au formulaire un bouton :


Interfaces graphiques

105

' un bouton ' cration [Link] = New Button ' position [Link] = New [Link](110, 20) ' taille [Link] = New [Link](80, 30) ' libell [Link] = "Test" ' gestionnaire d'vt AddHandler [Link], AddressOf cmdTest_Click ' ajout bouton au formulaire [Link](cmdTest)

La proprit Location fixe les coordonnes (110,20) du point suprieur gauche du bouton l'aide d'une structure Point. Les largeur et hauteur du bouton sont fixes (80,30) l'aide d'une structure Size. La proprit Text du bouton permet de fixer le libell du bouton. La classe bouton possde un vnement Click dfini comme suit :
Public Event Click As EventHandler

o EventHandler est fonction "dlgue" ayant la signature suivante :


Public Delegate Sub EventHandler(ByVal sender As Object,ByVal e As EventArgs)

Cela signifie que le gestionnaire de l'vnement [Click] sur le bouton devra avoir la signature du dlgu [EventHandler]. Ici, lors d'un clic sur le bouton cmdTest, la mthode cmdTest_Click sera appele. Celle-ci est dfinie comme suit conformment au modle EventHandler prcdent :
' gestionnaire d'vnement Private Sub cmdTest_Click(ByVal sender As Object, ByVal evt As EventArgs) ' il y a eu un clic sur le bouton - on le dit [Link]("Clic sur bouton", "Clic sur bouton", [Link], [Link]) End Sub

On se contente d'afficher un message :

La classe est compile et excute :


dos>vbc /r:[Link] /r:[Link] /r:[Link] [Link] Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 dos>frm2

La classe MessageBox sert afficher des messages dans une fentre. Nous avons utilis ici le constructeur
Overloads Public Shared Function Show(ByVal owner As IWin32Window,ByVal text As String,ByVal caption As String,ByVal buttons As MessageBoxButtons,ByVal icon As MessageBoxIcon) As DialogResult

text caption buttons icon

le message afficher le titre de la fentre les boutons prsents dans la fentre l'icone prsente dans la fentre

Le paramtre buttons peut prendre ses valeurs parmi les constantes suivantes : constante boutons

Interfaces graphiques

106

AbortRetryIgnore

OK

OKCancel

RetryCancel

YesNo

YesNoCancel

Le paramtre icon peut prendre ses valeurs parmi les constantes suivantes :
Asterisk Error idem Stop

Exclamation

idem Warning

Hand

Interfaces graphiques

107

Information

idem Asterisk

None

Question

Stop

idem Hand

Warning

La mthode Show est une mthode statique qui rend un rsultat de type numration :
public enum [Link] { Abort = 0x00000003, Cancel = 0x00000002, Ignore = 0x00000005, No = 0x00000007, None = 0x00000000, OK = 0x00000001, Retry = 0x00000004, Yes = 0x00000006, }

[Link]

qui est une

Pour savoir sur quel bouton a appuy l'utilisateur pour fermer la fentre de type MessageBox on crira :
dim res as DialogResult=[Link](..) if res=[Link] then ' il a appuy sur le bouton oui ... end if

4.2 4.2.1

Construire une interface graphique avec Visual [Link] Cration initiale du projet
108

Nous reprenons certains des exemples vus prcdemment en les construisant maintenant avec Visual [Link].

Interfaces graphiques

1.

Lancez [Link] et prendre l'option Fichier/Nouveau/Projet

2.

donnez les caractristiques de votre projet

4 3 5 3. slectionnez le type de projet que vous voulez construire, ici un projet [Link] (1) slectionnez le type d'application que vous voulez construire, ici une application windows (2) indiquez dans quel dossier vous voulez placer le sous-dossier du projet (3) indiquez le nom du projet (4). Ce sera galement le nom du dossier qui contiendra les fichiers du projet le nom de ce dossier est rappel en (5)

Un certain nombre de dossiers et de fichiers sont alors crs sous le dossier i4 :

sous-dossiers du dossier projet1

De ces fichiers, seul un est intressant, le fichier [Link] qui est le fichier source associ au formulaire cr par [Link]. Nous y reviendrons.

Interfaces graphiques

109

4.2.2

Les fentre de l'interface de [Link]


Nous avons une fentre de conception de l'interface graphique :

L'interface de [Link] laisse maintenant apparatre certains lments de notre projet i4 :

En prenant des contrles dans la barre d'outils (toolbox 2) et en les dposant sur la surface de la fentre (1), nous pouvons construire une interface graphique. Si nos amenons la souris sur la "toolbox" celle-ci s'agrandit et laisse apparatre un certain nombre de contrles :

Pour l'instant, nous n'en utilisons aucun. Toujours sur l'cran de [Link], nous trouvons la fentre de l'explorateur de solutions "Explorer Solution" :

Dans un premier temps, nous ne nous servirons peu de cette fentre. Elle montre l'ensemble des fichiers formant le projet. Un seul d'entre-eux nous intresse : le fichier source de notre programme, ici [Link]. En cliquant droit sur [Link], on obtient un menu permettant d'accder soit au code source de notre interface graphique (Afficher le code) soit l'interface graphique elle-mme (Concepteur de vues) :

On peut accder ces deux entits directement partir de la fentre "Solution Explorer" :
Interfaces graphiques

110

Les fentres ouvertes "s'accumulent" dans la fentre principale de conception :

Ici [Link][Design] dsigne la fentre de conception et [Link] la fentre de code. Il suffit de cliquer sur l'un des onglets pour passer d'une fentre l'autre. Une autre fentre importante prsente sur l'cran de [Link] est la fentre des proprits :

Les proprits exposes dans la fentre sont celles du contrle actuellement slectionn dans la fentre de conception graphique. On a accs diffrentes fentres du projet avec le menu Affichage :

On y retrouve les fentres principales qui viennent d'tre dcrites ainsi que leurs raccourcis clavier.

4.2.3

Excution d'un projet

Alors mme que nous n'avons crit aucun code, nous avons un projet excutable. Faites F5 ou Dboguer/Dmarrer pour l'excuter. Nous obtenons la fentre suivante :

Interfaces graphiques

111

Cette fentre peut tre agrandie, mise en icne, redimensionne et ferme.

4.2.4

Le code gnr par [Link]

Regardons le code (Affichage/Code) de notre application :


Public Class Form1 Inherits [Link] #Region " Code gnr par le Concepteur Windows Form " Public Sub New() [Link]() 'Cet appel est requis par le Concepteur Windows Form. InitializeComponent() 'Ajoutez une initialisation quelconque aprs l'appel InitializeComponent() End Sub 'La mthode substitue Dispose du formulaire pour nettoyer la liste des composants. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then [Link]() End If End If [Link](disposing) End Sub 'Requis par le Concepteur Windows Form Private components As [Link] 'REMARQUE : la procdure suivante est requise par le Concepteur Windows Form 'Elle peut tre modifie en utilisant le Concepteur Windows Form. 'Ne la modifiez pas en utilisant l'diteur de code. <[Link]()> Private Sub InitializeComponent() components = New [Link]() [Link] = "Form2" End Sub #End Region End Class

Une interface graphique drive de la classe de base [Link] :


Public Class Form1 Inherits [Link]

La classe de base Form dfinit une fentre de base avec des boutons de fermeture, agrandissement/rduction, une taille ajustable, ... et gre les vnements sur ces objets graphiques. Le constructeur du formulaire utilise une mthode InitializeComponent dans laquelle les contrles du formulaires sont crs et initialiss.
Public Sub New() [Link]() 'Cet appel est requis par le Concepteur Windows Form. InitializeComponent() 'Ajoutez une initialisation quelconque aprs l'appel InitializeComponent() End Sub

Tout autre travail faire dans le constructeur peut tre fait aprs l'appel InitializeComponent. La mthode InitializeComponent
Interfaces graphiques

112

Private Sub InitializeComponent() ' 'Form1 ' [Link] = New [Link](5, 13) [Link] = New [Link](292, 53) [Link] = "Form1" [Link] = "Form1" End Sub

fixe le titre de la fentre "Form1", sa largeur (292) et sa hauteur (53). Le titre de la fentre est fixe par la proprit Text et les dimensions par la proprit Size. Size est dfini dans l'espace de noms [Link] et est une structure. Pour excuter cette application, il nous faut dfinir le module principal du projet. Pou cela, nous utilisons l'option [Projets/Proprits] :

Dans [Objet de dmarrage], nous indiquons [Form1] qui est le formulaire que nous venons de crer. Pour lancer l'excution, nous utilisons l'option [Dboguer/Dmarrer] :

4.2.5

Compilation dans une fentre dos

Maintenant, essayons de compiler et excuter cette application dans une fentre dos :
dos>dir [Link] 14/03/2004 11:53 514 [Link]

dos>vbc /r:[Link] /r:[Link] [Link] vbc : error BC30420: 'Sub Main' est introuvable dans 'Form1'.

Le compilateur indique qu'il ne trouve pas la procdure [Main]. En effet, [Link] ne l'a pas gnre. Nous l'avons cependant dj rencontre dans les exemples prcdents. Elle a la forme suivante :
Shared Sub Main() ' on lance l'appli [Link](New Form1) ' o Form1 est le formulaire End Sub

Rajoutons dans le code de [[Link]] le code prcdent et recompilons :


dos>vbc /r:[Link] /r:[Link] [Link] Compilateur Microsoft (R) Visual Basic .NET version 7.10.3052.4 [Link](41) : error BC30451: Le nom 'Application' n'est pas dclar. [Link](New Form2) ~~~~~~~~~~~

Cette fois-ci, le nom [Application] n'est pas connu. Cela veut simplement dire que nous n'avons pas import son espace de noms [[Link]]. Rajoutons l'instruction suivante :
Imports [Link] Interfaces graphiques

113

puis recompilons :
dos>vbc /r:[Link] /r:[Link] [Link]

Cette fois-ci, a passe. Excutons :


dos>dir 14/03/2004 14/03/2004 dos>form1 11:53 12:15 514 [Link] 3 584 [Link]

Un formulaire de type Form1 est cr et affich. On peut viter l'ajout de la procdure [Main] en utilisant l'option /m du compilateur qui permet de prciser la classe excuter dans le cas o celle-ci hrite de [Link] :
dos>vbc /r:[Link] /r:[Link] /r:[Link] /m:form2 [Link]

L'option /m:form2 indique que la classe excuter est la classe de nom [form2].

4.2.6

Gestion des vnements

Une fois le formulaire affich, l'application se met l'coute des vnements qui se produisent sur le formulaire (clics, dplacements de souris, ...) et fait excuter ceux que le formulaire gre. Ici, notre formulaire ne gre pas d'autre vnement que ceux grs par la classe de base Form (clics sur boutons fermeture, agrandissement/rduction, changement de taille de la fentre, dplacement de la fentre, ...). Le formulaire gnr utilise un attribut components qui n'est utilis nulle part. La mthode dispose ne sert galement rien ici. Il en de mme de certains espaces de noms ( Collections, ComponentModel, Data) utiliss et de celui dfini pour le projet projet1. Aussi, dans cet exemple le code peut tre simplifi ce qui suit :
Imports System Imports [Link] Imports [Link] Public Class Form1 Inherits [Link] ' constructeur Public Sub New() ' construction du formulaire avec ses composants InitializeComponent() End Sub Private Sub InitializeComponent() ' taille de la fentre [Link] = New [Link](300, 300) ' titre de la fentre [Link] = "Form1" End Sub Shared Sub Main() ' on lance l'appli [Link](New Form1) End Sub End Class

4.2.7

Conclusion

Nous accepterons maintenant tel quel le code gnr par [Link] et nous contenterons d'y ajouter le ntre notamment pour grer les vnements lis aux diffrents contrles du formulaire.

Interfaces graphiques

114

4.3 4.3.1

Fentre avec champ de saisie, bouton et libell Conception graphique

Dans l'exemple prcdent, nous n'avions pas mis de composants dans la fentre. Nous commenons un nouveau projet appel interface2. Pour cela nous suivons la procdure explicite prcdemment pour crer un projet :

Construisons maintenant une fentre avec un bouton, un libell et un champ de saisie :

1 3

Les champs sont les suivants : n 1 2 3 nom type lblSaisie Label txtSaisie TextBox btnAfficher Button rle un libell une zone de saisie pour afficher dans une bote de dialogue le contenu de la zone de saisie txtSaisie

On pourra procder comme suit pour construire cette fentre : cliquez droit dans la fentre en-dehors de tout composant et choisissez l'option Properties pour avoir accs aux proprits de la fentre :

La fentre de proprits apparat alors sur la droite :

Interfaces graphiques

115

Certaines de ces proprits sont noter :


BackColor ForeColor Menu Text FormBorderStyle Font Name

pour fixer la couleur de fond de la fentre pour fixer la couleur des dessins ou du texte sur la fentre pour associer un menu la fentre pour donner un titre la fentre pour fixer le type de fentre pour fixer la police de caractres des critures dans la fentre pour fixer le nom de la fentre

Ici, nous fixons les proprits Text et Name :


Text Name

Saisies & boutons - 1 frmSaisiesBoutons

A l'aide de la barre "Bote outils" slectionnez les composants dont vous avez besoin dposez-les sur la fentre et donnez-leur leurs bonnes dimensions

Une fois le composant choisi dans le "toolbox", utilisez la touche "Echap" pour faire disparatre la barre d'outils, puis dposez et dimensionnez le composant. faites-le pour les trois composants ncessaires : Label, TextBox, Button. Pour aligner et dimensionner correctement les composants, utilisez le menu Format :

Interfaces graphiques

116

Le principe du formatage est le suivant : 1. slectionnez les diffrents composants formater ensemble (touche Ctrl appuye) 2. slectionnez le type de formatage dsir L'option Align composants vous permet d'aligner des

L'option Make Same Size permet de faire que des composants aient la mme hauteur ou la mme largeur :

L'option Horizontal Spacing permet par exemple d'aligner horizontalement des composants avec des intervalles entre eux de mme taille. Idem pour l'option Vertical Spacing pour aligner verticalement. L'option Center in Form permet de centrer un composant horizontalement ou verticalement dans la fentre :

Une fois que les composants sont correctement placs sur la fentre, fixez leurs proprits. Pour cela, cliquez droit sur le composant et prenez l'option Properties : l'tiquette 1 (Label) Slectionnez le composant pour avoir sa fentre de proprits. Dans celle-ci, modifiez les proprits suivantes : name : lblSaisie, text : Saisie le champ de saisie 2 (TextBox) Slectionnez le composant pour avoir sa fentre de proprits. Dans celle-ci, modifiez les proprits suivantes : name : txtSaisie, text : ne rien mettre le bouton 3 (Button) : name : cmdAfficher, text : Afficher la fentre elle-mme : name : frmSaisies&Boutons, text : Saisies & boutons -1

Interfaces graphiques

117

Nous pouvons excuter (ctrl-F5) notre projet pour avoir un premier aperu de la fentre en action :

Fermez la fentre. Il nous reste crire la procdure lie un clic sur le bouton Afficher.

4.3.2
...

Gestion des vnements d'un formulaire

Regardons le code qui a t gnr par le concepteur graphique :

Public Class frmSaisiesBoutons Inherits [Link] ' composants Private components As [Link] = Nothing Friend WithEvents btnAfficher As [Link] Friend WithEvents lblsaisie As [Link] Friend WithEvents txtsaisie As [Link] ' constructeur Public Sub New() InitializeComponent() End Sub ... ' initialisation des composants Private Sub InitializeComponent() ... End Sub End Class

On notera tout d'abord la dclaration particulire des composants : - le mot cl Friend indique une visibilit du composant qui s'tend toutes les classes du projet - le mot cl WithEvents indique que le composant gnre des vnements. Nous nous intressons maintenant la faon de grer ces vnements Faites afficher la fentre de code du formulaire (Affichage/code ou F7) :

La fentre ci-dessus prsente deux listes droulantes (1) et (2). La liste (1) est la liste des composants du formulaire :

Interfaces graphiques

118

La liste(2) la liste des vnements associs au composant slectionn dans (1) :

L'un des vnements associs au composant est affich en gras (ici Click). C'est l'vnement par dfaut du composant. L'accs au gestionnaire de cet vnement particulier peut se faire en double-cliquant sur le composant dans la fentre de conception. [Link] gnre alors automatiquement le squelette du gestionnaire d'vnement dans la fentre de code et positionne l'utilisateur dessus. L'accs aux gestionnaires des autres vnements se fait lui dans la fentre de code, en slectionnant le composant dans la liste (1) et l'vnement dans (2). [Link] gnre alors le squelette du gestionnaire d'vnement ou se positionne dessus s'il tait dj gnr :
Private Sub btnAfficher_Click(ByVal sender As [Link], ByVal e As [Link]) Handles [Link] ... End Sub

Par dfaut, [Link] C_E nomme le gestionnaire de l'vnement E du composant C. On peut changer ce nom si cela nous convient. C'est cependant dconseill. Les dveloppeurs VB gardent en gnral le nom gnr par VB ce qui donne une cohrence du nommage dans tous les programmes VB. L'association de la procdure btnAfficher_Click l'vnement Click du composant btnAfficher ne se fait par le nom de la procdure mais par le mot cl handles :
Handles [Link]

Ci-dessus, le mot cl handles prcise que la procdure gre l'vnement Click du composant btnAfficher. Le gestionnaire d'vnement prcdent a deux paramtres :
sender e

l'objet la source de l'vnement (ici le bouton) un objet EventArgs qui dtaille l'vnement qui s'est produit

Nous n'utiliserons aucun de ces paramtres ici. Il ne nous reste plus qu' complter le code. Ici, nous voulons prsenter une bote de dialogue avec dedans le contenu du champ txtSaisie :
Private Sub btnAfficher_Click(ByVal sender As Object, ByVal e As [Link]) ' on affiche le texte qui a t saisi dans la bote de saisie TxtSaisie [Link]("texte saisi= " + [Link], "Vrification de la saisie", [Link], [Link]) End Sub

Si on excute l'application on obtient la chose suivante :


Interfaces graphiques

119

4.3.3

Une autre mthode pour grer les vnements

Pour le bouton btnAfficher, [Link] a gnr le code suivant :


Private Sub InitializeComponent() ... ' 'btnAfficher ' [Link] = New [Link](102, 48) [Link] = "btnAfficher" [Link] = New [Link](88, 24) [Link] = 2 [Link] = "Afficher" ... End Sub ... ' gestionnaire d'vt clic sur bouton cmdAfficher Private Sub btnAfficher_Click(ByVal sender As [Link], ByVal e As [Link]) Handles [Link] ... End Sub

Nous pouvons associer la procdure btnAfficher_Click l'vnement Click du bouton btnAfficher d'une autre faon :
Private Sub InitializeComponent() ... ' 'btnAfficher ' [Link] = New [Link](102, 48) [Link] = "btnAfficher" [Link] = New [Link](88, 24) [Link] = 2 [Link] = "Afficher" AddHandler [Link], AddressOf btnAfficher_Click ... End Sub ... ' gestionnaire d'vt clic sur bouton cmdAfficher Private Sub btnAfficher_Click(ByVal sender As [Link], ByVal e As [Link]) ... End Sub

La procdure btnAfficher_Click a perdu le mot cl Handles perdant ainsi son association avec l'vnement [Link]. Cette association est dsormais faite l'aide du mot cl AddHandler :
AddHandler [Link], AddressOf btnAfficher_Click

Le code ci-dessus qui sera plac dans la procdure InitializeComponent du formulaire, associe l'vnement [Link] la procdure portant le nom btnAfficher_Click. Par ailleurs, le composant btnAfficher n'a plus besoin du mot cl WithEvents :
Friend btnAfficher As [Link]

Quelle est la diffrence entre les deux mthodes ? le mot cl handles ne permet d'associer un vnement une procdure qu'au moment de la conception. Le concepteur sait l'avance qu'une procdure P doit grer les vnements E1, E2, ... et il crit le code Interfaces graphiques 120 -

Private Sub btnAfficher_Click(ByVal sender As [Link], ByVal e As [Link]) handles E1, E2, ..., En

Il est en effet possible pour une procdure de grer plusieurs vnements. le mot cl addhandler permet d'associer un vnement une procdure au moment de l'excution. Ceci est utile dans un cadre producteur-consommateur d'vnements. Un objet produit un vnement particulier susceptible d'intresser d'autres objets. Ceux-ci s'abonnent auprs du producteur pour recevoir l'vnement (une temprature ayant dpass un seuil critique, par exemple). Au cours de l'excution de l'application, le producteur de l'vnement sera amen excuter diffrentes instructions :
Addhandler E, AddressOf P1 Addhandler E, AddressOf P2 ... Addhandler E, AddressOf Pn

o E est l'vnement produit par le producteur et Pi des procdures appartenant aux diffrents objets consommateurs de cet vnement. Nous aurons l'occasion de revenir sur une application producteur-consommateur d'vnements dans un prochain chapitre.

4.3.4

Conclusion

Des deux projets tudis, nous pouvons conclure qu'une fois l'interface graphique construite avec [Link], le travail du dveloppeur consiste crire les gestionnaires des vnements qu'il veut grer pour cette interface graphique. Nous ne prsenterons dsormais que le code de ceux-ci.

4.4

Quelques composants utiles

Nous prsentons maintenant diverses applications mettant en jeu les composants les plus courants afin de dcouvrir les principales mthodes et proprits de ceux-ci. Pour chaque application, nous prsentons l'interface graphique et le code intressant, notamment les gestionnaires d'vnements.

4.4.1

formulaire Form

Nous commenons par prsenter le composant indispensable, le formulaire sur lequel on dpose des composants. Nous avons dj prsent quelques-unes de ses proprits de base. Nous nous attardons ici sur quelques vnements importants d'un formulaire.
Load Closing Closed

le formulaire est en cours de chargement le formulaire est en cours de fermeture le formulaire est ferm

L'vnement Load se produit avant mme que le formulaire ne soit affich. L'vnement Closing se produit lorsque le formulaire est en cours de fermeture. On peut encore arrter cette fermeture par programmation. Nous construisons un formulaire de nom Form1 sans composant :

Nous traitons les trois vnements prcdents :


Private Sub Form1_Load(ByVal sender As Object, ByVal e As [Link]) Handles [Link] ' chargement initial du formulaire [Link]("Evt Load", "Load") End Sub Private Sub Form1_Closing(ByVal sender As Object, ByVal e As [Link]) Handles [Link] ' le formulaire est en train de se fermer [Link]("Evt Closing", "Closing") ' on demande confirmation Interfaces graphiques

121

Dim rponse As DialogResult = [Link]("Voulez-vous vraiment quitter l'application", "Closing", [Link], [Link]) If rponse = [Link] Then [Link] = True End If End Sub Private Sub Form1_Closed(ByVal sender As Object, ByVal e As [Link]) Handles [Link] ' le formulaire est en train de se fermer [Link]("Evt Closed", "Closed") End Sub

Nous utilisons la fonction MessageBox pour tre averti des diffrents vnements. L'vnement Closing va se produire lorsque l'utilisateur ferme la fentre.

Nous lui demandons alors s'il veut vraiment quitter l'application :

S'il rpond Non, nous fixons la proprit Cancel de l'vnement CancelEventArgs e que la mthode a reu en paramtre. Si nous mettons cette proprit False, la fermeture de la fentre est abandonne, sinon elle se poursuit :

4.4.2

tiquettes Label et botes de saisie TextBox

Nous avons dj rencontr ces deux composants. Label est un composant texte et TextBox un composant champ de saisie. Leur proprit principale est Text qui dsigne soit le contenu du champ de saisie ou le texte du libell. Cette proprit est en lecture/criture. L'vnement habituellement utilis pour TextBox est TextChanged qui signale que l'utilisateur modifi le champ de saisie. Voici un exemple qui utilise l'vnement TextChanged pour suivre les volutions d'un champ de saisie :

1 2 3 n 1 2 3 4 type TextBox Label Button Button nom txtSaisie lblControle cmdEffacer cmdQuitter 4 rle champ de saisie affiche le texte de 1 en temps rel pour effacer les champs 1 et 2 pour quitter l'application

Le code pertinent de cette application est celui des gestionnaires d'vnements :


' clic sur btn quitter Private Sub cmdQuitter_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' clic sur bouton Quitter - on quitte l'application [Link]() End Sub Interfaces graphiques

122

' modification champ txtSaisie Private Sub txtSaisie_TextChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' le contenu du TextBox a chang - on le copie dans le Label lblControle [Link] = [Link] End Sub ' clic sur btn effacer Private Sub cmdEffacer_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on efface le contenu de la bote de saisie [Link] = "" End Sub ' une touche a t tape Private Sub txtSaisie_KeyPress(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on regarde quelle touche a t tape Dim touche As Char = [Link] If touche = [Link] Then [Link]([Link], "Contrle", [Link], [Link]) [Link] = True End If End Sub

On notera la faon de terminer l'application dans la procdure cmdQuitter_Click : [Link](). L'exemple suivant utilise un TextBox multilignes :

3 La liste des contrles est la suivante : n 1 2 3 type TextBox TextBox Button nom txtMultiLignes txtAjout btnAjouter

rle champ de saisie multilignes champ de saisie monoligne Ajoute le contenu de 2 1

Pour qu'un TextBox devienne multilignes on positionne les proprits suivantes du contrle :
Multiline=true ScrollBars=( None, Horizontal, Vertical, Both) AcceptReturn=(True, False) AcceptTab=(True, False)

pour accepter plusieurs lignes de texte pour demander ce que le contrle ait des barres de dfilement (Horizontal, Vertical, Both) ou non (None) si gal true, la touche Entre fera passer la ligne si gal true, la touche Tab gnrera une tabulation dans le texte

Le code utile est celui qui traite le clic sur le bouton [Ajouter] et celui qui traite la modification du champ de saisie [txtAjout] :
' vt btnAjouter_Click Private Sub btnAjouter_Click1(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' ajout du contenu de txtAjout celui de txtMultilignes [Link] &= [Link] [Link] = "" End Sub Interfaces graphiques

123

' evt txtAjout_TextChanged Private Sub txtAjout_TextChanged1(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on fixe l'tat du bouton Ajouter [Link] = [Link]() <> "" End Sub

4.4.3

listes droulantes ComboBox


1

Un composant ComboBox est une liste droulante double d'une zone de saisie : l'utilisateur peut soit choisir un lment dans (2) soit taper du texte dans (1). Il existe trois sortes de ComboBox fixes par la proprit Style :
Simple DropDown DropDownList

liste non droulante avec zone d'dition liste droulante avec zone d'dition liste droulante sans zone d'dition

Par dfaut, le type d'un ComboBox est DropDown. Pour dcouvrir la classe ComboBox, tapez ComboBox dans l'index de l'aide (Aide/Index). La classe ComboBox a un seul constructeur : Public Sub New() cre un objet ComboBox vide

Les lments du ComboBox sont disponibles dans la proprit Items :


Public ReadOnly Property Items As [Link]

C'est une proprit indexe, Items(i) dsignant l'lment i du Combo. Soit C un combo et [Link] sa liste d'lments. On a les proprits suivantes :
[Link] [Link](i) [Link](object o) [Link](object() objets) [Link](int i, object o) [Link](int i) [Link](object o) [Link]() [Link](object o)

nombre d'lments du combo lment i du combo ajoute l'objet o en dernier lement du combo ajoute un tableau d'objets en fin de combo ajoute l'objet o en position i du combo enlve l'lment i du combo enlve l'objet o du combo supprime tous les lments du combo rend la position i de l'objet o dans le combo

On peut s'tonner qu'un combo puisse contenir des objets alors qu'habituellement il contient des chanes de caractres. Au niveau visuel, ce sera le cas. Si un ComboBox contient un objet obj, il affiche la chane [Link](). On se rappelle que tout objet une mthode ToString hrite de la classe object et qui rend une chane de caractres "reprsentative" de l'objet. L'lment slectionn
Interfaces graphiques

124

dans le combo C est [Link] ou [Link]([Link]) o [Link] est le n de l'lment slectionn, ce n partant de zro pour le premier lment. Lors du choix d'un lment dans la liste droulante se produit l'vnement SelectedIndexChanged qui peut tre alors utilis pour tre averti du changement de slection dans le combo. Dans l'application suivante, nous utilisons cet vnement pour afficher l'lment qui a t slectionn dans la liste.

Nous ne prsentons que le code pertinent de la fentre. Dans le constructeur du formulaire nous remplissons le combo :
Public Sub New() ' cration formulaire InitializeComponent() ' remplissage combo [Link](New String() {"zro", "un", "deux", "trois", "quatre"}) ' nous slectionnons le 1er lment de la liste [Link] = 0 End Sub

Nous traitons l'vnement SelectedIndexChanged du combo qui signale un nouvel lment slectionn :
Private Sub cmbNombres_SelectedIndexChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' l'lment slectionn a chang - on l'affiche [Link]("Elment slectionn : (" & [Link] & "," & [Link] & ")", "Combo", [Link], [Link]) End Sub

4.4.4

composant ListBox

On se propose de construire l'interface suivante :

0 1 5 3 4 2

Les composants de cette fentre sont les suivants : n 0 1 2 type Form TextBox Button nom Form1 txtSaisie btnAjouter rle/proprits formulaire - BorderStyle=FixedSingle champ de saisie bouton permettant d'ajouter le contenu du champ de saisie 1 dans la liste 3 125

Interfaces graphiques

3 4 5 6 7 8

ListBox ListBox Button Button Button Button

listBox1 listBox2 btn1TO2 cmd2T0 btnEffacer1 btnEffacer2

liste 1 liste 2 transfre les lments slectionns de liste 1 vers liste 2 fait l'inverse vide la liste 1 vide la liste 2

Fonctionnement L'utilisateur tape du texte dans le champ 1. Il l'ajoute la liste 1 avec le bouton Ajouter (2). Le champ de saisie (1) est alors vid et l'utilisateur peut ajouter un nouvel lment. Il peut transfrer des lments d'une liste l'autre en slectionnant l'lment transfrer dans l'une des listes et en choississant le bouton de transfert adquat 5 ou 6. L'lment transfr est ajout la fin de la liste de destination et enlev de la liste source. Il peut double-cliquer sur un lment de la liste 1. Ce lment est alors transfr dans la bote de saisie pour modification et enlev de la liste 1.

Les boutons sont allums ou teints selon les rgles suivantes : le bouton Ajouter n'est allum que s'il y a un texte non vide dans le champ de saisie le bouton 5 de transfert de la liste 1 vers la liste 2 n'est allum que s'il y a un lment slectionn dans la liste 1 le bouton 6 de transfert de la liste 2 vers la liste 1 n'est allum que s'il y a un lment slectionn dans la liste 2 les boutons 7 et 8 d'effacement des listes 1 et 2 ne sont allums que si la liste effacer contient des lments. Dans les conditions prcdentes, tous les boutons doivent tre teints lors du dmarrage de l'application. C'est la proprit Enabled des boutons qu'il faut alors positionner false. On peut le faire au moment de la conception ce qui aura pour effet de gnrer le code correspondant dans la mthode InitializeComponent ou de le faire nous-mmes dans le constructeur comme ci-dessous :
Public Sub New() ' cration initiale du formulaire InitializeComponent() ' initialisations complmentaires ' on inhibe un certain nombre de boutons [Link] = False [Link] = False [Link] = False [Link] = False [Link] = False End Sub

L'tat du bouton Ajouter est contrl par le contenu du champ de saisie. C'est l'vnement TextChanged qui nous permet de suivre les changements de ce contenu :
' chgt dans champ txtsaisie Private Sub txtSaisie_TextChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' le contenu de txtSaisie a chang ' le bouton Ajouter n'est allum que si la saisie est non vide [Link] = [Link]() <> "" End Sub

L'tat des boutons de transfert dpend du fait qu'un lment a t slectionn ou non dans la liste qu'ils contrlent :
' chgt de l'lment slectionn sans listbox1 Private Sub listBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' un lment a t slectionn ' on allume le bouton de transfert 1 vers 2 [Link] = True End Sub ' chgt de l'lment slectionn sans listbox2 Private Sub listBox2_SelectedIndexChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' un lment a t slectionn ' on allume le bouton de transfert 2 vers 1 [Link] = True End Sub

Le code associ au clic sur le bouton Ajouter est le suivant :


' clic sur btn Ajouter Interfaces graphiques

126

Private Sub btnAjouter_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' ajout d'un nouvel lment la liste 1 [Link]([Link]()) ' raz de la saisie [Link] = "" ' Liste 1 n'est pas vide [Link] = True ' retour du focus sur la bote de saisie [Link]() End Sub

On notera la mthode Focus qui permet de mettre le "focus" sur un contrle du formulaire. Le code associ au clic sur les boutons Effacer :
' clic sur btn Effacer1 Private Sub btnEffacer1_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on efface la liste 1 [Link]() [Link] = False End Sub ' clic sur btn effacer2 Private Sub btnEffacer2_Click(ByVal sender As Object, ByVal e As [Link]) ' on efface la liste 2 [Link]() [Link] = False End Sub

Le code de transfert des lments slectionns d'une liste vers l'autre :


' clic sur btn btn1to2 Private Sub btn1TO2_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' transfert de l'lment slectionn dans Liste 1 vers Liste 2 transfert(listBox1, listBox2) ' boutons Effacer [Link] = True [Link] = [Link] <> 0 ' boutons de transfert [Link] = False [Link] = False End Sub ' clic sur btn btn2to1 Private Sub btn2TO1_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' transfert de l'lment slectionn dans Liste 2 vers Liste 1 transfert(listBox2, listBox1) ' boutons Effacer [Link] = True [Link] = [Link] <> 0 ' boutons de transfert [Link] = False [Link] = False End Sub ' transfert Private Sub transfert(ByVal l1 As ListBox, ByVal l2 As ListBox) ' transfert de l'lment slectionn de la liste 1 vers la liste l2 ' un lment slectionn ? If [Link] = -1 Then Return ' ajout dans l2 [Link]([Link]) ' suppression dans l1 [Link]([Link]) End Sub

Tout d'abord, on cre une mthode


Private Sub transfert(ByVal l1 As ListBox, ByVal l2 As ListBox)

qui transfre dans la liste l2 l'lment slectionn dans la liste l1. Cela nous permet d'avoir une seule mthode au lieu de deux pour transfrer un lment de listBox1 vers listBox2 ou de listBox2 vers listBox1. Avat de faire le transfert, on s'assure qu'il y a bien un lment slectionn dans la liste l1 :
' un lment slectionn ? Interfaces graphiques

127

If [Link] = -1 Then Return

La proprit SelectedIndex vaut -1 si aucun lment n'est actuellement slectionn. Dans les procdures
Private Sub btnXTOY_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link]

on opre le transfert de la liste X vers la liste Y et on change l'tat de certains boutons pour reflter le nouvel tat des listes.

4.4.5

cases cocher CheckBox, boutons radio ButtonRadio

Nous nous proposons d'crire l'application suivante :

1 2 3

Les composants de la fentre sont les suivants : 1 2 3 n type RadioButton CheckBox ListBox nom radioButton1 radioButton2 radioButton3 chechBox1 chechBox2 chechBox3 lstValeurs rle 3 boutons radio 3 cases cocher une liste

Si on construit les trois boutons radio l'un aprs l'autre, ils font partie par dfaut d'un mme groupe. Aussi lorsque l'un est coch, les autres ne le sont pas. L'vnement qui nous intresse pour ces six contrles est l'vnement CheckChanged indiquant que l'tat de la case cocher ou du bouton radio a chang. Cet tat est reprsent dans les deux cas par la proprit boolenne Check qui vrai signifie que le contrle est coch. Nous avons ici utilis une seule mthode pour traiter les six vnements CheckChanged, la mthode affiche :
' affiche Private Sub affiche(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link], [Link], [Link], _ [Link], [Link], [Link] ' affiche l'tat du bouton radio ou de la case cocher ' est-ce un checkbox ? If (TypeOf (sender) Is CheckBox) Then Dim chk As CheckBox = CType(sender, CheckBox) [Link](0, [Link] & "=" & [Link]) End If ' est-ce un radiobutton ? If (TypeOf (sender) Is RadioButton) Then Dim rdb As RadioButton = CType(sender, RadioButton) [Link](0, [Link] & "=" & [Link]) End If End Sub

La syntaxe TypeOf (sender) Is CheckBox permet de vrifier si l'objet sender est de type CheckBox. Cela nous permet ensuite de faire un transtypage vers le type exact de sender. La mthode affiche crit dans la liste lstValeurs le nom du composant l'origine de l'vnement et la valeur de sa proprit Checked. A l'excution, on voit qu'un clic sur un bouton radio provoque deux vnements CheckChanged : l'un sur l'ancien bouton coch qui passe "non coch" et l'autre sur le nouveau bouton qui passe "coch".

4.4.6

variateurs ScrollBar
128

Interfaces graphiques

Il existe plusieurs types de variateur : le variateur horizontal (hScrollBar), le variateur vertical (vScrollBar), l'incrmenteur (NumericUpDown).

Ralisons l'application suivante :

1 2

3 4

n 1 2 3 4

type hScrollBar hScrollBar TextBox NumericUpDown

nom hScrollBar1 hScrollBar2 txtValeur incrmenteur

rle un variateur horizontal un variateur horizontal qui suit les variations du variateur 1 affiche la valeur du variateur horizontal ReadOnly=true pour empcher toute saisie permet de fixer la valeur du variateur 2

Un variateur ScrollBar permet l'utilisateur de choisir une valeur dans une plage de valeurs entires symbolise par la "bande" du variateur sur laquelle se dplace un curseur. La valeur du variateur est disponible dans sa proprit Value. Pour un variateur horizontal, l'extrmit gauche reprsente la valeur minimale de la plage, l'extrmit droite la valeur maximale, le curseur la valeur actuelle choisie. Pour un variateur vertical, le minimum est reprsent par l'extrmit haute, le maximum par l'extrmit basse. Ces valeurs sont reprsentes par les proprits Minimum et Maximum et valent par dfaut 0 et 100. Un clic sur les extrmits du variateur fait varier la valeur d'un incrment (positif ou ngatif) selon l'extrmit clique appele SmallChange qui est par dfaut 1. Un clic de part et d'autre du curseur fait varier la valeur d'un incrment (positif ou ngatif) selon l'extrmit clique appele LargeChange qui est par dfaut 10. Lorsqu'on clique sur l'extrmit suprieure d'un variateur vertical, sa valeur diminue. Cela peut surprendre l'utilisateur moyen qui s'attend normalement voir la valeur "monter". On rgle ce problme en donnant une valeur ngative aux proprits SmallChange et LargeChange Ces cinq proprits (Value, Minimum, Maximum, SmallChange, LargeChange) sont accessibles en lecture et criture. L'vnement principal du variateur est celui qui signale un changement de valeur : l'vnement Scroll.

Un composant NumericUpDown est proche du variateur : il a lui aussi les proprits Minimum, Maximum et Value, par dfaut 0, 100, 0. Mais ici, la proprit Value est affiche dans une bote de saisie faisant partie intgrante du contrle. L'utilisateur peut lui mme modifier cette valeur sauf si on a mis la proprit ReadOnly du contrle vrai. La valeur de l'incrment est fix par la proprit Increment, par dfaut 1. L'vnement principal du composant NumericUpDown est celui qui signale un changement de valeur : l'vnement ValueChanged. Le code utile de notre application est le suivant : Le formulaire est mis en forme lors de sa construction :
' constructeur Public Sub New() ' cration initiale du formulaire InitializeComponent() ' on donne au variateur 2 les mmes caractristiques qu'au variateur 1 [Link] = [Link] [Link] = [Link] [Link] = [Link] [Link] = [Link] [Link] = [Link] ' idem pour l'incrmenteur [Link] = [Link] [Link] = [Link] [Link] = [Link] [Link] = [Link] Interfaces graphiques

129

' on donne au TextBox la valeur du variateur 1 [Link] = "" & [Link] End Sub

Le gestionnaire qui suit les variations de valeur du variateur 1 :


' gestion variateur hscrollbar1 Private Sub hScrollBar1_Scroll(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' changement de valeur du variateur 1 ' on rpercute sa valeur sur le variateur 2 et sur le textbox TxtValeur [Link] = [Link] [Link] = "" & [Link] End Sub

Le gestionnaire qui suit les variations de valeur du variateur 2 :


' gestion variateur hscrollbar2 Private Sub hScrollBar2_Scroll(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on inhibe tout changement du variateur 2 ' en le forant garder la valeur du variateur 1 [Link] = [Link] End Sub

Le gestionnaire qui suit les variations du contrle incrmenteur :


' gestion incrmenteur Private Sub incrmenteur_ValueChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on fixe la valeur du variateur 2 [Link] = CType([Link], Integer) End Sub

4.5

vnements souris

Lorsqu'on dessine dans un conteneur, il est important de connatre la position de la souris pour par exemple afficher un point lors d'un clic. Les dplacements de la souris provoquent des vnements dans le conteneur dans lequel elle se dplace.

MouseEnter MouseLeave MouseMove MouseDown MouseUp DragDrop DragEnter DragLeave DragOver

la souris vient d'entrer dans le domaine du contrle la souris vient de quitter le domaine du contrle la souris bouge dans le domaine du contrle Pression sur le bouton gauche de la souris Relchement du bouton gauche de la souris l'utilisateur lche un objet sur le contrle l'utilisateur entre dans le domaine du contrle en tirant un objet l'utilisateur sort du domaine du contrle en tirant un objet l'utilisateur passe au-dessus domaine du contrle en tirant un objet

Voici un programme permettant de mieux apprhender quels moments se produisent les diffrents vnements souris :

Interfaces graphiques

130

1 2 3

type Label ListBox Button

nom lblPosition lstEvts btnEffacer

rle pour afficher la position de la souris dans le formulaire 1, la liste 2 ou le bouton 3 pour afficher les vts souris autres que MouseMove pour effacer le contenu de 2

Les gestionnaires d'vnements sont les suivants. Pour suivre les dplacements de la souris sur les trois contrles, on n'crit qu'un seul gestionnaire :
' vt form1_mousemove Private Sub Form1_MouseMove(ByVal sender As [Link], ByVal e As [Link]) _ Handles [Link], [Link], [Link], [Link] ' mvt souris - on affiche les coordonnes (X,Y) de celle-ci [Link] = "(" & e.X & "," & e.Y & ")" End Sub

Il faut savoir qu' chaque fois que la souris entre dans le domaine d'un contrle, son systme de coordonnes change. Son origine (0,0) est le coin suprieur gauche du contrle sur lequel elle se trouve. Ainsi l'excution, lorsqu'on passe la souris du formulaire au bouton, on voit clairement le changement de coordonnes. Afin de mieux voir ces changements de domaine de la souris, on peut utiliser la proprit Cursor des contrles :

Cette proprit permet de fixer la forme du curseur de souris lorsque celle-ci entre dans le domaine du contrle. Ainsi dans notre exemple, nous avons fix le curseur Default pour le formulaire lui-mme, Hand pour la liste 2 et No pour le bouton 3 comme le montrent les copies d'cran ci-dessous.

Interfaces graphiques

131

Dans la mthode [InitializeComponent], le code gnr par ces choix est le suivant :
[Link] = [Link] [Link] = [Link]

Par ailleurs, pour dtecter les entres et sorties de la souris sur la liste 2, nous traitons les vnements MouseEnter et MouseLeave de cette mme liste :
' evt lstEvts_MouseEnter Private Sub lstEvts_MouseEnter(ByVal sender As [Link], ByVal e As [Link]) _ Handles [Link] affiche("MouseEnter sur liste") End Sub ' evt lstEvts_MouseLeave Private Sub lstEvts_MouseLeave(ByVal sender As [Link], ByVal e As [Link]) _ Handles [Link] affiche("MouseLeave sur liste") End Sub ' affiche Private Sub affiche(ByVal message As String) ' on affiche le message en haut de la liste des evts [Link](0, message) End Sub

Pour traiter les clics sur le formulaire, nous traitons les vnements MouseDown et MouseUp :
' vt Form1_MouseDown Private Sub Form1_MouseDown(ByVal sender As [Link], ByVal e As [Link]) _ Handles [Link] affiche("MouseDown sur formulaire") End Sub ' vt Form1_MouseUp Private Sub Form1_MouseUp(ByVal sender As [Link], ByVal e As [Link]) _ Handles [Link] affiche("MouseUp sur formulaire") End Sub

Interfaces graphiques

132

Enfin, le code du gestionnaire de clic sur le bouton Effacer :


' vt btnEffacer_Click Private Sub btnEffacer_Click(ByVal sender As [Link], ByVal e As [Link]) _ Handles [Link] ' efface la liste des evts [Link]() End Sub

4.6

Crer une fentre avec menu

Voyons maintenant comment crer une fentre avec menu. Nous allons crer la fentre suivante :

1 Le contrle 1 est un TextBox en lecture seule (ReadOnly=true) et de nom txtStatut. L'arborescence du menu est la suivante :

Les options de menu sont des contrles comme les autres composants visuels et ont des proprits et vnements. Par exemple le tableau des proprits de l'option de menu A1 :

Deux proprits sont utilises dans notre exemple :


Name Text

le nom du contrle menu le libell de l'option de menu

Les proprits des diffrentes options de menu de notre exemple sont les suivantes : Name
mnuA

Text options A 133

Interfaces graphiques

mnuA1 mnuA2 mnuA3 mnuB mnuB1 mnuSep1 mnuB2 mnuB3 mnuB31 mnuB32

A1 A2 A3 options B B1 - (sparateur) B2 B3 B31 B32

Pour crer un menu, on choisit le composant "MainMenu" dans la barre "ToolBox" :

On a alors un menu vide qui s'installe sur le formulaire avec des cases vides intitules "Type Here". Il suffit d'y indiquer les diffrentes options du menu :

Pour insrer un sparateur entre deux options comme ci-dessus entre les options B1 et B2, positionnez-vous l'emplacement du sparateur dans le menu, cliquez droit et prenez l'option Insert Separator :

Si on lance l'application par ctrl-F5, on obtient un formulaire avec un menu qui pour l'instant ne fait rien. Les options de menu sont traites comme des composants : elles ont des proprits et des vnements. Dans [fentre de code], slectionnez le composant mnuA1 puis slectionnez les vnements associs :

Interfaces graphiques

134

Si ci-dessus on gnre l'vnement Click, [Link] gnre automatiquement la procdure suivante :


Private Sub mnuA1_Click(ByVal sender As Object, ByVal e As [Link]) Handles [Link] .... End Sub

Nous pourrions procder ainsi pour toutes les options de menu. Ici, la mme procdure peut tre utilise pour toutes les options. Aussi renomme-t-on la procdure prcdente affiche et nous dclarons les vnements qu'elle gre :
Private Sub affiche(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link], [Link], [Link], [Link], [Link], [Link] ' affiche dans le TextBox le nom du sous-menu choisi [Link] = (CType(sender, MenuItem)).Text End Sub

Dans cette mthode, nous nous contentons d'afficher la proprit Text de l'option de menu la source de l'vnement. La source de l'vnement sender est de type object. Les options de menu sont elles de type MenuItem, aussi est-on oblig ici de faire un transtypage de object vers MenuItem. Excutez l'application et slectionnez l'option A1 pour obtenir le message suivant :

Le code utile de cette application, outre celui de la mthode affiche, est celui de la construction du menu dans le constructeur du formulaire (InitializeComponent) :
Private Sub InitializeComponent() Me.mainMenu1 = New [Link] [Link] = New [Link] Me.mnuA1 = New [Link] Me.mnuA2 = New [Link] Me.mnuA3 = New [Link] [Link] = New [Link] Me.mnuB1 = New [Link] Me.mnuB2 = New [Link] Me.mnuB3 = New [Link] Me.mnuB31 = New [Link] Me.mnuB32 = New [Link] [Link] = New [Link] Me.mnuSep1 = New [Link] [Link]() ' ' mainMenu1 ' [Link](New [Link]() {[Link], [Link]}) ' ' mnuA ' [Link] = 0 [Link](New [Link]() {Me.mnuA1, Me.mnuA2, Me.mnuA3}) [Link] = "Options A" ' ' mnuA1 ' [Link] = 0 [Link] = "A1"

'

Interfaces graphiques

135

'

' mnuA2 ' [Link] = 1 [Link] = "A2" ' mnuA3 ' [Link] = 2 [Link] = "A3"

' mnuB ' [Link] = 1 [Link](New [Link]() {Me.mnuB1, Me.mnuSep1, Me.mnuB2, Me.mnuB3}) [Link] = "Options B" ' ' mnuB1 ' [Link] = 0 [Link] = "B1" ' mnuB2 ' [Link] = 2 [Link] = "B2" ' ' mnuB3 ' [Link] = 3 [Link](New [Link]() {Me.mnuB31, Me.mnuB32}) [Link] = "B3" ' mnuB31 ' [Link] = 0 [Link] = "B31" ' ' mnuB32 ' [Link] = 1 [Link] = "B32"

'

'

'

'

' txtStatut ' [Link] = New [Link](8, 8) [Link] = "txtStatut" [Link] = True [Link] = New [Link](112, 20) [Link] = 0 [Link] = "" ' ' mnuSep1 ' [Link] = 1 [Link] = "-" ' ' Form1 ' [Link] = New [Link](5, 13) [Link] = New [Link](136, 42) [Link](txtStatut) [Link] = Me.mainMenu1 [Link] = "Form1" [Link] = "Menus" [Link](False) End Sub

On notera l'instruction qui associe le menu au formulaire :


[Link] = Me.mainMenu1

4.7

Composants non visuels


136

Interfaces graphiques

Nous nous intressons maintenant un certain nombre de composants non visuels : on les utilise lors de la conception mais on ne les voit pas lors de l'excution.

4.7.1

Botes de dialogue OpenFileDialog et SaveFileDialog

Nous allons construire l'application suivante :

Les contrles sont les suivants : N 1 2 3 4 type TextBox multilignes Button Button Button nom txtTexte btnSauvegarde r btnCharger btnEffacer rle texte tap par l'utilisateur ou charg partir d'un fichier permet de sauvegarder le texte de 1 dans un fichier texte permet de charger le contenu d'un fichier texte dans 1 efface le contenu de 1

Deux contrles non visuels sont utiliss :

Lorsqu'ils sont pris dans le "ToolBox " et dposs sur le formulaire, ils sont placs dans une zone part en bas du formulaire. Les composants "Dialog" sont pris dans le "ToolBox" :

Le code du bouton Effacer est simple :


Private Sub btnEffacer_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on efface la bote de saisie [Link] = "" End Sub

La classe SaveFileDialog est dfinie comme suit :

Interfaces graphiques

137

Elle drive de plusieurs niveaux de classe. De ces nombreuses proprits et mthodes nous retiendrons les suivantes :
string Filter int FilterIndex string InitialDirectory string FileName [Link] log()

les types de fichiers proposs dans la liste droulante des types de fichiers de la bote de dialogue le n du type de fichier propos par dfaut dans la liste ci-dessus. Commence 0. le dossier prsent initialement pour la sauvegarde du fichier le nom du fichier de sauvegarde indiqu par l'utilisateur mthode qui affiche la bote de dialogue de sauvegarde. Rend un rsultat de type DialogResult.

La mthode ShowDialog affiche une bote de dialogue analogue la suivante :

3 1

1 2 3 4

liste droulante construite partir de la proprit Filter. Le type de fichier propos par dfaut est fix par FilterIndex dossier courant, fix par InitialDirectory si cette proprit a t renseigne nom du fichier choisi ou tap directement par l'utilisateur. Sera disponible dans la proprit FileName boutons Enregistrer/Annuler. Si le bouton Enregistrer est utilis, la fonction ShowDialog rend le rsultat [Link]

La procdure de sauvegarde peut s'crire ainsi :


Private Sub btnSauvegarder_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] Interfaces graphiques

138

' on sauvegarde la bote de saisie dans un fichier texte ' on paramtre la bote de dialogue savefileDialog1 [Link] = [Link] [Link] = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*" [Link] = 0 ' on affiche la bote de dialogue et on rcupre son rsultat If [Link]() = [Link] Then ' on rcupre le nom du fichier Dim nomFichier As String = [Link] Dim fichier As StreamWriter = Nothing Try ' on ouvre le fichier en criture fichier = New StreamWriter(nomFichier) ' on crit le texte dedans [Link]([Link]) Catch ex As Exception ' problme [Link]("Problme l'criture du fichier (" + [Link] + ")", "Erreur", [Link], [Link]) Return Finally ' on ferme le fichier Try [Link]() Catch End Try End Try End If End Sub

On fixe le dossier initial au dossier qui contient l'excutable de l'application :

[Link] = [Link]

On fixe les types de fichiers prsenter

[Link] = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"

On notera la syntaxe des filtres filtre1|filtre2|..|filtren avec filtrei= Texte|modle de fichier. Ici l'utilisateur aura le choix entre les fichiers *.txt et *.*. On fixe le type de fichier prsenter au dbut

[Link] = 0

Ici, ce sont les fichiers de type *.txt qui seront prsents tout d'abord l'utilisateur. La bote de dialogue est affiche et son rsultat rcupr

If [Link]() = [Link] Then

Pendant que la bote de dialogue est affiche, l'utilisateur n'a plus accs au formulaire principal (bote de dialogue dite modale). L'utilisateur fixe le nom du fichier sauvegarder et quitte la bote soit par le bouton Enregistrer, soit par le bouton Annuler soit en fermant la bote. Le rsultat de la mthode ShowDialog est [Link] uniquement si l'utilisateur a utilis le bouton Enregistrer pour quitter la bote de dialogue. Ceci fait, le nom du fichier crer est maintenant dans la proprit FileName de l'objet saveFileDialog1. On est alors ramen la cration classique d'un fichier texte. On y crit le contenu du TextBox : [Link] tout en grant les exceptions qui peuvent se produire.

La classe OpenFileDialog est trs proche de la classe SaveFileDialog et drive de la mme ligne de classes. De ces proprits et mthodes nous retiendrons les suivantes :
string Filter int FilterIndex string InitialDirectory string FileName [Link]()

les types de fichiers proposs dans la liste droulante des types de fichiers de la bote de dialogue le n du type de fichier propos par dfaut dans la liste ci-dessus. Commence 0. le dossier prsent initialement pour la recherche du fichier ouvrir le nom du fichier ouvrir indiqu par l'utilisateur mthode qui affiche la bote de dialogue de sauvegarde. Rend un rsultat de type DialogResult.

La mthode ShowDialog affiche une bote de dialogue analogue la suivante :

Interfaces graphiques

139

3 1

1 2 3 4

liste droulante construite partir de la proprit Filter. Le type de fichier propos par dfaut est fix par FilterIndex dossier courant, fix par InitialDirectory si cette proprit a t renseigne nom du fichier choisi ou tap directement par l'utilisateur. Sera disponible dans la proprit FileName boutons Ouvrir/Annuler. Si le bouton Ouvrir est utilis, la fonction ShowDialog rend le rsultat [Link]

La procdure d'ouverture peut s'crire ainsi :


Private Sub btnCharger_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' on charge un fichier texte dans la bote de saisie ' on paramtre la bote de dialogue openfileDialog1 [Link] = [Link] [Link] = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*" [Link] = 0 ' on affiche la bote de dialogue et on rcupre son rsultat If [Link]() = [Link] Then ' on rcupre le nom du fichier Dim nomFichier As String = [Link] Dim fichier As StreamReader = Nothing Try ' on ouvre le fichier en lecture fichier = New StreamReader(nomFichier) ' on lit tout le fichier et on le met dans le TextBox [Link] = [Link]() Catch ex As Exception ' problme [Link]("Problme la lecture du fichier (" + [Link] + ")", "Erreur", [Link], [Link]) Return Finally ' on ferme le fichier Try [Link]() Catch End Try End Try End If End Sub

On fixe le dossier initial au dossier qui contient l'excutable de l'application :


[Link]=[Link]

On fixe les types de fichiers prsenter


[Link] = "Fichiers texte (*.txt)|*.txt|Tous les fichiers (*.*)|*.*"

Interfaces graphiques

140

On fixe le type de fichier prsenter au dbut


[Link] = 0

Ici, ce sont les fichiers de type *.txt qui seront prsents tout d'abord l'utilisateur. La bote de dialogue est affiche et son rsultat rcupr
If [Link]() = [Link] Then

Pendant que la bote de dialogue est affiche, l'utilisateur n'a plus accs au formulaire principal (bote de dialogue dite modale). L'utilisateur fixe le nom du fichier ouvrir et quitte la bote soit par le bouton Ouvrir, soit par le bouton Annuler soit en fermant la bote. Le rsultat de la mthode ShowDialog est [Link] uniquement si l'utilisateur a utilis le bouton Ouvrir pour quitter la bote de dialogue. Ceci fait, le nom du fichier crer est maintenant dans la proprit FileName de l'objet openFileDialog1. On est alors ramen la lecture classique d'un fichier texte. On notera la mthode qui permet de lire la totalit d'un fichier :
[Link]=[Link]

le contenu du fichier est mis dans le TextBox txtTexte. On gre les exceptions qui peuvent se produire.

4.7.2

Botes de dialogue FontColor et ColorDialog

Nous continuons l'exemple prcdent en prsentant deux nouveaux boutons :

N 6 7 Button Button

type

nom btnCouleur btnPolice

rle pour fixer la couleur des caractres du TextBox pour fixer la police de caractres du TextBox

Nous dposons sur le formulaire un contrle ColorDialog et un contrle FontDialog :

Les classes FontDialog et ColorDialog ont une mthode ShowDialog analogue la mthode ShowDialog des classes OpenFileDialog et SaveFileDialog. La mthode ShowDialog de la classe ColorDialog permet de choisir une couleur :

Interfaces graphiques

141

Si l'utilisateur quitte la bote de dialogue avec le bouton OK, le rsultat de la mthode ShowDialog est [Link] et la couleur choisie est dans la proprit Color de l'objet ColorDialog utilis. La mthode ShowDialog de la classe FontDialog permet de choisir une police de caractres :

Si l'utilisateur quitte la bote de dialogue avec le bouton OK, le rsultat de la mthode ShowDialog est [Link] et la police choisie est dans la proprit Font de l'objet FontDialog utilis. Nous avons les lments pour traiter les clics sur les boutons Couleur et Police :
Private Sub btnCouleur_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' choix d'une couleur de texte If [Link]() = [Link] Then ' on change la proprit forecolor du TextBox [Link] = [Link] End If End Sub Private Sub btnPolice_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' choix d'une police de caractres If [Link]() = [Link] Then Interfaces graphiques

142

' on change la proprit font du TextBox [Link] = [Link] End If End Sub

4.7.3

Timer

Nous nous proposons ici d'crire l'application suivante :

n Type 1 TextBox, ReadOnly=true 2 Button 3 Timer Le chronomtre en marche :

Nom txtChrono btnArretMarche timer1

Rle affiche un chronomtre bouton Arrt/Marche du chronomtre composant mettant ici un vnement toutes les secondes

Le chronomtre arrt :

Pour changer toutes les secondes le contenu du TextBox txtChrono, il nous faut un composant qui gnre un vnement toutes les secondes, vnement qu'on pourra intercepter pour mettre jour l'affichage du chronomtre. Ce composant c'est le Timer :

Une fois ce composant install sur le formulaire (dans la partie des composants non visuels), un objet de type Timer est cr dans le constructeur du formulaire. La classe [Link] est dfinie comme suit :

Interfaces graphiques

143

De ses proprits nous ne retiendrons que les suivantes :


Interval Tick Enabled

nombre de millisecondes au bout duquel un vnement Tick est mis. l'vnement produit la fin de Interval millisecondes rend le timer actif (true) ou inactif (false)

Dans notre exemple le timer s'appelle timer1 et [Link] est mis 1000 ms (1s). L'vnement Tick se produira donc toutes les secondes. Le clic sur le bouton Arrt/Marche est trait par la procdure suivante :
Private Sub btnArretMarche_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' arrt ou marche ? If [Link] = "Marche" Then ' on note l'heure de dbut dbut = [Link] ' on l'affiche [Link] = "[Link]" ' on lance le timer [Link] = True ' on change le libell du bouton [Link] = "Arrt" ' fin Return End If ' If [Link] = "Arrt" Then ' arrt du timer [Link] = False ' on change le libell du bouton [Link] = "Marche" ' fin Return End If End Sub Private Sub timer1_Tick(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' une seconde s'est coule Dim maintenant As DateTime = [Link] Dim dure As TimeSpan = DateTime.op_Subtraction(maintenant, dbut) [Link] = "" + [Link]("d2") + ":" + [Link]("d2") + ":" + [Link]("d2") End Sub

Le libell du bouton Arret/Marche est soit "Arrt" soit "Marche". On est donc oblig de faire un test sur ce libell pour savoir quoi faire. dans le cas de "Marche", on note l'heure de dbut dans une variable qui est une variable globale de l'objet formulaire, le timer est lanc (Enabled=true) et le libell du bouton passe "Arrt". dans le cas de "Arrt", on arrte le timer (Enabled=false) et on passe le libell du bouton "Marche".
Public Class Timer1 Inherits [Link] Private WithEvents timer1 As [Link] Private WithEvents btnArretMarche As [Link] Private components As [Link] Private WithEvents txtChrono As [Link] Private WithEvents label1 As [Link] ' variables d'instance Interfaces graphiques

144

Private dbut As DateTime

L'attribut dbut ci-dessus est connu dans toutes les mthodes de la classe. Il nous reste traiter l'vnement Tick sur l'objet timer1, vnement qui se produit toutes les secondes :
Private Sub timer1_Tick(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' une seconde s'est coule Dim maintenant As DateTime = [Link] Dim dure As TimeSpan = DateTime.op_Subtraction(maintenant, dbut) [Link] = "" + [Link]("d2") + ":" + [Link]("d2") + ":" + [Link]("d2") End Sub

On calcule le temps coul depuis l'heure de lancement du chronomtre. On obtient un objet de type TimeSpan qui reprsente une dure dans le temps. Celle-ci doit tre affiche dans le chronomtre sous la forme hh:mm:ss. Pour cela nous utilisons les proprits Hours, Minutes, Seconds de l'objet TimeSPan qui reprsentent respectivement les heures, minutes, secondes de la dure que nous affichons au format ToString("d2") pour avoir un affichage sur 2 chiffres.

4.8

L'exemple IMPOTS

On reprend l'application IMPOTS dj traite deux fois. Nous y ajoutons maintenant une interface graphique :

0 1 3 4 5 6 7 8

Les contrles sont les suivants n 1 2 3 4 5 6 7 8 type RadioButton RadioButton NumericUpDown TextBox TextBox Button Button Button nom rdOui rdNon incEnfants txtSalaire txtImpots btnCalculer btnEffacer btnQuitter rle coch si mari coch si pas mari nombre d'enfants du contribuable Minimum=0, Maximum=20, Increment=1 salaire annuel du contribuable en F montant de l'impt payer ReadOnly=true lance le calcul de l'impt remet le formulaire dans son tat initial lors du chargement pour quitter l'application

Rgles de fonctionnement le bouton Calculer reste teint tant qu'il n'y a rien dans le champ du salaire si lorsque le calcul est lanc, il s'avre que le salaire est incorrect, l'erreur est signale :

Interfaces graphiques

145

Le programme est donn ci-dessous. Il utilise la classe impot cre dans le chapitre sur les classes. Une partie du code produit automatiquement pas [Link] n'a pas t ici reproduit.
using System; using [Link]; using [Link]; using [Link]; using [Link]; using [Link]; ' options Option Explicit On Option Strict On ' espaces de noms Imports System Imports [Link] Imports [Link] Imports [Link] Imports [Link] Imports [Link] ' classe formulaire Public Class frmImpots Inherits [Link] Private WithEvents label1 As [Link] Private WithEvents rdOui As [Link] Private WithEvents rdNon As [Link] Private WithEvents label2 As [Link] Private WithEvents txtSalaire As [Link] Private WithEvents label3 As [Link] Private WithEvents label4 As [Link] Private WithEvents groupBox1 As [Link] Private WithEvents btnCalculer As [Link] Private WithEvents btnEffacer As [Link] Private WithEvents btnQuitter As [Link] Private WithEvents txtImpots As [Link] Private components As [Link] = Nothing Private WithEvents incEnfants As [Link] ' tableaux de donnes ncessaires au calcul de l'impt Private limites() As Decimal = {12620D, 13190D, 15640D, 24740D, 31810D, 39970D, 48360D, 55790D, 92970D, 127860D, 151250D, 172040D, 195000D, 0D} Private coeffR() As Decimal = {0D, 0.05D, 0.1D, 0.15D, 0.2D, 0.25D, 0.3D, 0.35D, 0.4D, 0.45D, 0.55D, 0.5D, 0.6D, 0.65D} Private coeffN() As Decimal = {0D, 631D, 1290.5D, 2072.5D, 3309.5D, 4900D, 6898.5D, 9316.5D, 12106D, 16754.5D, 23147.5D, 30710D, 39312D, 49062D} ' objet impt Private objImpt As impot = Nothing Public Sub New() InitializeComponent() ' initialisation du formulaire btnEffacer_Click(Nothing, Nothing) [Link] = False ' cration d'un objet impt Interfaces graphiques

146

Try objImpt = New impot(limites, coeffR, coeffN) Catch ex As Exception [Link]("Impossible de crer l'objet impt (" + [Link] + ")", "Erreur", [Link], [Link]) ' on inhibe le champ de saisie du salaire [Link] = False End Try 'try-catch End Sub Protected Overloads Sub Dispose(ByVal disposing As Boolean) .... End Sub Private Sub InitializeComponent() [Link] = New [Link] Me.groupBox1 = New [Link] [Link] = New [Link] [Link] = New [Link] [Link] = New [Link] Me.label1 = New [Link] Me.label2 = New [Link] Me.label3 = New [Link] [Link] = New [Link] [Link] = New [Link] Me.label4 = New [Link] [Link] = New [Link] [Link] = New [Link] [Link]() CType([Link], [Link]).BeginInit() [Link]() .... End Sub 'InitializeComponent Public Shared Sub Main() [Link](New frmImpots) End Sub 'Main Private Sub btnEffacer_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' raz du formulaire [Link] = 0 [Link] = "" [Link] = "" [Link] = True End Sub 'btnEffacer_Click Private Sub txtSalaire_TextChanged(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' tat du bouton Calculer [Link] = [Link]() <> "" End Sub 'txtSalaire_TextChanged Private Sub btnQuitter_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' fin application [Link]() End Sub 'btnQuitter_Click Private Sub btnCalculer_Click(ByVal sender As Object, ByVal e As [Link]) _ Handles [Link] ' le salaire est-il correct ? Dim intSalaire As Integer = 0 Try ' rcupration du salaire intSalaire = [Link]([Link]) ' il doit tre >=0 If intSalaire < 0 Then Throw New Exception("") End If Catch ex As Exception ' msg d'erreur [Link](Me, "Salaire incorrect", "Erreur de saisie", [Link], [Link]) ' focus sur champ erron [Link]() ' slection du texte du champ de saisie Interfaces graphiques

147

[Link]() ' retour l'interface visuelle Return End Try 'try-catch ' le salaire est correct - on calcule l'impt [Link] = "" & CLng([Link]([Link], CInt([Link]), intSalaire)) End Sub 'btnCalculer_Click End Class

Nous utilisons ici l'assemblage [Link] rsultat de la compilation de la classe impots du chapitre 2. Rappelons que cet assemblage peut tre produit en mode console par la commande
dos>vbc /t:library [Link]

Cette commande produit le fichier [Link] appel assemblage. Cet assemblage peut tre ensuite utilis dans diffrents projets. Ici, dans notre projet sous [Link], nous utilisons la fentre des proprits du projet :

Pour ajouter une rfrence (un assemblage) nous cliquons droit sur le lot cl References ci-dessus, nous prenons l'option [Ajouter une rfrence] et nous dsignons l'assemblage [[Link]] que nous avons pris soin de mettre dans le dossier du projet :
dos>dir 01/03/2004 14:39 01/03/2004 14:37 01/03/2004 14:41 9 250 gui_impots.vb 4 096 [Link] 12 288 gui_impots.exe

Une fois inclus l'assemblage [[Link]] dans le projet, la classe [impots] devient connue du projet. Auparavant elle ne l'est pas. Une autre mthode est d'inclure le source [Link] dans le projet. Pour cela, dans la fentre des proprits du projet, on clique droit sur le projet et on prend l'option [Ajouter/Ajouter un lment existant] et on dsigne le fichier [Link].

Interfaces graphiques

148

Vous aimerez peut-être aussi