Vous êtes sur la page 1sur 117

Utiliser les structures du langage et les types de base

http://msdn.microsoft.com/vbasic
Page 1 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

SOMMAIRE
INTRODUCTION ........................................................................................................................................................... 3 CONTEXTE FONCTIONNEL ........................................................................................................................................... 3 UTILISER LES TYPES DE BASE........................................................................................................................................ 5 CRER UNE BOTE DE DIALOGUE OPTIONS ..................................................................................................................... 6 UTILISER LA BOTE DE DIALOGUE STANDARD FOLDERBROWSERDIALOG.............................................................................. 40 UTILISER LES TYPES DE DONNES COMMUNS ................................................................................................................ 45 UTILISER LES STRUCTURES DU LANGAGE ................................................................................................................... 60 STRUCTURES DE DCISION ........................................................................................................................................ 60 STRUCTURES DE CONTRLE ...................................................................................................................................... 67 STRUCTURES DE BOUCLE .......................................................................................................................................... 75 POUR ALLER PLUS LOIN ........................................................................................................................................ 106 TRAITEMENT DU MENU CONTEXTUEL DE LICNE DE NOTIFICATION ................................................................................ 106 ECRIRE DANS LE JOURNAL DE WINDOWS ................................................................................................................... 111

Printemps 2008

Coach VB.NET

Page 2 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

INTRODUCTION CONTEXTE FONCTIONNEL


Rappel du contexte fonctionnel du tutorial du coach VB Lobjectif du tutorial du Coach VB est daccompagner les dveloppeurs la dcouverte et la prise en main du langage Visual Basic (VB) pour la construction dapplications avec une approche oriente objet.

Pour rappel, vous pouvez reprer facilement deux caractristiques importantes du langage laide des logos suivants en marge :

Ce logo marque une fonctionnalit de VB ou de Visual Studio qui permet de dvelopper vite (et juste ).

Ce logo met en vidence une caractristique de la programmation oriente objet.

Contexte fonctionnel du troisime atelier Dans ce troisime atelier, vous allez ajouter au projet une bote de dialogue permettant lutilisateur de configurer les options de lapplication. Vous savez, cest cette bote du menu Outils > Options que lon trouve dans tous les produits Microsoft.

Printemps 2008

Coach VB.NET

Page 3 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Il sagit dune bote de dialogue proposant des options sur deux onglets Fichiers et Divers :

Option de configuration du dossier de sauvegarde par dfaut propos au moment de la sauvegarde des fichiers de donnes que nous allons manipuler dans le prochain atelier Option de configuration du nombre de fichiers dans la liste des fichiers rcents proposs lutilisateur louverture dun fichier.

Option de configuration pour bnficier dun message de confirmation avant denregistrer un fichier de donnes.

Option de configuration pour activer la fonction de traage dans le journal des vnements de Windows.

Option de configuration des proprits enregistrer avec les fichiers de donnes donnant lauteur du document, le titre etc(chaque information tant spare par un point virgule)

Ces informations de configuration devront tre prserves pendant la dure de lexcution de lapplication mais seront perdues la fin de celle-ci.

Printemps 2008

Coach VB.NET

Page 4 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dans la dernire partie Pour aller plus loin de cet atelier, nous aborderons lcriture dun message dans le journal de Windows et nous verrons comment programmer les actions associes au menu contextuel de licne de notification de lapplication que nous avons labor latelier prcdent. Elles permettent de retailler la fentre principale de lapplication et sont grises dynamiquement en fonction du contexte.

Cette option est grise si la fentre est actuellement ltat Maximis.

Contexte technique Dans cet atelier nous allons nous concentrer sur lapprentissage des principales structures et types de donnes du langage VB. Cest la premire tape pour apprendre dvelopper avec le langage !

A la fin de cet atelier, vous saurez comment :

Crer une numration, une constante et utiliser les types de donnes lmentaires, Crer une variable en contrlant sa porte et sa dure de vie, Ecrire une procdure, Utiliser les principales structures du langage telles que IfThenElse (structure de dcision) ou ForNext (structure de boucle), ou encore With (autre structure), Crer et afficher une bote de dialogue personnalise ou utiliser une bote de dialogue standard de Windows, Ecrire dans le journal de Windows.

La solution de cet atelier est disponible dans le rpertoire ..\Atelier 3\Solution. Les fichiers utiles, auxquels font rfrence les exercices sont disponibles dans le rpertoire ..Atelier 3\Fichiers utiles.

UTILISER LES TYPES DE BASE


Printemps 2008 Coach VB.NET Page 5 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dans cet exercice, vous allez apprendre :

Utiliser une bote de dialogue standard de Windows, Crer une bote de dialogue personnalise, Dessiner des onglets, Utiliser les types de donnes lmentaires de Visual Basic, Utiliser une numration et dfinir une numration personnalise, Dfinir et utiliser une constante, Dfinir une variable en contrlant sa porte et sa dure de vie.

Objectif Lobjectif de ce premier exercice est de se familiariser avec tous les types de donnes standard du langage Visual Basic. Au passage, nous en profiterons pour apprendre manipuler les botes de dialogue.

CRER UNE BOTE DE DIALOGUE OPTIONS


Dans cet exercice, vous allez crer une bote de dialogue personnalise.

Contexte fonctionnel Lobjectif est de crer la bote de dialogue Options du programme qui saffiche lorsque lutilisateur slectionne loption de menu Outils > Options dans la barre de menu principal. Elle prsentera toutes les options de lapplication configurables par lutilisateur.

Printemps 2008

Coach VB.NET

Page 6 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Droulement de lexercice :

1. Ouvrez le projet prcdent ralis lors de latelier 2 : Lancez Visual Studio partir du menu Dmarrer > Tous les programmes > Microsoft Visual Basic 2008 Express Edition. Menu Fichier > Ouvrir un projet. Retrouvez le fichier Atelier 2.sln que vous avez cr lors de latelier 2 ou, si vous navez pas fait latelier prcdent, rcuprez le projet de solution dans le rpertoire : ..\Atelier 3\Dmarrage\Atelier 3.sln.

2. Ajoutez une bote de dialogue au projet :

Printemps 2008

Coach VB.NET

Page 7 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dans lExplorateur de solutions, faites un clic droit la racine du projet > Ajouter > Nouvel lment

Slectionnez le modle dlment Bote de dialogue. Nommez le fichier par exemple OptionsDialog.vb.

Printemps 2008

Coach VB.NET

Page 8 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Notez quil y a un autre modle de bote de dialogue que celui que nous allons utiliser. Il sagit du modle intitul Bote de dialogue A propos de, qui (comme son nom lindique) permet de crer rapidement une bote A propos de dans le projet ressemblant ceci :

Comme pour la fentre SplashScreen de latelier 2, les informations sont charges partir des proprits dassembly de lapplication configures avec le Concepteur de projets.

Cliquez Ajouter.

En quoi consiste une bote de dialogue ? Une bote de dialogue est une fentre qui, comme son nom lindique, permet de dialoguer avec lutilisateur : Elle peut se contenter dafficher des informations lattention de lutilisateur : par exemple cest ce que fait une bote de dialogue A propos de. Elle peut aussi demander des informations lutilisateur, comme cela va tre le cas pour notre bote Options.

En ralit, ce nest ni plus ni moins un formulaire Windows Form quil faut amnager pour rpondre au besoin dchange instantan avec lutilisateur. Par exemple, une bote de dialogue est une fentre de taille fixe, non redimensionnable et comporte en gnral des boutons : Printemps 2008 typiquement un bouton OK pour quitter la fentre de manire sauvegarder les Coach VB.NET Page 9 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

informations saisies par lutilisateur, et un bouton Annuler pour au contraire ne rien enregistrer.

Le modle dlment a gnr un nouveau formulaire comprenant deux boutons OK et Annuler.

Comment configurer un formulaire pour quil se comporte comme une bote de dialogue ? Et bien profitons du fait que Visual Studio nous a gnr une bote de dialogue toute prte pour observer les paramtres quil aurait fallu configurer sur un formulaire Windows Form standard !

3. Affichez les proprits du formulaire gnr : Slectionnez le formulaire en mode Design puis faites un clic droit > Proprits (ou cliquez la touche F4). Observez toutes les proprits dont la valeur est en caractres gras.

Printemps 2008

Coach VB.NET

Page 10 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Vrifiez que cest bien lobjet Form OptionsDialog qui est slectionn dans la fentre de Proprits

Proprits en gras

Quelles sont ces proprits en gras ? Ce sont celles dont la valeur est diffrente de la valeur par dfaut, cest--dire celles que Visual Studio a prconfigures pour nous de faon ce que le formulaire se comporte comme une bote de dialogue. Hormis les proprits (Name) et Text qui sont respectivement le nom du formulaire et son titre, voici les proprits quil faut retenir :

Nom AcceptButton

Valeur OK_Button

Explication Indique quel est le bouton sur lequel pourra cliquer lutilisateur pour sauvegarder les changements du formulaire. On parle de bouton dacceptation du formulaire. Lutilisateur pourra aussi appuyer la touche Entre du clavier pour dclencher le clic du bouton. Bien sr, cest vous de coder la fermeture du formulaire et denregistrer les informations saisies par lutilisateur. Indique le bouton dannulation du formulaire cest--dire au contraire celui qui ferme le formulaire sans

CancelButton

Cancel_Button

Printemps 2008

Coach VB.NET

Page 11 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

sauvegarder les changements. Il est associ la touche ECHAP.

Cancel_Button

OK_Button

FormBorderStyle

FixedDialog

Dtermine lapparence du bord extrieur du formulaire. Le style FixedDialog empche lutilisateur de redimensionner la fentre. Indique que le formulaire ne doit pas prsenter de bouton Agrandir dans la barre de lgende du formulaire. Indique que le formulaire ne doit pas prsenter de bouton Rduire dans la barre de lgende du formulaire. Taille fixe propose 441 pixels de largeur et 341 pixels de hauteur.

MaximizeBox

False

MinimizeBox

False

Size

441;341

Emplacement usuel des boutons Rduire et Agrandir. Dans une bote de dialogue, ils nont aucun intrt.

AutoScaleMode

Font

Dsigne le mode de mise lchelle automatique du

Printemps 2008

Coach VB.NET

Page 12 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

formulaire, en loccurrence ici bas sur la police des caractres. StartPosition CenterParent Dtermine la position initiale de la bote de dialogue au moment de laffichage. CenterParent indique que le formulaire doit apparaitre au centre du formulaire parent qui a initi son affichage. Indique quil nest pas utile dafficher le formulaire dans la barre de tches Windows puisquil ne sagit pas dune application part entire.

ShowInTaskbar

False

Pour en savoir plus sur la configuration de ces proprits, consulter la rubrique Exemples de la page : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.form.aspx

Modifiez maintenant le titre du formulaire pour que la bote de dialogue sappelle : Options.

Penser lire les explications donnes par la fentre daide contextuelle lorsque vous travaillez sur une proprit. Printemps 2008 Coach VB.NET Page 13 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

4. Basculez dans le fichier de code du formulaire pour voir ce qui a t gnr par le modle dlment Bote de dialogue : Slectionnez le formulaire puis faites un clic droit > Afficher le code.

Le fichier de code contient une classe nomme OptionsDialog qui comprend deux gestionnaires dvnements : OK_Button_Click qui gre (Handles) lvnement Click sur le bouton OK_Button. Cancel_Button_Click qui gre (Handles) lvnement Click sur le bouton Cancel_Button.

Ces deux gestionnaires grent la fermeture du formulaire. Pour cela ils invoquent tout simplement la mthode Close du formulaire comme nous lavons vu dans latelier prcdent.

Mais comment lapplication saura-t-elle que lutilisateur a cliqu sur le bouton OK ou sur le bouton Annuler ? Printemps 2008 Coach VB.NET Page 14 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dans le premier cas, il faudra dailleurs grer lenregistrement des options configures par lutilisateur alors que dans lautre, non. Du coup, juste avant de fermer la bote de dialogue, les deux gestionnaires dvnement configure une sorte de code de fermeture pour le formulaire parent par lintermdiaire de la proprit DialogResult du formulaire. Nous reviendrons sur cette proprit juste aprs dans cet exercice en mme temps que nous parlerons de la mthode daffichage de la bote de dialogue, laquelle elle est directement lie. Sachez que le code de fermeture peut tre configur de manire dclarative directement via la proprit DialogResult des boutons.

Toutes les valeurs possibles pour le code de fermeture de la bote de dialogue.

Maintenant que vous avez dcortiqu la bote de dialogue en long et en large, il sagit de la connecter au reste de lapplication pour quelle saffiche lorsque lutilisateur clique le menu Options dans le menu principal du formulaire Main.

Printemps 2008

Coach VB.NET

Page 15 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

O allez-vous connecter le code ? Nous avons vu dans latelier prcdent, que le principe consiste crire des gestionnaires dvnements. Donc vous devez trouver quel est lvnement dclencheur de laffichage de la bote de dialogue et quel objet il correspond. Pour cela, aidez-vous de lexpression textuelle de votre besoin : lide est de ragir quand lutilisateur clique sur Outils > Options dans le menu principal.

La conjonction quand est gnralement suivie du verbe qui donne lvnement dclencheur : Click . La suite de lexpression donne lobjet sur lequel lvnement va porter : OptionsToolStripMenuItem.

5. Codez laffichage de la bote de dialogue dans le formulaire principal de lapplication : Ouvrez le formulaire Main.vb en mode Design en double cliquant sur le fichier dans lExplorateur de solutions.

Comme il se trouve que Click est lvnement par dfaut dune option de menu de type MenuItem, la mthode la plus rapide pour crer un gestionnaire dvnement en rponse cet vnement est donc de double cliquer sur loption de menu dans le Concepteur de formulaire de Visual Studio. Vous pouvez retrouver toutes les autres mthodes de cration dun gestionnaire dvnement en vous reportant latelier 2 prcdent.

Double cliquez sur loption de menu Options dans le menu Outils du formulaire Main pour gnrer une procdure de rponse lvnement Click.

Printemps 2008

Coach VB.NET

Page 16 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Visual Studio bascule automatiquement sur le fichier de code du formulaire Main et cr une procdure OptionsToolStripMenuItem_Click en rponse lvnement OptionsToolStripMenuItem.Click.

Crer un objet de type OptionsDialog puis afficher-le laide de la mthode ShowDialog comme suit :

Code VB

Private Sub OptionsToolStripMenuItem_Click(ByVal sender As System.Object, _ Printemps 2008 Coach VB.NET Page 17 sur 117

1 2 3

Microsoft

Utiliser les structures et les types de base Atelier 3

ByVal e As System.EventArgs) _ Handles OptionsToolStripMenuItem.Click Dim formOptions As OptionsDialog formOptions = New OptionsDialog() formOptions.ShowDialog() End Sub

Que font ces quelques lignes ? 1 La premire dclare une variable nomme formOptions de type OptionsDialog laide des mots cls Dim (abrviation de Dimension) et As.

Dim <NomDeLaVariable> As <TypeDeDonnes>

Quest ce quon entend par variable ? On dfinit des variables pour stocker en mmoire des informations dont la valeur varie (do le nom de variable) dans un programme. Une variable est caractrise par : son nom sa valeur son adresse mmoire (o est stocke sa valeur) son type de donnes sa porte sa dure de vie

Printemps 2008

Coach VB.NET

Page 18 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Cest quoi un Type de donnes ? Le type dune variable fait rfrence au genre de donnes quelle peut contenir (date, entier etc.) et la manire dont les donnes sont stockes. Il dtermine notamment la taille que la variable va utiliser en mmoire (8 octets pour une date, 4 octets pour un entier etc.), les valeurs autorises pour cette variable et donc les oprations possibles sur celle-ci. Cest pour cela quil est si important de toujours typer vos variables.

Comment a marche dans les coulisses ? Il faut savoir que le runtime du Framework.NET ne connait quun seul jeu de types de donnes gr par son Systme de types communs. Il est dit commun parce quil est commun tous les langages. En effet, lorsque vous dclarez une variable dun certain type VB, le compilateur VB soccupe de faire correspondre le type du langage avec le type correspondant dfini dans le Systme de types communs. Cette correspondance est faite quelque soit le langage avec lequel vous dveloppez. Ce systme est fondamental parce quil est scuris et facilite lintgration interlangage. Par exemple cest grce lui que vous pouvez vous permettre de rutiliser un composant crit en VB dans une application C#.

Pour en savoir plus sur le systme de type commun du Framework .NET : http://msdn.microsoft.com/fr-fr/library/zcx1eb1e.aspx

Type valeur ou type rfrence ? Il faut distinguer deux grandes catgories de types de donnes : les types valeurs et les types rfrences. Anniversaire 12/05/2010 Les variables de type valeur stockent directement leurs donnes (comme un entier ou une date). Cest possible parce que le systme sait exactement la taille allouer pour les donnes (un Int32 fait par exemple toujours 32 octets !). Les variables de type rfrence ne peuvent pas stocker directement leurs donnes parce que le systme ne sait pas ncessairement la taille allouer pour celles-ci. Une classe ou une chane de caractres par exemple sont des types rfrences. Et oui, comment savoir lavance la taille dune classe OptionsDialog ? Cest une variable bien trop complexe Coach VB.NET Page 19 sur 117

formOptions rf Objet
OptionsDialog

Printemps 2008

Microsoft

Utiliser les structures et les types de base Atelier 3

Si une variable de type rfrence ne stocke pas directement la donne, alors que stocke-t-elle ? Elle stocke une rfrence vers la donne, qui reprsente la localisation de la donne en mmoire.

1 Si on en revient la ligne , lobjectif tant dafficher un formulaire, la premire tape consiste dclarer une variable en la nommant (formOptions) et en dfinissant son type (OptionsDialog qui est le nom de la classe du formulaire que lon veut utiliser).

Dim formOptions As OptionsDialog

Dim sert dclarer et allouer un espace de stockage pour la variable. La clause As sert spcifier le type de donnes de la variable.

Pour en savoir plus sur les mots cls Dim et As : http://msdn.microsoft.com/fr-fr/library/7ee5a7s1.aspx http://msdn.microsoft.com/fr-fr/library/97f49yhb.aspx

Attention ! OptionsDialog est une classe, donc il sagit dun type rfrence. Que fait la ligne ? 1 dclare et alloue un espace pour stocker non pas la valeur de Elle la variable mais une rfrence celle-ci. Il nous faut maintenant crer lobjet proprement dit et lui allouer de la mmoire. Cest lobjet de la ligne qui utilise le mot cl New pour crer lobjet. On dit que lon cr une instance de la classe OptionsDialog. 2

Printemps 2008

Coach VB.NET

Page 20 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

formOptions = New OptionsDialog()

Contient une rfrence vers lobjet

New est suivi du constructeur de la classe OptionsDialog.

Quest ce quun constructeur ? Nous reviendrons sur cette notion trs importante de la programmation oriente objet plus tard dans ce tutorial. Retenez pour linstant que le constructeur est une mthode membre de la classe (do les parenthses qui caractrisent lappel dune mthode) que lon appelle pour (construire) crer une instance dun nouvel objet. Cest typiquement dans un constructeur que lon initialiserait lobjet.

A votre avis est-ce que le programme peut exploiter la variable formOptions avant que lobjet soit cr ? En clair, est-ce quon peut exploiter une rfrence qui nest pas encore associe un objet ?

formOptions rf

La rponse est clairement non ! Que feriez-vous dune porte daccs qui souvre sur le vide ? Justement pour matrialiser ce vide, VB fournit un mot cl : Nothing. Lorsquune variable de type rfrence est gale Nothing cest quelle nest associe (rien) aucun objet. Inversement lorsque vous voulez que la variable ne rfrence plus aucun objet, il suffit de lui assigner pour valeur Nothing.

Printemps 2008

Coach VB.NET

Page 21 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Pour en savoir plus sur le mot cl New : http://msdn.microsoft.com/fr-fr/library/77s47661.aspx Pour en savoir plus sur le mot cl Nothing : http://msdn.microsoft.com/fr-fr/library/0x9tb07z.aspx

Et voil ! Nous disposons maintenant dun objet de type formulaire OptionsDialog. Il ne nous reste plus qu lafficher. Cest l quintervient la mthode ShowDialog . Elle a 3 pour effet dafficher le formulaire en tant que bote de dialogue modale. Lexcution de la suite du code (juste aprs lappel de la mthode) est suspendue jusqu ce que lutilisateur ferme la bote de dialogue. Au retour de lappel, nous allons rcuprer le code de fermeture configur dans le formulaire au moyen de la proprit DialogResult.

Pour tout savoir sur la mthode ShowDialog : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.form.showdialog.aspx

La proprit DialogResult de la classe Form est de type System.Windows.Forms.DialogResult. Ce type de donnes est ce quon appelle une numration.

Quest quune numration ? Une numration est un ensemble de constantes symboliques nommes. On peut associer chaque constante une valeur entire. Par exemple la dfinition du type DialogResult pourrait ressembler ceci :

Enum DialogResult None = 0

Printemps 2008

Coach VB.NET

Page 22 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

OK = 1 Cancel = 1 Abort = 2 Retry = 3 Ignore = 4 Yes = 5 No = 6 End Enum

Nous crerons une numration personnalise dans la suite de cet atelier. Lintrt de ce type de donnes et quau lieu de manipuler des codes sous la forme de nombres entiers (0, 1, 2, etc), on utilise des noms trs explicites (OK, Cancel, Retry etc) ce qui donne un code trs lisible et facile maintenir. DialogResult.OK ou DialogResult.No sont des exemples de codes de fermeture dune bote de dialogue (tellement plus sympas que 1 ou 6).

Pour en savoir plus sur la proprit DialogResult : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.form.dialogresult.aspx Pour en savoir plus sur le type numr DialogResult : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.dialogresult.aspx

Rcuprez le code de fermeture de la bote de dialogue en retour de lappel la mthode ShowDialog comme suit :

Code VB

Private Sub OptionsToolStripMenuItem_Click(ByVal sender As System.Object, _

Printemps 2008

Coach VB.NET

Page 23 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

ByVal e As System.EventArgs) _ Handles OptionsToolStripMenuItem.Click Dim formOptions As OptionsDialog formOptions = New OptionsDialog() Dim result As DialogResult result =formOptions.ShowDialog() End Sub

Pour linstant, le principe consiste dclarer une variable de type System.Windows.Forms.DialogResult et de rcuprer la valeur de retour de lappel la mthode ShowDialog dans cette variable. Nous analyserons le code de fermeture correspondant dans la suite de cet atelier.

6. Testez le fonctionnement de la bote de dialogue : Enregistrez tous vos changements en cliquant sur Studio. dans la barre doutils de Visual

Positionnez un point darrt sur la ligne dappel de la mthode ShowDialog en cliquant dans la marge (ou touche F9).

Cliquez dans la marge pour positionner un point darrt

Printemps 2008

Coach VB.NET

Page 24 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Excutez lapplication en mode Dbogage en cliquant sur Slectionnez le menu Outils > Options de lapplication.

(ou touche F5).

Visual Studio sarrte sur la ligne dappel la mthode ShowDialog.

Cliquez F8 (ou ) pour poursuivre lexcution pas pas de lapplication. Vrifiez que la bote de dialogue saffiche.

Printemps 2008

Coach VB.NET

Page 25 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Validez la bote de dialogue en cliquant le bouton OK. Le dbogueur bascule dans le fichier OptionsDialog.vb et vous amne sur le gestionnaire dvnement Click du bouton OK de la bote de dialogue.

Continuez lexcution pas pas (F8) pour voir laffectation du code de fermeture DialogResult.OK la proprit DialogResult du formulaire. Aprs plusieurs clics sur la touche F8, vous tes de retour dans le fichier Main.vb sur la ligne dappel de la mthode ShowDialog.

Printemps 2008

Coach VB.NET

Page 26 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Vous constatez au passage le fonctionnement modal de la bote de dialogue. En effet, vous vous retrouvez exactement sur la mme ligne dexcution quavant laffichage de la bote de dialogue. Tant que cette dernire nest pas ferme, lexcution de la procdure en cours est reste suspendue.

Cliquez encore une fois F8 pour basculer sur la ligne End Sub. Positionnez le curseur de la souris sur la variable result pour en observer la valeur. Vous devez voir le code de fermeture OK correspondant DialogResult.OK (soit une constante de valeur 1).

Cliquez F5 puis terminer lapplication. Supprimez le point darrt sur la ligne dappel la mthode ShowDialog.

Bravo ! Vous venez de crer votre premire bote de dialogue ! Vous allez maintenant dessiner les contrles de saisie des diffrentes options proposes dans la bote.

7. Commencez par ajouter un contrle de type TabControl au formulaire OptionsDialog pour construire une fentre base donglets : Affichez le fichier OptionsDialog.vb en mode Design. Faites un glisser dplacer de la Bote outils > rubrique Conteneurs > TabControl nimporte o sur la surface du formulaire.

Printemps 2008

Coach VB.NET

Page 27 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Affichez la fentre de proprits du contrle en le slectionnant puis en pressant la touche F4. Configurez sa proprit Dock Top en vous aidant du mini diteur graphique propos.

Le contrle est slectionn lorsquon voit une bordure sur son contour extrieur.

Cliquez la liste droulante pour afficher la bote de slection visuelle.

Top est le rectangle du haut.

Que fait la proprit Dock ? Il sagit dune proprit de mise en forme de base des contrles standards des Windows Forms. Elle dcrit quel bord du conteneur parent, un contrle doit tre fix. Le contrle Printemps 2008 Coach VB.NET Page 28 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

est alors dplac aussi prs que possible du bord spcifi et dimensionn de manire remplir ce bord. Il reste en place mme si le conteneur parent est redimensionn.

Pour en savoir plus sur la proprit Dock : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.control.dock(VS.80).aspx Le docking est en fait un cas spcial de lancrage dfini par une autre proprit des contrles nomme Anchor, que nous aurons loccasion dutiliser dans la suite de ce tutorial. Pour creuser le sujet ds maintenant : http://msdn.microsoft.com/frfr/library/system.windows.forms.control.anchor(VS.80).aspx

Vous devez obtenir :

Avec la souris, faites glisser le bord bas du contrle TabControl pour ltendre et lamener juste au dessus des boutons.

Printemps 2008

Coach VB.NET

Page 29 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Vous pouvez aussi retoucher directement les proprits de taille du contrle. Tirez le petit carr au milieu du bord bas du contrle.

Attention ! Un contrle TabControl prsente une collection de contrles enfants TabPages, symbolisant les pages associes chaque onglet. Collection TabPages dlments de type TabPage.

Pour slectionnez une page, slectionnez dabord longlet puis cliquez nimporte o dans la page. Par exemple, pour dessiner la page du deuxime onglet, cliquez longlet TabPage2 puis nimporte o dans la page de contenu de longlet.

Printemps 2008

Coach VB.NET

Page 30 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Les proprits de llment TabPage2 saffiche.

8. Intitulez le premier onglet Fichiers et ajoutez-lui les contrles de saisie pour grer les options de configuration de fichier : Slectionnez le premier onglet TabPage1 du contrle TabControl1. Modifiez sa proprit Text en : Fichiers.

Lintitul de longlet affiche le texte saisi.

Faites un glisser dplacer de la Bote outils > rubrique Contrles commun > dun contrle Label puis dun contrle ComboBox sur la surface de la page Fichiers. Coach VB.NET Page 31 sur 117

Printemps 2008

Microsoft

Utiliser les structures et les types de base Atelier 3

Utilisez le concepteur de formulaire de Visual Studio pour positionner rapidement vos contrles et les aligner. En effet, lorsque vous approchez un contrle du bord gauche dun autre contrle, Visual Studio vous donne des indications sur la position idale adopter. Ds que vous tes bien positionn, il vous indique lespacement via des traits bleus.

Si le trait bleu napparat pas, cest que vous ntes pas lemplacement idal !

Modifiez les proprits du contrle de type Label comme suit : o o (Name) : SaveDirectoryTypeLabel Text : Toujours enregistrer dans ce dossier :

Aligner le contrle de type ComboBox immdiatement aprs le contrle de type Label en utilisant les indications du Concepteur de formulaire.

Si vous voulez vous calez sur le haut du texte du label

Ou :

Printemps 2008

Coach VB.NET

Page 32 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Si vous voulez vous calez sur le bas du texte du label

Modifiez les proprits du contrle de type ComboBox : o (Name) : SaveDirectoryTypeComboBox Conteneurs > dun

Faites un glisser dplacer de la Bote outils > rubrique contrle GroupBox sous les contrles prcdents :

Alignez le contrle avec le libell de la premire ligne

Redimensionnez le contrle en largeur en vous calant sur la position du bouton le plus droite au bas du formulaire :

Alignez le contrle avec le bord droit du bouton

Printemps 2008

Coach VB.NET

Page 33 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Modifiez les proprits du contrle de type GroupBox comme suit : o o (Name) : SaveDirectoryPathGroupBox Text : Spcifier le dossier par dfaut

Glisser dplacer lintrieur du contrle conteneur GroupBox un contrle commun de type TextBox et un contrle de type Button. Positionnez-les pour quils soient aligns.

Modifiez les proprits du contrle de type TextBox comme suit : o (Name) : SaveDirectoryPathTextBox

Modifiez les proprits du contrle de type Button comme suit : o o (Name) : SaveDirectoryPathButton Text : Parcourir

Vous devez obtenir une page du type :

Printemps 2008

Coach VB.NET

Page 34 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

9. Terminez le dessin de la premire page avec les contrles suivants :

Type de contrle (Name) Maximum Width

NumericUpDown RecentFileListNumericUpDown 5 33

Type de contrle (Name) Text

CheckBox ConfirmBeforeSaveCheckBox Toujours demander une confirmation avant denregistrer

Type de contrle (Name) Text

Label RecentFileListLabel lments affichs dans la liste des fichiers rcents

Positionnez-les pour obtenir :

Printemps 2008

Coach VB.NET

Page 35 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Tiens mais cest quoi cette ligne horizontale qui spare les contrles ? Malheureusement il nexiste pas de contrle Windows Forms standard pour dessiner ce type de ligne. Pour le coup, il faut donc coder.

Sauf quil existe une petite feinte trs simple Ajoutez au formulaire un contrle standard de type Label et configurez le avec les proprits suivantes : Text : (vide) AutoSize : False (super important sinon le contrle se dimensionne tout seul et ne tient pas compte des paramtres quon lui donne) Size : 400;2 ( vous de voir pour la largeur mais configurez seulement 2 pixels de hauteur) BorderStyle : Fixed3D.

Et le tour est jou !

10. Maintenant que vous tes chaud, vous navez plus qu dessiner le deuxime onglet comme suit :

Printemps 2008

Coach VB.NET

Page 36 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Voici les proprits de chaque contrle :

Printemps 2008

Coach VB.NET

Page 37 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Type de contrle (Name) Text

TabPage2 OtherTabPage Divers

Type de contrle (Name) Text

CheckBox TraceCheckBox Activer le traage dans le journal de Windows

Type de contrle (Name) Text

Label AuthorInfoLabel Informations sur lauteur

Type de contrle (Name)

TextBox AuthorInfoTextBox

11. Testez le fonctionnement de la bote de dialogue : Enregistrez tous vos changements en cliquant sur Studio. dans la barre doutils de Visual

Excutez lapplication en mode Dbogage en cliquant sur

(ou touche F5).

Printemps 2008

Coach VB.NET

Page 38 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Slectionnez le menu Outils > Options de lapplication.

Cliquez longlet Divers pour basculer sur la deuxime page doptions :

Printemps 2008

Coach VB.NET

Page 39 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Super ! Maintenant il ne reste plus qu coder son fonctionnement !

Fermez la bote de dialogue puis fermez lapplication.

UTILISER LA BOTE DE DIALOGUE STANDARD FOLDERBROWSERDIALOG


Le Framework .NET fournit en standard les botes de dialogue communes de Windows pour vous aider construire une interface cohrente. Cela concerne des tches telles que louverture et lenregistrement dun fichier, la manipulation des polices ou des couleurs de texte, limpression etc

Voici un article intressant sur le sujet : http://msdn.microsoft.com/fr-fr/library/aa289504(VS.71).aspx

Nous vous proposons dexploiter dans cet exercice celle qui permet de parcourir la structure de disques de la machine la recherche dun dossier particulier.

Contexte fonctionnel Lobjectif est de configurer les options denregistrement des fichiers manipuls par lditeur. En effet, la bote de dialogue Options permet de slectionner le dossier qui est propos par dfaut lutilisateur au moment de lenregistrement dun fichier de donnes. Deux choix soffrent lui : - il peut choisir de toujours enregistrer ces fichiers par dfaut dans son dossier Mes Documents. - ou il peut dcider dun dossier particulier en entrant le chemin du dossier dans la zone de texte prvue cet effet ou en slectionnant le bouton Parcourir de faon rechercher le dossier sur la machine.

Dans cet exercice, nous allons nous concentrer sur le codage du bouton Parcourir pour quil nous prsente la bote de dialogue standard de Windows de recherche dun dossier.

Printemps 2008

Coach VB.NET

Page 40 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Droulement de lexercice :

1.

Ajoutez une bote de dialogue standard de type FolderBrowserDialog la bote de dialogue OptionsDialog : Affichez le formulaire OptionsDialog en mode Design. Faites un glisser dplacer de la Bote outils > rubrique Botes de dialogue > du contrle FolderBrowserDialog nimporte o sur la surface du formulaire.

Le Concepteur de formulaire positionne le composant dans la barre de composants juste au dessous du formulaire, puisquil ne lui est pas possible dafficher sa reprsentation graphique directement sur la fentre.

Printemps 2008

Coach VB.NET

Page 41 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Lutilisation de ce composant revient crer une instance de la classe FolderBrowserDialog (cest--dire un objet) du Framework .NET par simple glisser dplacer plutt que de le faire par programmation dans le code. En plus, toutes les proprits du composant sont configurables en mode Design via la fentre de Proprits de Visual Studio.

Configurez la proprit (Name) SaveDirectoryPathFolderBrowserDialog.

du

contrle

la

valeur :

Printemps 2008

Coach VB.NET

Page 42 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Notez au passage les diffrentes proprits du contrle. Nous verrons comment configurer dynamiquement lemplacement du dossier racine partir duquel commence lexploration, donn par la proprit RootFolder, dans la suite de cet atelier. La proprit SelectedPath nous donnera le chemin du dossier slectionn par lutilisateur dans la bote de recherche. La proprit ShowNewFolderButton permet dafficher un bouton Crer un nouveau dossier.

2. Codez laffichage de la bote de dialogue standard lorsque lutilisateur clique sur le bouton :

Ah, a maintenant vous savez faire ! Tout dabord, il faut vous demander o vous allez brancher le code daffichage de la bote de dialogue. Rappelez-vous, cest lexpression textuelle de votre besoin qui vous donne la rponse cette question : il faut afficher la bote de dialogue quand lutilisateur clique sur le bouton Parcourir Il sagit donc de lvnement Click du contrle SaveDirectoryPathButton. Et pour afficher la bote de dialogue, vous savez quil suffit dinvoquer la mthode ShowDialog sur linstance de lobjet correspondant. Lobjet en question, vous lavez dj, inutile de le crer et de linstancier puisque cest le composant SaveDirectoryPathFolderBrowserDialog que vous avez gliss sur votre formulaire.

Basculez sur le formulaire OptionsDialog en mode Design. Double cliquez sur le bouton Parcourir pour gnrer automatiquement un gestionnaire dvnement en rponse au click sur le bouton SaveDirectoryPathButton.

Printemps 2008

Coach VB.NET

Page 43 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Ajoutez le code daffichage du formulaire comme suit :

Code VB

Private Sub SaveDirectoryPathButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles SaveDirectoryPathButton.Click SaveDirectoryPathFolderBrowserDialog.ShowDialog() End Sub

3. Testez le fonctionnement de la bote de dialogue : Enregistrez tous vos changements en cliquant sur Studio. dans la barre doutils de Visual

Excutez lapplication en mode Dbogage en cliquant sur Slectionnez le menu Outils > Options de lapplication. Cliquez Parcourir dans longlet Fichiers.

(ou touche F5).

Printemps 2008

Coach VB.NET

Page 44 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Valider en cliquant deux fois sur OK. Fermer lapplication.

Nous verrons dans la suite de cet atelier comment rcuprer le chemin slectionn par lutilisateur dans la bote de recherche de faon lafficher dans la zone de texte prvu cet effet dans la bote de dialogue Options de lapplication.

UTILISER LES TYPES DE DONNES COMMUNS


Jusqu maintenant nous avons vu comment crer et afficher des botes de dialogue. Dans la suite de cet atelier, nous vous proposons dexplorer plus avant les types de donnes standards du langage VB.

Contexte fonctionnel Du point de vue fonctionnel, nous avons maintenant une belle bote de dialogue Options pour que lutilisateur puisse configurer lapplication sa faon. Mais si lon veut prendre en compte sa configuration, il faut maintenant enregistrer les informations quelque part Printemps 2008 Coach VB.NET Page 45 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

On veut enregistrer les informations suivantes :

Nombre entier dlments afficher dans la liste des fichiers rcents 1 Oui ou Non : confirmation avant enregistrement

Type de dossier de sauvegarde par dfaut : Mes Documents Autres 3

Chemin du dossier de sauvegarde par dfaut des fichiers 2

Demande dactivation du traage dans le journal de Windows 5

Liste des informations concernant lauteur des fichiers : Auteur Titre Mots cls Etc 6

Du point de vue technique, enregistrer les options dans des variables mmoires revient donc crer des variables avec le type de donnes appropri pour chacun des lments de la bote de dialogue Options.

Printemps 2008

Coach VB.NET

Page 46 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Lorsquon dfinit une nouvelle variable, il faut se poser la question de sa dure de vie. Cest--dire quelle est la priode dexcution au cours de laquelle la variable doit tre valide et utilisable ? En thorie, il faudrait prserver la configuration des options au-del de lexcution de lapplication pour que lutilisateur puisse retrouver ses paramtres. Dans cet exercice, nous allons procder plus simplement, cest--dire que nous allons enregistrer les paramtres de lutilisateur en mmoire dans des variables pour quil puisse au moins les retrouver le temps de lexcution de lapplication. En conclusion, ces variables doivent tre utilisables pendant toute la dure de lexcution de lapplication.

Ce qui nous amne la question o dclarer ces variables dans le projet ? Dans la programmation oriente objet, tout fait ncessairement partie dun objet. Quels sont les objets dont nous disposons dans notre programme ? Notre application Coach.Editeur contient essentiellement trois grandes classes dobjet diffrentes : Ce sont les trois classes Main, OptionsDialog et SplashScreen. Nos variables doivent donc tre dfinies dans lune ou lautre de ces trois classes : dans la classe SplashScreen, on oublie dans la classe OptionsDialog non plus, parce quun nouvel objet formOptions de type OptionsDialog est instanci chaque demande daffichage de la bote, ce qui ne permettrait pas dutiliser les variables pendant toute la dure de vie de lapplication.

En revanche, la dfinition de nos variables dans la classe Main a du sens. Cela nous permettrait de recharger les contrles daffichage de la bote de dialogue Options chaque nouvel affichage et donc de les prserver tout au long de lexcution de lapplication.

Printemps 2008

Coach VB.NET

Page 47 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

O prcisment doit-on dclarer ces variables dans la classe Main ? Cest la question de la porte des variables. En effet, lorsque vous dclarez une variable, vous devez vous assurer que toutes les parties du code qui en auront besoin y ont accs. Cette partie de code quil faut chercher dlimiter le plus prcisment possible pour limiter lutilisation des ressources de lapplication, sappelle la porte de la variable.

Si vous dclarer une variable dans une procdure, par exemple dans le gestionnaire dvnement OptionsToolStripMenuItem_Click qui affiche la bote de dialogue Options, la porte de la variable est limite au code de la procdure. Si vous avez besoin de la variable depuis une autre partie du code du formulaire Main, ce qui va tre notre cas, vous ne pouvez pas la dclarer l. La porte dune variable dpend donc de o vous la dclarez. Nous allons dclarer nos variables options au niveau global de la classe Main pour quelles soient utilisables depuis nimporte quelle portion de code de la classe.

Remarque : Vous pouvez tout fait dclarer deux variables du mme nom dans un programme du moment quelles nont pas la mme porte.

Pour creuser la question de : la dure de vie des variables :

http://msdn.microsoft.com/fr-fr/library/35styb3a.aspx la porte des variables :

http://msdn.microsoft.com/fr-fr/library/1t0wsc67.aspx

Vous pouvez contrler galement la porte dune variable en prcisant un niveau daccs au moment de sa dclaration. Dans notre cas, nous allons utiliser le mot cl Dim sans prciser de niveau daccs, ce qui revient dclarer une variable prive, cest--dire quelle sera accessible uniquement dans le bloc o nous allons la dclarer, donc dans la classe. Printemps 2008 Coach VB.NET Page 48 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Nous aurons loccasion de revenir sur cette notion plus tard dans ce tutorial lorsque nous aborderons la manipulation des objets.

Pour commencer vous renseigner sur les diffrents niveaux daccs : http://msdn.microsoft.com/fr-fr/library/76453kax.aspx

Voici la liste des variables dclarer. Nous vous proposons les noms et types de donnes suivants :

Nom de la variable 1 2 3 4 5 6 RecentFilListNumber ConfirmBeforeSave SaveDirectoryType SaveDirectoryPath TraceEnabled AuthorInfo

Type de donnes Decimal Boolean Type numr dfinir String Boolean Tableau de String

Droulement de lexercice :

1. Avant toute chose, ajoutez une rgion pour dlimiter la dclaration des variables au tout dbut de la classe Main :

Printemps 2008

Coach VB.NET

Page 49 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

Public Class Main

#Region "Dclaration des variables prives de la classe"

#End Region

Public Sub New End Class

2. Ajoutez la dclaration des variables 1, 2, 4 et 5 de types lmentaires :

Nom de la variable 1 2 4 5 RecentFilListNumber ConfirmBeforeSave SaveDirectoryPath TraceEnabled

Type de donnes Decimal Boolean String Boolean

Dclarez les variables comme suit :

Printemps 2008

Coach VB.NET

Page 50 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

#Region "Dclaration des variables prives de la classe" 'Dclaration des proprits de la bote des options Dim RecentFileListNumber As Short Dim ConfirmBeforeSave As Boolean Dim SaveDirectoryPath as String Dim TraceEnabled As Boolean #End Region

Quelques remarques : Le type Short : il faut savoir quil existe de nombreux types de donnes numriques selon que vous voulez travaillez avec des nombres virgule, ou des nombres ngatifs, des petits ou des grands nombres Slectionnez le type le plus appropri pour maximiser les performances (notamment lors des oprations effectues sur le nombre) et minimiser la place que votre variable va prendre dans la mmoire de lapplication. Le type Short permet notamment de manipuler une plus petite plage dentiers que le type Integer. Le type Boolean : une valeur boolenne permet de grer des informations deux tats et est interprte comme True(Vrai) ou False(Faux). Le type String : ce type de donnes permet de stocker une squence de caractres, typiquement du texte dont on ne connait pas la longueur.

Retrouvez tous les types de donnes lmentaires de Visual Basic, dont les types numriques ici : http://msdn.microsoft.com/fr-fr/library/asz1fz8b.aspx Pour consulter tous les types de donnes du langage Visual Basic : http://msdn.microsoft.com/fr-fr/library/ffsdktda.aspx

Printemps 2008

Coach VB.NET

Page 51 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Lors de la dclaration dune variable, Visual Basic lui attribue immdiatement une valeur par dfaut. Par exemple, une variable de type Date est automatiquement initialise au premier janvier de lanne 0001 lheure de minuit. Un bon truc est de prendre lhabitude dinitialiser vos variables au moment de leur dclaration. Ainsi cela diminue le risque davoir des surprises au moment de leur utilisation.

Initialisez les variables comme suit :

Code VB

#Region "Dclaration des variables prives de la classe" 'Dclaration des proprits de la bote des options Dim RecentFileListNumber As Short = 0 Dim ConfirmBeforeSave As Boolean = Boolean.FalseString Dim SaveDirectoryPath as String = String.Empty Dim TraceEnabled As Boolean = Boolean.FalseString #End Region

Notez quici ces initialisations sont parfaitement inutiles puisque ce sont exactement les valeurs par dfaut que Visual Studio attribuent aux variables des types concerns. Quoiquil en soit, cela rend le code trs lisible et simplifie la maintenance

Dans son espace de nom System, le Framework.NET nous fournit des classes (ou structures) pour chacun des types de donnes du Systme de type commun (Boolean, String, etc.). Ces classes sont trs utiles pour manipuler des lments du type Printemps 2008 Coach VB.NET Page 52 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

correspondant. Par exemple, elles servent ici retrouver les valeurs dinitialisation standards des types correspondants.

Utilisez la fonctionnalit dIntelliSense de Visual Studio pour voir quels sont les membres de ces classes et bnficier dexplication.

Par exemple, vous constatez que pour un Short, on dispose des valeurs minimale (32768) et maximale (+32768).

3. Ajoutez la dclaration des variables 3 et 6 de types plus complexes :

Nom de la variable 3 SaveDirectoryType

Type de donnes Type numr dfinir

Printemps 2008

Coach VB.NET

Page 53 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

AuthorInfo

Tableau de String

Le type de dossier de sauvegarde par dfaut (SaveDirectoryType) est fonction des valeurs que nous allons listes dans le contrle SaveDirectoryTypeComboBox. A priori, nous nen aurons que deux : soit lutilisateur enregistre par dfaut dans son dossier Mes Documents, soit dans un dossier dont il devra spcifier le chemin laide de la zone de texte et du bouton Parcourir.

Nous allons donc construire un nouveau type numr, sur la mme base que la proprit DialogResult que nous avons vu prcdemment dans cet atelier, mais cette fois-ci il sagira dun type personnalis.

Pour consulter les spcificits dune numration : http://msdn.microsoft.com/fr-fr/library/8h84wky1.aspx

A la suite des dclarations prcdentes, ajoutez la dfinition dune numration DirectoryType laide du mot cl Enum :

Code VB

#Region "Dclaration des variables prives de la classe" 'Dclaration des proprits de la bote des options Dim RecentFileListNumber As Short = 0

Printemps 2008

Coach VB.NET

Page 54 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dim ConfirmBeforeSave As Boolean = Boolean.FalseString Dim SaveDirectoryPath as String = String.Empty Dim TraceEnabled As Boolean = Boolean.FalseString 'Dclaration des numrations Enum DirectoryType MyDocuments = 0 Other = 1 End Enum #End Region

Jattire votre attention sur le fait que : une numration ne peut pas tre dclare au niveau dune procdure. Vous devez la dfinir ncessairement au niveau plus global dune classe ou dun espace de noms. vous ntes pas oblig de dfinir une valeur dinitialisation. Par dfaut, Visual Basic assigne 0 la premire valeur, puis incrmente les valeurs de 1 en 1.

Dclarez maintenant une variable du type numr :

Code VB

#Region "Dclaration des variables prives de la classe" 'Dclaration des proprits de la bote des options Dim RecentFileListNumber As Short = 0 Dim ConfirmBeforeSave As Boolean = Boolean.FalseString

Printemps 2008

Coach VB.NET

Page 55 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dim SaveDirectoryPath as String = String.Empty Dim TraceEnabled As Boolean = Boolean.FalseString Dim SaveDirectoryType As DirectoryType = DirectoryType.MyDocuments 'Dclaration des numrations Enum SaveDirectoryType MyDocuments = 0 Other = 1 End Enum #End Region

Avez-vous remarqu que lIntelliSense reconnat parfaitement votre type de donnes ?

Il nous reste dfinir une variable de type tableau pour stocker les informations saisies dans la zone de texte AuthorInfoTextBox. Lide est que lutilisateur saisit dans la bote de dialogue les diffrentes informations spares par des points virgules. A nous de rcuprer chacune de ces informations en les stockant dans un tableau.

Il est clair que le procd utilis ici pour rcuprer une telle liste dinformations manque dlgance mais par contre, cest top pour jouer un peu avec la notion de tableau .

Printemps 2008

Coach VB.NET

Page 56 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

En quoi consiste un tableau ? Un tableau est une squence dlments de donnes lis de manire logique et ayant le mme type de donnes. Les lments sont rangs au moyen dun index (ou indice). Le premier lment du tableau est rang lindex 0 et ainsi de suite :

Exemple dun tableau de 7 lments (de 0 6) :

Pour dfinir un tel tableau on crirait : Dim MonTableau(6) As <TypeDeDonnesDesElements>

Vous pouvez aussi dfinir des tableaux plusieurs dimensions pour ranger des donnes sous forme de matrice multidimensionnelle.

Dans notre cas, il sagit dun tableau unidimensionnel dont on ne connait pas lavance le nombre dlments, puisquon ne sait pas combien dinformations seront saisies par lutilisateur. Dclarez le tableau comme suit :

Code VB

#Region "Dclaration des variables prives de la classe" 'Dclaration des proprits de la bote des options Dim RecentFileListNumber As Short = 0 Dim ConfirmBeforeSave As Boolean = Boolean.FalseString

Printemps 2008

Coach VB.NET

Page 57 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dim SaveDirectoryPath as String = String.Empty Dim TraceEnabled As Boolean = Boolean.FalseString Dim SaveDirectoryType As DirectoryType = DirectoryType.MyDocuments Dim AuthorInfo() As String 'Dclaration des numrations Enum SaveDirectoryType MyDocuments = 0 Other = 1 End Enum #End Region

Pour en savoir plus sur lutilisation des tableaux en Visual Basic : http://msdn.microsoft.com/fr-fr/library/wak0wfyt.aspx

Tant quon y est, profitons en aussi pour parler de la notion de constante.

Quest-ce quune constante ? Une constante est une variable dont la valeur est immuable et ne change pas (elle reste constante justement) lors de lexcution du programme. Cest trs utile notamment pour remplacer la valeur correspondante par un nom significatif plus lisible et donc plus facile maintenir.

Prenons lexemple de lutilisateur qui saisit les informations dans la zone de texte des informations sur lauteur en les sparant par un point virgule. Plutt que de manipuler un sparateur du type ";", nous pourrions travailler sur la base dune constante avec un nom trs explicite.

Printemps 2008

Coach VB.NET

Page 58 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Notez les avantages suivants : Si vous avez besoin du sparateur plusieurs reprises dans le programme, cela vous permet de le dfinir quune seule fois de manire centralise et donc doptimiser la clart du programme tout en simplifiant sa maintenance. En plus une constante est moins gourmande en mmoire quune variablealors pourquoi sen priver ?

4. Ajoutez la dclaration dune constante SEPARATOR_SEMICOLON laide du mot cl CONST comme suit :

Code VB

#Region "Dclaration des variables prives de la classe" 'Dclaration des proprits de la bote des options End Enum 'Dclaration des constantes Const SEPARATOR_SEMICOLON As String = ";" #End Region

Pour en savoir plus sur les constantes en Visual Basic : http://msdn.microsoft.com/fr-fr/library/cyxe49xw.aspx

Bon, nous disposons maintenant de toutes les variables utiles pour enregistrer la configuration de lutilisateur dans la bote Options de lapplication. Il ny a plus qu coder la logique de lapplication ! Ca va faire mal

Printemps 2008

Coach VB.NET

Page 59 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

UTILISER LES STRUCTURES DU LANGAGE

Dans cet exercice, vous allez apprendre :

Excuter des instructions en fonction dune ou plusieurs conditions (IfThenElse), Tester plusieurs valeurs dune expression (Select), Excuter plusieurs actions sur un objet (With), Excuter plusieurs instructions plusieurs reprises (For), Excuter plusieurs instructions pour chaque lment dune collection ou dun tableau (Foreach).

Objectif Nous allons profiter de coder la logique de traitement de la bote de dialogue Options de lapplication pour dcouvrir quelques structures importantes du langage Visual Basic, telles que les structures de dcision ou de boucle.

STRUCTURES DE DCISION
Une structure de dcision est utile pour excuter une ou plusieurs instructions en fonction du rsultat dune condition.

Printemps 2008

Coach VB.NET

Page 60 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Contexte fonctionnel Lobjectif de cet exercice est de commencer coder le fonctionnement de loption de configuration du dossier de sauvegarde par dfaut des fichiers de notre diteur.

Le fonctionnement doit tre le suivant : Lorsque lutilisateur prfre enregistrer par dfaut dans le dossier Mes Documents, vous devez dsactiver le groupe de contrles encapsuls dans le conteneur Spcifier le dossier par dfaut parce quils ne sont daucune utilit.

En revanche, lorsque lutilisateur slectionne Autres dans la liste droulante, vous devez activer le groupe de contrles pour quil puisse saisir le chemin du dossier par dfaut de son choix laide de la bote de recherche de Windows :

Droulement de lexercice :

Printemps 2008

Coach VB.NET

Page 61 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

1. Dans un premier temps, nous allons complter le design de la bote de dialogue Options pour quelle intgre la liste des dossiers de sauvegarde possibles dans le contrle SaveDirectoryTypeComboBox : Affichez le formulaire Options en mode Design. Dans la page Fichiers du contrle de type TabControl, slectionnez le contrle SaveDirectoryTypeComboBox. Affichez les proprits du contrle. Cliquez sur la liste. en face de la proprit Items pour diter la collection des lments de

Entrez deux lments : Mes Documents, suivi la ligne de Autres :

Entrez un lment par ligne

Printemps 2008

Coach VB.NET

Page 62 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Validez en cliquant OK.

2. Codez maintenant le comportement SaveDirectoryPathGroupBox :

dynamique

du

groupe

de

contrles

Il faut savoir que chaque contrle standard Windows Form comporte une proprit Enabled de type Boolean. Il suffit de configurer cette proprit la valeur False pour que le contrle soit dsactiv.

Lavantage davoir plong tous les contrles concerns dans un mme contrle conteneur est quil suffit de dsactiver le conteneur pour que tous les contrles quil contient soient dsactivs du mme coup !

O allez-vous brancher le code de traitement de la slection de dossier ? Textuellement, vous voulez ragir selon loption slectionne par lutilisateur dans la liste droulante SaveDirectoryTypeComboBox.

Affichez la fentre de proprits du contrle SaveDirectoryTypeComboBox. Cliquez dans la barre doutils de la fentre de proprits pour consulter la liste des vnements disponibles pour cet lment.

Printemps 2008

Coach VB.NET

Page 63 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Cherchez lvnement qui correspond au changement de valeur slectionne dans la liste. Il sagit de lvnement par dfaut du contrle SelectedIndexChanged.

Double cliquez droite de lvnement SelectedIndexChanged pour gnrer automatiquement un gestionnaire de cet vnement.

3. Utilisez la structure de dcision IfThenElse pour coder le traitement dactivation du groupe de contrles en fonction de la valeur slectionne dans la liste droulante : Ajoutez le code suivant au gestionnaire dvnement :

Code VB

Printemps 2008

Coach VB.NET

Page 64 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Private Sub SaveDirectoryTypeComboBox_SelectedIndexChanged() _ Handles SaveDirectoryTypeComboBox.SelectedIndexChanged If SaveDirectoryTypeComboBox.SelectedItem = "Mes Documents" Then 'Dsactiver les contrles de slection SaveDirectoryPathGroupBox.Enabled = False Else 'Activer les contrles de slection SaveDirectoryPathGroupBox.Enabled = True End If End Sub

Que fait la structure IfThenEnd If ? Elle excute la (ou les) condition(s) situe(s) aprs le mot cl If. Si la condition est remplie, cest--dire quelle renvoie True, alors elle excute le code situ juste aprs le mot cl Then jusqu la ligne marque par End If. Combine avec le mot cl Else, elle peut galement effectuer un traitement dans le cas o au contraire la condition renvoie la valeur False.

Dans notre cas, la condition valuer est la valeur de SaveDirectoryTypeComboBox.SelectedItem est-elle gale "Mes Documents" ? La proprit SelectedItem du contrle de type ComboBox donne llment slectionn dans la liste. Toute liste de ce type tant compose dune paire dlments [Index, Valeur], vous pouvez galement travailler sur la proprit SelectedIndex qui donne lindex de llment slectionn.

Printemps 2008

Coach VB.NET

Page 65 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Pour en savoir plus sur ces proprits SelectedItem et SelectedIndex : http://msdn.microsoft.com/frfr/library/system.windows.forms.combobox.selecteditem.aspx

4. Testez le fonctionnement de la slection dans la liste : Enregistrez tous vos changements en cliquant sur Studio. dans la barre doutils de Visual

Excutez lapplication en mode Dbogage en cliquant sur Slectionnez le menu Outils > Options de lapplication.

(ou touche F5).

Vrifiez que le groupe de contrles est dsactiv lorsque vous slectionnez Mes Documents dans la liste :

Et quil est actif dans le cas contraire :

Bravo ! Ca fonctionne !

Printemps 2008

Coach VB.NET

Page 66 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Pour tout savoir sur les structures de dcision : http://msdn.microsoft.com/fr-fr/library/hh892482.aspx

STRUCTURES DE CONTRLE
Lobjectif de cet exercice est de dcouvrir lune des structures de contrle trs pratique du langage VB savoir linstruction With.

Contexte fonctionnel Lide est de terminer le code de traitement de la configuration du chemin du dossier de sauvegarde par dfaut des fichiers de lapplication.

Le principe est le suivant : - si lutilisateur clique sur OK dans la bote de recherche de dossiers, il faut rcuprer ce chemin et lafficher dans la zone de texte prvue cet effet. - en revanche sil clique sur le bouton Annuler, la zone de texte na pas lieu dtre mise jour. Notez que lutilisateur peut saisir un chemin directement dans la zone de texte sans utiliser le bouton Parcourir.

Printemps 2008

Coach VB.NET

Page 67 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

1. Utilisez la structure de dcision IfThen pour afficher le chemin du dossier choisi dans la zone de texte au retour de la bote de dialogue de recherche des dossiers de Windows.

Rappelez-vous que nous avons vu que pour contrler le code de fermeture dune bote de dialogue, il faut utiliser sa proprit DialogResult. Dans le premier exercice, cest nous qui devions coder ce code de fermeture puisquil sagissait dune bote de dialogue personnalise. Dans le cas de la bote standard FolderBrowserDialog, le code de fermeture est automatiquement renseign . Nous navons plu qu tester le code de fermeture pour renseigner la zone de texte en correspondance.

Retrouvez le gestionnaire dvnement en rponse au SaveDirectoryPathButton dans le fichier OptionsDialog.vb :

clic

du

bouton

Printemps 2008

Coach VB.NET

Page 68 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Modifiez le code comme suit :

Code VB

Private Sub SaveDirectoryPathButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles SaveDirectoryPathButton.Click If SaveDirectoryPathFolderBrowserDialog.ShowDialog() _ = DialogResult.OK Then 'Afficher le chemin du dossier slectionn dans la zone de texte SaveDirectoryPathTextBox.Text = _ SaveDirectoryPathFolderBrowserDialog.SelectedPath End If End Sub

Notez que cest la proprit SelectedPath de la classe FolderBrowserDialog qui donne le chemin du dossier slectionn dans la bote de dialogue.

Franchement cest trop long SaveDirectoryPathFolderMachinCouette, vous ne trouvez pas ?

ce

nom

Heureusement, il existe un moyen pour simplifier lcriture tout en conservant un nom Printemps 2008 Coach VB.NET Page 69 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

malgr tout explicite . Utilisez un bloc du type :

With <MonObjetQueJeNeDesigneQuUneSeuleFoisEnDebutDeBloc> End With

A lintrieur du bloc, vous pouvez invoquer nimporte quels membres de votre objet par un point (.) comme habituellement mais en tant dispens de rpter le nom de lobjet lui-mme !

Modifiez le code pour utiliser linstruction WithEnd With:

Code VB

Private Sub SaveDirectoryPathButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles SaveDirectoryPathButton.Click With SaveDirectoryPathFolderBrowserDialog If .ShowDialog() = DialogResult.OK Then 'Afficher le chemin du dossier slectionn dans la zone de texte SaveDirectoryPathTextBox.Text = .SelectedPath End If End With End Sub

Printemps 2008

Coach VB.NET

Page 70 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Pour tout savoir sur linstruction WithEnd With : http://msdn.microsoft.com/fr-fr/library/wc500chb.aspx

2. Testez le fonctionnement de la bote de dialogue de recherche : Enregistrez tous vos changements en cliquant sur Studio. dans la barre doutils de Visual

Excutez lapplication en mode Dbogage en cliquant sur Slectionnez le menu Outils > Options de lapplication.

(ou touche F5).

Slectionnez Autres dans la liste Toujours enregistrer dans le dossier pour activer le groupe de contrles Spcifier le dossier par dfaut. Cliquez Parcourir pour slectionner un dossier laide de la bote de recherche de Windows. Slectionnez un dossier quelconque.

Quittez la bote en cliquant OK. Vrifiez que le chemin du dossier choisi saffiche dans la zone de texte.

Printemps 2008

Coach VB.NET

Page 71 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Supposons quon veuille amener lutilisateur sur sa structure de dossier Mes Documents par dfaut. Comment faire ? Le dossier racine partir duquel dmarre la recherche dans la bote de dialogue est configurable via la proprit RootFolder du contrle FolderBrowserDialog.

3. Initialisez la bote de recherche sur son dossier Mes Documents dans le cas o aucun chemin nest spcifi dans la zone de texte : Modifiez le code du gestionnaire dvnement SaveDirectoryPathButton_Click comme suit :

Code VB

Private Sub SaveDirectoryPathButton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles SaveDirectoryPathButton.Click With SaveDirectoryPathFolderBrowserDialog If String.IsNullOrEmpty(SaveDirectoryPathTextBox.Text) Then

Printemps 2008

Coach VB.NET

Page 72 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

'Si la zone de texte est vide, dmarrez la racine de Mes Documents .RootFolder = Environment.SpecialFolder.MyDocuments Else .SelectedPath = SaveDirectoryPathTextBox.Text End If If .ShowDialog() = DialogResult.OK Then 'Afficher le chemin du dossier slectionn dans la zone de texte SaveDirectoryPathTextBox.Text = .SelectedPath End If End With End Sub

Plusieurs points intressants ici : Notez que pour tester si une chane de caractres est vide, il faut invoquer la mthode IsNullOrEmpty de la structure de type String en lui passant la chane valider en paramtre. La classe Environment du Framework.NET nous donne tous les renseignements dont nous avons besoin sur lenvironnement de lutilisateur. Retrouvez par exemple tous les chemins des dossiers spciaux du systme grce lnumration Environment.SpecialFolder.

Pour connatre les chemins proposs par lnumration SpecialFolder : http://msdn.microsoft.com/fr-fr/library/system.environment.specialfolder.aspx

4. Testez linitialisation de la bote de recherche : Enregistrez tous vos changements en cliquant sur Studio. Coach VB.NET dans la barre doutils de Visual

Printemps 2008

Page 73 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Excutez lapplication en mode Dbogage en cliquant sur Slectionnez le menu Outils > Options de lapplication.

(ou touche F5).

Slectionnez Autres dans la liste Toujours enregistrer dans le dossier pour activer le groupe de contrles Spcifier le dossier par dfaut. Cliquez Parcourir pour vrifier que le dossier par dfaut est Mes Documents.

Slectionnez un dossier quelconque.

Quittez la bote en cliquant OK. Vrifiez que le chemin du dossier choisi saffiche dans la zone de texte. Coach VB.NET Page 74 sur 117

Printemps 2008

Microsoft

Utiliser les structures et les types de base Atelier 3

Cliquez nouveau sur le bouton Parcourir.Vrifiez que la bote sinitialise la racine du chemin prcdent.

STRUCTURES DE BOUCLE
Une structure de boucle est utile pour excuter plusieurs fois de suite une ou plusieurs instructions, soit un nombre dtermin de fois, soit en fonction dune certaine condition ou jusqu ce quune condition soit remplie.

Printemps 2008

Coach VB.NET

Page 75 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dans cet exercice, nous allons coder linitialisation et la sauvegarde des diffrentes options de la bote de dialogue OptionsDialog laide des variables que nous avons prpares lexercice prcdent. Nous en profiterons au passage pour dcouvrir quelques unes des structures de boucle de VB.

Contexte fonctionnel Lobjectif de cet exercice est denregistrer les valeurs configures par lutilisateur dans la bote de dialogue Options lorsquil clique le bouton OK.

Pour linstant ces options ne servent pas directement la logique de lapplication. Elles seront prises en compte dans la suite de ce tutorial par exemple, pour les options de longlet Fichiers, au moment de la sauvegarde sur disque des donnes de notre diteur.

Durant lexcution de lapplication, linverse, chaque fois que lutilisateur raffiche la bote doptions, les valeurs quil a configures doivent bien videmment tre restitues aux bons endroits dans la bote de dialogue :

Printemps 2008

Coach VB.NET

Page 76 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Droulement de lexercice :

1. Reprez dans le code lemplacement du code de sauvegarde des options de la bote :

Votre premier rflexe est peut-tre de coder la sauvegarde des options de la bote de dialogue sur le clic du bouton OK du formulaire OptionsDialog. En effet, la porte des variables que nous avons dfinies dans la classe Main pourrait tre configure de faon ce que les variables soient accessibles en dehors de la classe dans laquelle elles sont dfinies, donc depuis la classe OptionsDialog. Mais dun point de vue objet, ce ne serait pas une bonne approche dans la mesure o cette solution crerait un lien de dpendance entre la bote de dialogue et sa fentre parent. Une bonne pratique consiste penser les objets enfants en vitant tout prix les liens de dpendance avec un objet parent de faon pouvoir les rutiliser plus facilement dans dautres contextes. Nous allons donc coder la sauvegarde des options dans la classe Main juste aprs le retour de la mthode ShowDialog qui affiche la bote OptionsDialog.

Printemps 2008

Coach VB.NET

Page 77 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Oui, mais une fois que la bote de dialogue est ferme, lappel la mthode Close de la classe Form a d dtruire compltement le formulaire en mmoire et quepouic pour rcuprer les options configures par lutilisateur via les contrles daffichage de la bote.

Oui, mais non Parce quen ralit cette mthode Close ne se comporte pas du tout comme a justement dans le cas o le formulaire a t affich via la mthode ShowDialog. En clair, le formulaire reste intact en mmoire tant que nous nindiquons pas au runtime que nous nen avons plus besoin. Rassurez vous, quand bien mme vous oubliez de le prciser au runtime, le Garbage Collector (GC) qui est la femme de mnage du Framework .NET finit toujours par passer et faire le nettoyage qui simpose. Mais du coup, ce comportement nous arrange bien car nous allons pouvoir avoir accs

Printemps 2008

Coach VB.NET

Page 78 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

aux diffrents contrles du formulaire OptionsDialog directement aprs le retour de la mthode ShowDialog dans la classe Main !

Pour tout savoir sur la mthode Close de la classe Form : http://msdn.microsoft.com/fr-fr/vbasic/system.windows.forms.form.close.aspx

Affichez le fichier de code Main.vb. Retrouvez le code daffichage de la bote de dialogue OptionsDialog dans le gestionnaire dvnement associ au clic du menu Outils > Options de notre application :

Ajoutez une boucle de dcision pour marquer la sauvegarde des options de la bote dans le cas o le code de fermeture de la bote Options est OK.

Code VB

Private Sub OptionsToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OptionsToolStripMenuItem.Click Dim formOptions As OptionsDialog formOptions = New OptionsDialog

Printemps 2008

Coach VB.NET

Page 79 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Dim result As DialogResult result = formOptions.ShowDialog() If result = Windows.Forms.DialogResult.OK Then 'Enregistrer les options configures dans la bote par l'utilisateur End If End Sub

Mme si pour la maintenance, cest plutt bien de favoriser lcriture des lignes de code de la manire la plus dtaille possible, le langage VB permet aussi dtre plus concis, ce qui ne prsente pas que des inconvnients . Par exemple, la dclaration et linstanciation de la variable formOptions peut se faire en une seule ligne comme ceci :

Et vous pourriez vous passer de la variable result en crivant directement :

2. Reprez maintenant de la mme faon lemplacement du code dinitialisation des options de la bote :

Le chargement des contrles daffichage de la bote de dialogue doit se faire juste avant lappel la mthode ShowDialog.

Printemps 2008

Coach VB.NET

Page 80 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Ajoutez un commentaire pour marquer lemplacement dans le code comme suit :

3. Crez une procdure pour grer la sauvegarde des options : Ajoutez une nouvelle rgion la suite de la dclaration des variables de la classe Main intitule par exemple Traitement de la bote de dialogue Options :

Code VB

Public Class Main

#Region "Dclaration des variables prives de la classe" #End Region

#Region "Traitement de la bote de dialogue Options"

#End Region

Dans cette rgion, crez une procdure SaveOptions :

Printemps 2008

Coach VB.NET

Page 81 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) End Sub #End Region

Cest quoi une procdure ? Une procdure regroupe une srie dinstructions qui peut tre utilise plusieurs reprises dans le code. Cest un peu comme quand vous donnez votre repassage faire une tierce personne (comment ? vous le faites vous-mme ? Cest a je vais vous croire). Du coup, il faut lui transmettre quelques consignes. Cela sappelle des paramtres. Et si la personne a quelque chose vous dire en retour, on dit que la procdure renvoie une valeur de retour. Pour que le repassage dmarre, vous appelez la personne par son nom.

<Valeur retour> = <Nom procdure>(<Liste paramtres>)

Il faut savoir quil existe trois types de procdure dans le langage VB : les procdures Function qui effectue des actions puis retourne une valeur au programme appelant, les procdures Sub qui ne renvoient aucune valeur aprs lexcution des actions, et les procdures Property que vous aurons loccasion dexplorer plus tard dans ce tutorial lorsque nous travaillerons avec des objets.

Comme nous allons devoir rcuprer ltat des contrles de la bote de dialogue, nous devons transmettre la procdure lobjet correspondant notre instance de la bote

Printemps 2008

Coach VB.NET

Page 82 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

OptionsDialog en tant que paramtres.

Le mot cl ByVal indique la manire dont est transmise la donne par lappelant la procdure. Il y a deux faons de passer des paramtres une procdure : passage par valeur (ByVal) ou par rfrence (ByRf).

Passage par valeur ou par rfrence ? Dans le cas du passage par valeur, lappelant transmet la procdure une copie distincte de la donne. Quand la procdure est termine, la copie est dtruite. Du coup, si les actions de la procdure modifient la donne, puisquil sagit dune copie, la donne initiale dans lappelant reste inchange au sortir de la procdure.

Appel de MaProcdure(

Si MaProcdure modifie

A en

, B

resteAinchange.

Dans le cas du passage par rfrence, cest une rfrence (qui reprsente la localisation de la donne en mmoire) qui est transmise la procdure. Cest un peu comme si vous transmettiez la procdure une deuxime porte daccs la donne. Du coup toute modification effectue durant les actions de la procdure modifie la donne initiale de lappelant, mme si au sortir de la procdure la deuxime porte est dtruite.

Appel de MaProcdure(rfrence vers)

Printemps 2008

Coach VB.NET

Page 83 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Si MaProcdure agit sur

, cela impacte aussi la donne dans lappelant. A

Attention toutefois aux types de donnes par rfrence. Cest le cas typiquement si vous manipulez des objets. Passage par valeur dun type rfrence :

Objet

rf

Appel de MaProcdure(

rf

Objet Si MaProcdure modifie a impacte directement lobjet dans lappelant puisque les deux rfrences pointent sur le mme objet mmoire. Par contre, si MaProcdure dtruit est toujours intacte dans lappelant. , la rfrence rf

rf

Passage par rfrence dun type rfrence :

Objet

Printemps 2008

Coach VB.NET

Page 84 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Appel de MaProcdure( rfrence vers ) rf

Objet Si MaProcdure modifie a impacte videmment directement lobjet dans lappelant mais cette fois ci, si elle dtruit la rfrence, est perdue aussi pour lappelant ! rf

Pour en savoir plus sur les procdures Sub : http://msdn.microsoft.com/fr-fr/library/dz1z94ha.aspx Pour tout savoir sur le passage de paramtres par valeur ou par rfrence : http://msdn.microsoft.com/fr-fr/library/ddck1z30.aspx

Ajoutez le code de sauvegarde de la demande de confirmation :

Ltat dun contrle CheckBox est donn par sa proprit Checked qui a la valeur True lorsque la case est coche et False sinon.

Printemps 2008

Coach VB.NET

Page 85 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) ConfirmBeforeSave = form.ConfirmBeforeSaveCheckBox.Checked End Sub #End Region

Ajoutez le code de sauvegarde de lactivation du traage dans le journal de Windows :

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) ConfirmBeforeSave = form.ConfirmBeforeSaveCheckBox.Checked TraceEnabled = form.TraceCheckBox.Checked End Sub #End Region

Ajoutez le code de sauvegarde du nombre dlments dans la liste des fichiers rcents :

Printemps 2008

Coach VB.NET

Page 86 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Attention ! LIntelliSense nous dit que la proprit Value qui donne la valeur dun contrle NumericUpDown est une donne de type Decimal.

Or nous avons choisi de dfinir une variable de type Short dans la classe Main pour sauvegarder cette information. La solution la plus simple serait de modifier le type de la donne que nous avons utilis pour la variable de stockage. Mais sachez quil est possible aussi de convertir une donne pour la forcer apparatre sous la forme dun autre type de donnes. Attention la perte dinformation qui pourrait tre occasionne !! Pour ce faire, nous allons utiliser la fonction de conversion du type Short, appele CShort, de faon forcer le format du rsultat dans le type choisi pour notre variable.

Pour en savoir plus sur les fonctions de conversion de types de donnes : http://msdn.microsoft.com/fr-fr/library/s2dy91zy.aspx

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) ConfirmBeforeSave = form.ConfirmBeforeSaveCheckBox.Checked TraceEnabled = form.TraceCheckBox.Checked RecentFileListNumber = _

Printemps 2008

Coach VB.NET

Page 87 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

CShort( form.RecentFileListNumericUpDown.Value) End Sub #End Region

Cest quon est quand mme habitu mieux est-ce que VB naurait pas pu sen sortir tout seul en convertissant automatiquement la valeur dans le type attendu ?

Conversion implicite ou explicite ? Cest vrai que vous pouvez laisser VB soccuper de la conversion cest--dire sans avoir besoin dinvoquer une fonction de conversion. On parle alors de conversion implicite alors que nous avons ralis une conversion explicite en utilisant explicitement une fonction de conversion bien dtermine. Mais une conversion implicite est plus lourde puisquelle donne du travail supplmentaire au runtime et elle est susceptible de produire des rsultats inattendus en pleine excution ! Dans certain cas, elle nest dailleurs pas autorise et le compilateur vous en informe

Ajoutez le code de sauvegarde des informations sur lauteur :

Rappelez-vous, nous avons dcid de sauvegarder cette information sous la forme dun tableau de chane de caractres appel AuthorInfo, dont chacun des lments est lune des informations spares par un point virgule dans le texte de la zone de saisie. Nous avons dailleurs dfini une constante SEPARATOR_SEMICOLON pour reprsenter la chane caractrisant le point virgule. Heureusement pour nous, VB nest pas en manque lorsquil sagit de grer les chanes de caractre. Si vous voulez enlever un morceau dune chane, comparer deux chanes, supprimer les espaces blancs, ou que sais-je, comme cest le cas ici, dcouper la chane en plusieurs morceaux en fonction dun sparateur, il suffit de retrouver la fonction de Printemps 2008 Coach VB.NET Page 88 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

traitement adquate parmi la liste des fonctions de traitement de caractres de VB. Dans notre cas, il sagit de la fonction Split qui dcoupe une chaine en suivant le sparateur fourni en paramtre et retourne un tableau de chanes.

Consulter la liste des manipulations de chanes ici : http://msdn.microsoft.com/fr-fr/library/e3s99sd8.aspx

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) ConfirmBeforeSave = form.ConfirmBeforeSaveCheckBox.Checked TraceEnabled = form.TraceCheckBox.Checked RecentFileListNumber = _ CShort( form.RecentFileListNumericUpDown.Value) AuthorInfo = _ form.AuthorInfoTextBox.Text.Split(SEPARATOR_SEMICOLON) End Sub #End Region

Reste le code de sauvegarde des informations de dossier. Utilisez la structure de dcision IfThen...End If pour enregistrer le dossier slectionn par lutilisateur dans la variable SaveDirectoryPath :

Printemps 2008

Coach VB.NET

Page 89 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) If form.SaveDirectoryTypeComboBox.SelectedIndex = _ DirectoryType.MyDocuments Then SaveDirectoryPath = _ My.Computer.FileSystem.SpecialDirectories.MyDocuments Else SaveDirectoryPath = form.SaveDirectoryPathTextBox.Text End If End Sub #End Region

Notez que le chemin du dossier Mes Documents de lutilisateur est donn par lobjet My.Computer que nous avons dj rencontr latelier prcdent. (A ne pas confondre avec Environment.SpecialFolder.MyDocuments que nous avons vu dans le premier exercice qui est une numration qui caractrise le type de dossier).

Printemps 2008

Coach VB.NET

Page 90 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Quen est-il si la liste SaveDirectoryTypeComboBox comprenait plus de deux valeurs ? On ne pourrait plus se contenter de la structure Else pour dterminer le bon chemin de dossier. Il existe une autre structure de dcision qui permet de vrifier mme dans le bloc Else quune condition est valide : linstruction ElseIf. Cela donne le code suivant :

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) If form.SaveDirectoryTypeComboBox.SelectedIndex = _ DirectoryType.MyDocuments Then SaveDirectoryPath = _ My.Computer.FileSystem.SpecialDirectories.MyDocuments ElseIf form.SaveDirectoryTypeComboBox.SelectedIndex = _ DirectoryType.Other Then SaveDirectoryPath = form.SaveDirectoryPathTextBox.Text End If End Sub #End Region

Sil est possible denchaner les ElseIf dans le cas o lon aurait beaucoup de valeurs dans la ComboBox, il faut dire que cela finirait par donner un code trop lourd. Du coup, il existe une autre structure de dcision qui permet de tester plusieurs valeurs dune expression avant de coder une action : linstruction Select. Elle permet de Printemps 2008 Coach VB.NET Page 91 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

comparer une expression plusieurs valeurs diffrentes et dexcuter des actions en correspondance. Dans notre cas nous devons comparer la valeur de lindex de la slection avec lensemble des index possibles de la liste droulante.

Pensez utiliser les extraits (snippets) de VB fournis dans Visual Studio pour coder les structures. Il suffit de taper le premier mot cl de la structure puis dappuyer la touche TAB, et le bloc de code type apparat automatiquement :

Tapez le mot cl Select puis enfoncer la touche TAB

Printemps 2008

Coach VB.NET

Page 92 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Pour tout savoir sur Select : http://msdn.microsoft.com/fr-fr/library/ms172856.aspx

Modifiez le code pour quil utilise la structure de dcision Select :

Code VB

Printemps 2008

Coach VB.NET

Page 93 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) Select Case form.SaveDirectoryTypeComboBox.SelectedIndex Case DirectoryType.MyDocuments SaveDirectoryPath = _ My.Computer.FileSystem.SpecialDirectories.MyDocuments Case DirectoryType.Other SaveDirectoryPath = form.SaveDirectoryPathTextBox.Text End Select End Sub #End Region

Sachez que chaque instruction Case peut aussi contenir une ou plusieurs valeurs, une plage de valeurs etc Ici, on se sert de notre numration DirectoryType qui facilite grandement la lisibilit du code. Vous pouvez aussi prvoir une dernire instruction Case Else pour grer le cas o aucune des valeurs proposes dans les autres Case ne correspondraient.

Enregistrez tous vos changements avant de poursuivre.

4. Avant de pouvoir tester le bon fonctionnement de la sauvegarde des options, nous allons crire le code inverse qui initialise la bote de dialogue Options avec les variables de stockage de la classe Main. Ajoutez la suite de la procdure SaveOptions, une nouvelle procdure nomme LoadOptions comme suit :

Printemps 2008

Coach VB.NET

Page 94 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

#Region "Traitement de la fentre d'options" Private Sub SaveOptions(ByVal form As OptionsDialog) End Sub Private Sub LoadOptions(ByVal form As OptionsDialog) End Sub #End Region

Ajoutez le code dinitialisation des deux cases cocher :

Code VB

#Region "Traitement de la fentre d'options" Private Sub LoadOptions(ByVal form As OptionsDialog) form.ConfirmBeforeSaveCheckBox.Checked = ConfirmBeforeSave form.TraceCheckBox.Checked = TraceEnabled End Sub #End Region

Ajoutez le code dinitialisation de la liste des fichiers rcents en prvoyant la conversion de type de donnes inverse laide de la fonction CDec :

Code VB

Printemps 2008

Coach VB.NET

Page 95 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

#Region "Traitement de la fentre d'options" Private Sub LoadOptions(ByVal form As OptionsDialog) form.ConfirmBeforeSaveCheckBox.Checked = ConfirmBeforeSave form.TraceCheckBox.Checked = TraceEnabled form.RecentFileListNumericUpDown.Value = _ CDec(RecentFileListNumber) End Sub #End Region

Ajoutez le code dinitialisation des informations de dossier. Dans ce sens, il faut galement coder linitialisation de la liste droulante SaveDirectoryTypeComboBox.

Code VB

#Region "Traitement de la fentre d'options" Private Sub LoadOptions(ByVal form As OptionsDialog) form.ConfirmBeforeSaveCheckBox.Checked = ConfirmBeforeSave form.TraceCheckBox.Checked = TraceEnabled form.RecentFileListNumericUpDown.Value = _ CDec(RecentFileListNumber) Dim resultComparison As Integer = _ String.Compare(SaveDirectoryPath, _ My.Computer.FileSystem.SpecialDirectories.MyDocuments) If resultComparison = 0 _ Or String.IsNullOrEmpty(SaveDirectoryPath) Then

Printemps 2008

Coach VB.NET

Page 96 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

form.SaveDirectoryTypeComboBox.SelectedIndex = _ DirectoryType.MyDocuments Else form.SaveDirectoryTypeComboBox.SelectedIndex = _ DirectoryType.Other form.SaveDirectoryPathTextBox.Text = SaveDirectoryPath End If End Sub #End Region

Notez : lutilisation de loprateur logique Or qui permet dvaluer deux conditions et deffectuer une action si lune ou lautre des conditions savre vraie. Retrouvez la liste de tous les oprateurs du langage VB ici : http://msdn.microsoft.com/fr-fr/library/f15ea9k8.aspx lutilisation de la mthode Compare de la classe du Framework .NET correspondant au type String qui compare deux chanes de caractres. Attention au rsultat renvoy par cette mthode qui peut surprendre un peu car il nest pas binaire. Tous les dtails ici : http://msdn.microsoft.com/frfr/library/84787k22(VS.85).aspx

Reste le code de chargement de la zone de texte avec la liste des informations dauteur du tableau de chanes AuthorInfo.

Cest l que nous allons mettre en uvre une premire structure de boucle de VB . En effet, il faut parcourir chaque lment du tableau et pour chacun deux, crire une action qui ajoute linformation la zone de texte dans la bote Options. En somme il faut

Printemps 2008

Coach VB.NET

Page 97 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

ritrer lexcution dune action autant de fois que le tableau comporte dlments. La boucle For permet justement dexcuter une action en boucle. Elle incrmente un index sur un nombre doccurrences donnes et excute les actions chaque incrment. Ce qui donne :

Printemps 2008

Coach VB.NET

Page 98 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Code VB

#Region "Traitement de la fentre d'options" On recommence Private Sub LoadOptions(ByVal form As OptionsDialog) +1 Index For index As Integer = 0 To AuthorInfo.Count - 1 form.AuthorInfoTextBox.AppendText( _ AuthorInfo(index) & SEPARATOR_SEMICOLON) Next End Sub #End Region

Plusieurs remarques : Pensez lIntelliSense pour gnrer un bloc For automatiquement ! Vous devez dfinir un compteur en prcisant son type (index As Integer) et sa valeur de dpart (= 0). Le code contenu dans la structure de boucle est excut une premire fois puis le mot cl Next marque le passage litration suivante. Le compteur est incrment de 1 et le pointeur dexcution remonte sur la premire action de la boucle. Le code est alors r excut autant de fois que dincrment ncessaire pour que le compteur atteigne la valeur maximale donne par le mot cl To. Une boucle For prsume donc que vous connaissez lavance le nombre ditration que vous voulez effectuer ! Ce qui est notre cas ici puisque la taille dun tableau est donne par sa proprit Count. Attention lindexation dun tableau qui dmarre toujours 0 et se termine donc <Tableau>.Count 1 Pour accder un lment du tableau, il suffit dindiquer le nom du tableau suivi de lindex de llment entre parenthse. Le premier lment de notre tableau est AuthorInfo(0) puis AuthorInfo(1) etc. Notez lutilisation de la mthode AppendText qui sapplique toute variable de Coach VB.NET Page 99 sur 117

Printemps 2008

Microsoft

Utiliser les structures et les types de base Atelier 3

type String. Elle permet de concatner une chane de caractres la suite de la chane courante.

Il existe une structure de boucle encore plus adapte ici car nous fonctionnons sur un tableau dlments. Il sagit de la structure For Each qui permet ditrer sur chaque lment dune collection dobjets ou dun tableau plutt que dincrmenter un index. Elle est plus performante que la prcdente, ce qui ne gche rien.

Remplacez le code prcdent avec une boucle For Each comme suit:

Code VB

#Region "Traitement de la fentre d'options" Private Sub LoadOptions(ByVal form As OptionsDialog) For Each Info As String In AuthorInfo form.AuthorInfoTextBox.AppendText(Info & _ SEPARATOR_SEMICOLON) Next End Sub #End Region

Pour tout savoir sur les structures de boucle : http://msdn.microsoft.com/fr-fr/library/ezk76t25.aspx

Printemps 2008

Coach VB.NET

Page 100 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Lorsque vous utilisez un objet cest--dire une variable de type rfrence comme cest le cas de notre tableau AuthorInfo, vous devez toujours vous demander si la variable est bien associe avec un objet avant de vous lancer lutiliser. Par exemple, dans notre cas, la toute premire fois que nous allons afficher la bote de dialogue Options et initialiser son contenu, le tableau AuthorInfo sera encore vide cest-dire que la rfrence ne pointe sur aucun objet.

AuthorInfo rf

Et vous vous en doutez, cest le genre de situation que le runtime dexcution risque de ne pas apprcier. Il gnre une belle exception pour indiquer quil a rencontr une rfrence nulle.

Comment vrifier quune rfrence est nulle ? Il suffit de vrifier quelle nest pas gale Nothing. Il faut savoir que lorsquil sagit de comparer deux rfrences, VB fournit loprateur Is plutt que de travailler sur la base de loprateur = standard.

Pour tout savoir sur lutilisation de Is en tant quoprateur : http://msdn.microsoft.com/fr-fr/library/kb136x1y.aspx

Vrifiez laide dune structure de dcision If que le tableau nest pas vide avant de commencer lutiliser :

Code VB

#Region "Traitement de la fentre d'options"

Printemps 2008

Coach VB.NET

Page 101 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Private Sub LoadOptions(ByVal form As OptionsDialog) If Not AuthorInfo Is Nothing Then For Each Info As String In AuthorInfo form.AuthorInfoTextBox.AppendText(Info & _ SEPARATOR_SEMICOLON) Next End If End Sub #End Region

Bravo ! Cest presque termin, il reste un tout petit dtail rgler. En effet, lorsque la boucle traite le dernier lment du tableau elle ajoute un point virgule en trop la suite de la zone de texte de la bote Options. Cest embtant car dans le processus inverse de sauvegarde du tableau, la mthode Split interprterait le point virgule supplmentaire comme un dernier lment vide. Une mthode simple consiste supprimer le dernier point virgule juste aprs linstruction Next cest--dire une fois que le programme sort de la boucle. Pour cela nous allons utiliser une autre mthode de traitement de chane de caractres, TrimEnd, qui gre la suppression dun morceau de chane partir de sa fin.

Ajoutez une ligne juste aprs lexcution de la boucle pour supprimer le dernier point virgule :

Code VB

#Region "Traitement de la fentre d'options"

Printemps 2008

Coach VB.NET

Page 102 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Private Sub LoadOptions(ByVal form As OptionsDialog) If Not AuthorInfo Is Nothing Then For Each Info As String In AuthorInfo form.AuthorInfoTextBox.AppendText(Info & _ SEPARATOR_SEMICOLON) Next form.AuthorInfoTextBox.Text = _ form.AuthorInfoTextBox.Text.TrimEnd(SEPARATOR_SEMICOLON) End If End Sub #End Region

Vous voyez que la constante SEPARATOR_SEMICOLON est bien utile ! Cela fait dj trois fois que vous lutilisez diffrents endroits dans le code, autant demplacements quil faudrait retoucher si le sparateur venait changer et que vous naviez pas dfini une constante

5. Testez maintenant le fonctionnement de la sauvegarde et du chargement des options de la bote de dialogue. Ajoutez lappel des deux procdures LoadOptions et SaveOptions que vous venez dcrire dans le gestionnaire dvnement OptionsToolStripMenuItem_Click aux emplacements prvus cet effet :

Code VB

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

Printemps 2008

Coach VB.NET

Page 103 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Handles OptionsToolStripMenuItem.Click Dim formOptions As OptionsDialog = New OptionsDialog 'Chargement des options dans la bote de dialogue LoadOptions(formOptions) If formOptions.ShowDialog() = Windows.Forms.DialogResult.OK Then 'Enregistrer les options configures dans la bote par l'utilisateur SaveOptions(formOptions) End If End Sub

Enregistrez tous vos changements. Excutez lapplication (F5). Cliquez le menu Outils > Options. Vrifiez que la bote de dialogue est correctement initialise. La liste droulante du type de dossier denregistrement doit notamment tre initialise Mes Documents :

Printemps 2008

Coach VB.NET

Page 104 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Renseignez les diffrentes options de la bote de dialogue votre guise. Par exemple :

Validez la bote en cliquant OK. Raffichez la bote de dialogue en cliquant Outils > Options pour vrifier que vous retrouvez correctement toutes les options configures prcdemment.

Bien ! Votre bote doptions est maintenant oprationnelle

Printemps 2008

Coach VB.NET

Page 105 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

POUR ALLER PLUS LOIN

TRAITEMENT DU MENU CONTEXTUEL DE LICNE DE NOTIFICATION


Et si vous traitiez le code correspondant au clic sur les diffrentes options du menu contextuel de licne de notification de lapplication que vous avez construit latelier 2 prcdent ?

Il se trouve que le Framework fournit lnumration FormWindowState dans lespace de noms System.Windows.Forms, pour vous aider spcifier la faon dont une fentre Windows Form doit tre affiche :

A vous de jouer !

Retrouvez la dfinition de lnumration FormWindowState ici : http://msdn.microsoft.com/frfr/library/system.windows.forms.formwindowstate(VS.80).aspx

Printemps 2008

Coach VB.NET

Page 106 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Vous devez obtenir le code suivant dans la classe Main :

Un truc sympa faire serait galement de griser les menus contextuels qui sont inutiles en fonction du contexte de la fentre. Par exemple, le menu Maximiser la fentre devrait tre gris quand la fentre est dj ltat maximis.

Dans ce cas, il faut exploiter la proprit Enabled des options du menu que nous avons dj rencontre dans cet atelier pour les contrles de la bote Options. Indiquez la valeur True ou False pour respectivement activer ou griser les options de menu.

Printemps 2008

Coach VB.NET

Page 107 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Reste dterminer o brancher le code correspondant ? Le besoin est le suivant : le menu Maximiser la fentre doit tre gris quand la fentre est en tat maximis. Lobjet sur lequel porte lvnement dclencheur est donc le formulaire Main, et il faudrait chercher sur cette classe un vnement qui caractrise le changement dtat de la fentre.

Affichez le formulaire Main en mode Design. Affichez la fentre de Proprits de lobjet Main en cliquant F4. Basculez sur la liste des vnements en cliquant sur fentre de Proprits : dans la barre doutils de la

Aidez-vous de laide contextuelle pour comprendre quoi correspond chaque vnement de la liste.

Lvnement qui nous intresse ici est SizeChanged qui caractrise un changement de taille de la fentre. Notez que le nom de lvnement inclut le verbe Change qui dtermine laction correspondante, et que celui-ci est ici au prtrit (au pass) caractris par la terminaison ed en anglais. Cela nest pas tout fait insignifiant puisque la forme passe permet dindiquer que lvnement sera donc dclench aprs que laction aura eu lieu. Au contraire, certains noms dvnement utilisent le verbe au prsent progressif, avec la terminaison ing, pour indiquer que lvnement est dclench au dbut de laction. La distinction est importante puisque dans ce dernier cas, vous pouvez carrment interagir Printemps 2008 Coach VB.NET Page 108 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

avec laction, voire lannuler. Par exemple, FormClosing est dclench en dbut de processus de fermeture de la fentre et il est possible dannuler ce processus en forant la fentre rester ouverte. Faites un double clic sur lvnement SizeChanged pour gnrer un gestionnaire dvnement. Le code pour griser les options de menu en fonction de ltat de la fentre pourrait tre le suivant :

Code VB

Private Sub Main_SizeChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles MyBase.SizeChanged Me.MaximiserLaFentreToolStripMenuItem.Enabled = _ Not (Me.WindowState = FormWindowState.Maximized) Me.MinimiserLaFentreToolStripMenuItem.Enabled = _ Not (Me.WindowState = FormWindowState.Minimized) Me.RestaurerLaFentreToolStripMenuItem.Enabled = _ Not (Me.WindowState = FormWindowState.Normal) End Sub

Not est l'oprateur de ngation logique qui applique une ngation sur lexpression qui suit. Il est dfini pour un oprande de type boolen et retourne True si, et seulement si, l'oprande est False, et inversement. Tout simplement il inverse le rsultat de lexpression boolenne entre parenthses

Or notre besoin est de vrifier ltat de la fentre et de griser le menu correspondant en consquence. Par exemple, le code (Me.WindowState = FormWindowState.Maximized) retourne True dans le cas o ltat de la fentre est Printemps 2008 Coach VB.NET Page 109 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

maximis. Or cest prcisment dans ce cas que loption de menu Maximiser la fentre doit tre grise. Donc il suffit dinverser la valeur de lexpression de vrification de ltat de la fentre pour en dduire la valeur de la proprit Enabled de loption de menu.

Pour tout savoir sur loprateur Not : http://msdn.microsoft.com/fr-fr/library/2cwcswt4.aspx

Il ne vous reste qu tester lapplication pour vrifier que le menu contextuel se comporte comme souhait !

Printemps 2008

Coach VB.NET

Page 110 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

ECRIRE DANS LE JOURNAL DE WINDOWS


Un dernier petit exercice pour la forme Que fait-on si lutilisateur active le traage dans le journal de Windows ? On pourrait par exemple crire un message dans le journal de Windows chaque fois quune erreur de logique se produit dans lapplication.

Dans cet exercice, nous allons journaliser la configuration des options de dossier de lutilisateur dans la bote des options de Windows.

1. Ajoutez une procdure appele LogOptions dans la classe Main. Code VB Crez une nouvelle procdure la suite des prcdentes dans la classe Main :

Private Sub LogOptions() End Sub

Printemps 2008

Coach VB.NET

Page 111 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Branchez tout de suite lappel de cette procdure lors de la sauvegarde des options de la bote dans la procdure SaveOptions, condition bien sr que le traage soit activ :

Code VB

Private Sub SaveOptions(ByVal form As OptionsDialog) 'Sauvegarde de l'activation du traage dans le journal de Windows TraceEnabled = form.TraceCheckBox.Checked If form.TraceCheckBox.Checked Then LogOptions() End If End Sub

Pour apprendre journaliser une information dans le journal de Windows, pensez une fois de plus aux extraits de code (snippets) fournis par VB. Faites un clic droit Insrer un extrait > Application Compilation, ressources et paramtres > Ecrire un message dans le journal dapplications.

Printemps 2008

Coach VB.NET

Page 112 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Par contre, la ligne de code gnre fait rfrence lobjet My.Application.Log et sa mthode WriteEntry qui crit par dfaut dans la fentre de sortie de Visual Studio plutt que dans le journal de Windows par dfaut.

En fait elle crit dans ce quon appelle les couteurs de journalisation des vnements de lapplication dont lemplacement est dfini au niveau des fichiers de configuration de la machine.

Pour creuser la question sur la mthode WriteEntry de lobjet My.Application.Log : http://msdn.microsoft.com/fr-fr/library/xbw77c0x(VS.80).aspx ou encore ce lien : http://msdn.microsoft.com/fr-fr/library/7fx0fexe(VS.80).aspx

Voici le code que nous vous proposons en rponse ce dernier petit exercice. Il nutilise pas lextrait de code prcdent car nous voulons illustrer comment crire dans le journal de Windows en configurant la source du message de manire spcifique pour bien identifier la provenance du message :

Code VB

Sub LogOptions() My.Application.Log.WriteEntry(logMessage.ToString()) 'Construction du message enregistrer' Dim logMessage As System.Text.StringBuilder = _

Printemps 2008

Coach VB.NET

Page 113 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

New System.Text.StringBuilder logMessage.AppendFormat("Prefered Save Directory Path : {0}", _ saveDirectoryPath) logMessage.AppendFormat("Confirm before save : {0}", _ confirmBeforeSave.ToString()) 'Cration d'une source d'vnement spcifique notre application If Not EventLog.SourceExists("Coach VB.NET") Then System.Diagnostics.EventLog.CreateEventSource("Coach VB.NET", _ "Application") End If 'Cration d'un journal dont la source est celle dfinie prcdemment Dim myLog As System.Diagnostics.EventLog = _ New System.Diagnostics.EventLog() myLog.Source = "Coach VB.NET" 'Ecriture du message dans le journal myLog.WriteEntry(logMessage.ToString()) End Sub

Plusieurs petites choses sympas dans ce morceau de code : Tout dabord parlons de lutilisation de la classe StringBuilder pour concatner les diffrents morceaux de texte que lon veut ajouter au message du journal.

Pourquoi dfinir un objet de type StringBuilder ? Il faut savoir quune fois que vous assignez une valeur une variable de type String, cette chane est immuable, ce qui signifie que vous ne pouvez pas modifier sa longueur ou son contenu. En ralit, VB vous autorise modifier la valeur dune variable de type String autant de fois que vous le voulez mais Printemps 2008 Coach VB.NET Page 114 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

dans les coulisses, il cre chaque modification une nouvelle chane en mmoire et abandonne la prcdente. La variable String pointe ensuite vers la nouvelle chane. Du coup, comme cest le cas ici, lorsque vous devez effectuer plusieurs changements successifs sur la valeur dune chane, a nest pas trs performant . Avec la classe StringBuilder de lespace de noms System.Text, le Framework .NET vous propose une sorte de type String mutable. La mthode AppendFormat permet de concatner plusieurs morceaux successivement la chane en grant son format.

Pour en savoir plus sur la classe StringBuilder : http://msdn.microsoft.com/fr-fr/library/system.text.stringbuilder.aspx

Ensuite, le code utilise un objet de type EventLog pour crer une source nomme Coach VB.NET pour quon puisse reprer facilement les messages du journal en provenance de notre application. Une fois que cette source est enregistre auprs du journal Application de Windows, il nest plus ncessaire de la redfinir do le test dexistence de la source avant lordre de cration de celle-ci. Lcriture proprement dite dans le journal se fait au travers de la mthode WriteEntry que nous avons vu dans lextrait de code prcdent.

Pour en savoir plus sur la System.Diagnostics.EventLog :

classe

EventLog de

lespace

de

noms

http://msdn.microsoft.com/fr-fr/library/system.diagnostics.eventlog(VS.80).aspx

Printemps 2008

Coach VB.NET

Page 115 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Notez que nous utilisons plusieurs fois dans ce code la mthode ToString. Il sagit dun autre mcanisme de conversion de type de donnes que celui que nous avons explicit plus haut dans cet atelier. En fait, tout objet quel quil soit comporte une mthode membre ToString pour convertir sa valeur en chane quivalente. Evidemment, le rsultat de la conversion est directement li au type de la donne correspondante. Par exemple, pour convertir la valeur boolenne de la variable confirmBeforeSave, on applique la mthode ToString du type Boolean. Le rsultat est la chine True si la valeur est True et False sinon.

Pour en savoir plus sur le comportement de la mthode ToString : http://msdn.microsoft.com/fr-fr/library/system.object.tostring.aspx

Si vous testez lapplication en configurant le traage dans la bote des options, vous obtenez le message suivant dans le journal de Windows :

Pour afficher le journal de Windows, lancez lObservateur dvnements depuis le Panneau de configuration de la machine.

Printemps 2008

Coach VB.NET

Page 116 sur 117

Microsoft

Utiliser les structures et les types de base Atelier 3

Double cliquez sur le message pour lire son contenu :

Printemps 2008

Coach VB.NET

Page 117 sur 117

Vous aimerez peut-être aussi