Vous êtes sur la page 1sur 23

Travaux Pratiques Prise en main de Visual Basic 2005

..................................................................................................................................................................................1 TRAVAUX PRATIQUES PRISE EN MAIN DE VISUAL BASIC 2005.......................................................1 1) CAHIER DES CHARGES, ANALYSE ET CRATION DU PROJET WINDOWS SOUS VISUAL STUDIO 2005.....................................3 1.1) Cahier des charges...................................................................................................................................3 1.2) Analyse......................................................................................................................................................4 1.3) Cration du projet Windows sous Visual Studio 2005.............................................................................5 2) ELABORATION DE LA COUCHE MTIER.......................................................................................................................7 2.1) Cration classe Contact via le diagramme de classe.........................................................................7 2.2) Parcours du code gnr et adaptation du constructeur..........................................................................8 2.3) Collection abstraite Contacts .............................................................................................................9 3) PRPARATION DE LA COUCHE DE GESTION DES DONNES AVEC STOCKAGE XML...........................................................10 3.1) Mise en place dune interface IStoreData ........................................................................................10 3.2) Chemin physique du fichier XML centralis dans le Settings du projet.................................................11 3.3) Elaboration de la classe XML et initiation aux mthodes de srialisation dobjets..............................12 4) CONSTRUCTION DES INTERFACES UTILISATEURS........................................................................................................14 4.1) Menu du formulaire principal.................................................................................................................14 4.2) Cration des contrles utilisateurs et liaison avec le menu...................................................................15 4.3) Cration dun DataSource li notre objet Contact ........................................................................17 4.4) Gnration du formulaire Contact partir de notre DataSource et analyse du code gnr par le Designer de Visual Studio 2005.....................................................................................................................19 4.5) Liaison du DataSource au contrle DataBinding et mise jour dans le fichier XML...........................21 4.6) Contrle de saisi utilisateur et expression rgulire..............................................................................22 CONCLUSION ..........................................................................................................................................................23

1) Cahier des charges, analyse et cration du projet Windows sous Visual Studio 2005
1.1) Cahier des charges
Objectif : Raliser une application Windows Gestion de contacts . Interfaces graphiques : - Formulaire principal de bienvenue - Avoir un menu Fichier avec les sous-menus : o Liste des contacts : accs au listing des contacts o Fiche contact : accs en mode dition la fiche des contacts o Fermer : quitter lapplication - Pouvoir ajouter et modifier des fiches de contact - Afficher une liste des contacts Stockage des donnes : - Stockage des donnes dans un fichier XML - Stockage des donnes dans une base de donnes SQL Server 2005

1.2) Analyse
Nous allons laborer notre projet dans une architecture 3-Tiers : Couche mtier : o Contact : entit mtier o Contacts : classe abstraite comprenant collection dobjet Contact et qui implmente linterface IStoreData Couche daccs aux donnes : o IStoreData : interface de gestion des donnes LoadData SaveData o ContactStoreXML : classe qui hrite de Contacts grant le stockage des objets dans un fichier XML. o ContactStoreSQL : classe qui hrite de Contacts grant le stockage des objets dans une base de donnes SQLServer 2005. Interfaces graphiques : o 1 Formulaire principal avec le menu o 1 Contrle Utilisateur pour la fiche contact o 1 Contrle Utilisateur pour la liste des contacts

1.3) Cration du projet Windows sous Visual Studio 2005


Cliquez sur File/New/Project . Nous retrouvons lcran, ci-dessous, qui vous permet de slectionner le projet type que vous allez programmer dans le langage de votre choix (Visual Basic).

Nommez-le projet GestionContacts (automatiquement la solution portera le mme nom). Il sera enregistr dans votre emplacement par dfaut du stockage des projets VS2005. Si vous conservez loption Create directory for solution ; VS2005 crera automatiquement larborescence suivante : Solution Name \ Solution Name.sln Solution Name \Name \ Name.vbproj Dans le cas o loption est dcoche, les fichiers solution porteront le mme nom que le projet et seront directement sauvegarder dans le rpertoire du projet. Larborescence dans lemplacement final sera la suivante : Name \ Name.sln Name \ Name.vbproj Si vous utilisez une base de contrle de code source pour centraliser vos projets, vous pouvez cocher loption Add to Source Control si vous dsirez y ajouter directement notre projet. Une fois le projet crait, un formulaire Form1 est cr par dfaut. Faites click droit sur celui-ci Rename est nomm le FormMain.vb .

Au niveau de linterface de travail, vous pouvez apercevoir ce formulaire ouvert en mode Design . Nous allons renommer lentte du formulaire. Pour cela, slectionnez-le et affichez ces proprits (click droit Properties ou raccourci F4 ) puis saisissez dans sa proprit Text : Gestion des contacts . A prsent, nous devons avoir laperu suivant :

2) Elaboration de la couche mtier


Concentrons-nous sur llaboration des entits mtiers. On va crer un rpertoire BusinessObject la racine du projet pour placer nos classes mtiers. Dans ce rpertoire crer 2 classes Contact et Contacts (click droit Add\Class ).

2.1) Cration classe Contact via le diagramme de classe


Afin de dcouvrir lutilisation du Diagramme de classes de VS 2005, nous allons crer notre objet Contact partir de cette interface. Faites click droit sur le fichier Contact et slectionnez View Class Diagramm . Le fichier ClassDiagram1.cd sest cr la racine du projet. Vous apercevez alors lentit Contact . Sur cette dernire, faites click droit Add pour dfinir ces variables, proprits, mthodes, constructeur et destructeur. Pour notre exemple, voici les lments dfinir :
Add Field Name m_ID m_Mail m_Nom m_Prenom ID Mail Nom Prenom GetNomEtPrenom New Type System.Guid String String String System.Guid String String String String Access Private Private Private Private Public Public Public Public Public Public

Propertie

Method Constructor

Au final, vous obtenez lentit Contact suivante :

2.2) Parcours du code gnr et adaptation du constructeur


Double-cliquez sur cette entit afin de voir directement le code gnr automatiquement, partir de notre travail effectu via le diagramme, pour la classe Contact.vb . Vous pouvez remarquer que lensemble de nos variables (section Fields du diagramme), proprits (Properties), et constructeur ont t gnr :
' Variables Private m_ID As System.Guid ' Proprits Public Property ID() As Guid Get Return m_ID End Get Set(ByVal value As Guid) m_ID = value End Set End Property

Ajoutons sur notre constructeur laffectation de la variable m_ID (qui fait office didentifiant unique). Lorsquun nouvel objet Contact sera crer on va affecter automatiquement la variable m_ID un nouveau GUID gnr.
Sub New() m_ID = System.Guid.NewGuid End Sub

Remarquez quon aurait pu galement faire appel la proprit ID (ID = System.Guid.NewGuid) pour laffectation indirecte de la variable m_ID (dans le Set Property).

2.3) Collection abstraite Contacts


Une fois lentit Contact termine, nous allons dfinir sa collection. Reprenez le fichier Contacts.vb . Ici on importe lassembly System.Collections.Generic afin de profiter des lments de collections offert par le FrameWork 2.0. La classe abstraite Contacts (prciser par le mot clef MustInherit), implmente linterface IStoreData (Implements) et contient une liste de dobjet Contact (List(Of Contact)). Linterface IStoreData sera cr dans la section suivante (voir section 3.1). Les mthodes LoadData et SaveData sont prfixes du mot clef MustOverride pour indiquer que toutes classes hritant de Contacts devra surcharger ces mthodes.
Imports System.Collections.Generic Public MustInherit Class Contacts Implements IStoreData Public ListContacts As New List(Of Contact) Public MustOverride Sub LoadData() Implements IStoreData.LoadData Public MustOverride Sub SaveData() Implements IStoreData.SaveData End Class

3) Prparation de la couche de gestion des donnes avec stockage XML


Pour lorganisation de notre projet, crons un rpertoire BusinessData o nous placerons nos classes daccs aux donnes. Crer directement dans ce rpertoire, les fichiers : o Interface IStoreData.vb : Click droit Add\New Item , slectionnez Interface o Classe ContactsStoreXML.vb : Click droit Add\Class

3.1) Mise en place dune interface IStoreData


Ouvrez le fichier IStoreData.vb . Dclarer les 2 mthodes LoadData et SaveData que devront respecter les classes implmentant cette interface.
Public Interface IStoreData ' Mthode qui charge les donnes Sub LoadData() ' Mthode de sauvegarde des donnes Sub SaveData() End Interface

10

3.2) Chemin physique du fichier XML centralis dans le Settings du projet


Sur lcran de proprit de mon projet (click droit sur le noeud du projet), on va ajouter la variable FileContactsXML dans longlet Settings . Cela signifie quon centralise la valeur dun paramtre mis disposition sur lensemble du projet. La variable FileContactsXML pointera vers le fichier XML qui stockera la liste des contacts.

Aprs enregistrement, vous pouvez vrifier dans le ficher app.config (le fichier de configuration du projet Windows) la prsence de ces lignes de code suivante (gnres automatiquement depuis les renseignements saisi sur longlet Setting ) :
<GestionContacts.My.MySettings> <setting name="FileContactsXML" serializeAs="String"> <value>C:\Contacts.xml</value> </setting> </GestionContacts.My.MySettings>

Laccs la variable se fait alors via la commande : My.Settings.FileContactsXML (ici renverra donc la valeur C:\Contacts.xml ).

11

3.3) Elaboration de la classe XML et initiation aux mthodes de srialisation dobjets


Ouvrons la classe ContactsStoreXML.vb et faisons la hriter de la classe abstraite Contacts . Rappelez-vous la classe Contacts implmente linterface IStoreData et les mthodes LoadData et SaveData doivent tre crite. Ces dernires seront prfixes du mot clef Overrides pour indiquer qu'elle masque la mthode hrit de leur parent. A laide du mot clef Imports, nous importons les bibliothques de classes qui seront utilises : o System.Xml.Serialization : pour srialiser, d srialiser des objets o System.IO : pour grer lcriture et la lecture dun fichier (ici notre fichier XML)
Imports System.Xml.Serialization Imports System.IO Public Class ContactsStoreXML Inherits Contacts Public Overrides Sub SaveData() End Sub Public Overrides Sub LoadData() End Sub End Class

Srialiser lobjet ContactsStoreXML dans le fichier XML

L'ide est donc douvrir un flux en criture sur notre fichier XML :
Dim streamIO As StreamWriter = Nothing streamIO = New StreamWriter(My.Settings.FileContactsXML)

La srialisation peut seffectuer grce un objet Serialization.XmlSerializer. Ce dernier prend un type lors de son instanciation, donc ici en loccurrence notre type ContactsStoreXML et la mthode dexcution du processus (Serialize) attend un StreamWriter pour crire dans le fichier cible et lobjet srialiser :
serialXML = New Serialization.XmlSerializer(GetType(ContactsStoreXML)) serialXML.Serialize(streamIO, Me)

Remarque importante : A la fin, noublions de fermer le flux en criture pour librer laccs au fichier. Au final, nous obtenons la mthode suivante :
Public Overrides Sub SaveData() ' Dclaration Dim serialXML As Serialization.XmlSerializer = Nothing Dim streamIO As StreamWriter = Nothing Try serialXML = New Serialization.XmlSerializer(GetType(ContactsStoreXML)) ' Ouverture d'un flux en criture sur le fichier XML des contacts streamIO = New StreamWriter(My.Settings.FileContactsXML) ' Srialisation de la liste des contacts serialXML.Serialize(streamIO, Me)

12

Catch ex As Exception ' Propagrer l'exception Throw ex Finally ' En cas d'erreur, n'oublier pas de fermer le flux en criture si ce dernier est toujours ouvert If streamIO IsNot Nothing Then streamIO.Close() End If End Try End Sub

D srialiser lobjet ContactsStoreXML partir du fichier XML

La d srialisation nest pas plus compliqu que la srialisation. On ouvre un flux en lecture sur le fichier XML : On dclarer un Serialization.XmlSerializer, instanci avec le type attendu GetType(ContactsStoreXML). Puis on fait appel la mthode pour Deserialize pour lancer le processus de dsrialiser de l'objet. Ce dernier prend en paramtre que le flux en lecture. La seule subtilit ici cest que la mthode Deserialize retourne un type System.Objet, quil faut donc typer en ContactsStoreXML laide de la fonction DirectCast. Au final, nous obtenons le code suivant :
Public Overrides Sub LoadData() ' Dclaration Dim streamIO As StreamReader = Nothing Dim serialXML As Serialization.XmlSerializer = Nothing Try ' Tester l'existance du fichier If System.IO.File.Exists(My.Settings.FileContactsXML) = True Then serialXML = New Serialization.XmlSerializer(GetType(ContactsStoreXML)) ' Ouverture d'un flux en lecture sur le fichier XML des contacts streamIO = New StreamReader(My.Settings.FileContactsXML) ' Dsrialisation de la liste des contacts Me.ListContacts = DirectCast(serialXML.Deserialize(streamIO), ContactsStoreXML).ListContacts End If Catch ex As Exception ' Propagrer l'exception Throw ex Finally ' En cas d'erreur, n'oublier pas de fermer le flux en lecture si ce dernier est toujours ouvert If streamIO IsNot Nothing Then streamIO.Close() End If End Try End Sub

13

4) Construction des interfaces utilisateurs


4.1) Menu du formulaire principal
Reprenons le formulaire FormMain.vb . A laide de la ToolBox , glissez-y un contrle ToolStripContainer (dans catgorie Menu & Toolbars ) et directement un MenuStrip dans la partie suprieure. Etendez le ToolStripContainer sur toute la surface du formulaire. A prsent, nous allons dfinir les items du menu. Pour cela, vous pouvez double-cliquer sur le MenuStrip et dfinir le menu suivant : Remarque : noubliez pas de redfinir, pour chacun des items, la proprit Name pour leur donner un nom explicite.
Niveau 0 1 1 1 ID A A.1 A.2 A.3 Item.Parent A A A Item.Text Fichier Liste des contacts Edition de fiche contact Fermer Item.Name MenuFichier SousMenuListe SousMenuFiche SousMenuFermer Action Afficher le contrle utilisateur ucListeContact * Afficher le contrle utilisateur ucFicheContact * Quitter lapplication

* voir point 4.b Graphiquement, nous obtenons le rsultat suivant :

14

4.2) Cration des contrles utilisateurs et liaison avec le menu


Nous allons prsent construire les interfaces qui vont accueillir le listing des contacts et la fiche contact. Nous aurions la possibilit de crer 2 formulaires System.Windows.Form et de venir les relier au menu mais nous allons utiliser des contrles utilisateurs dans lobjectif de les dcouvrir. A la racine du projet, faites click droit Add\User Control 2 fois afin de crer : ucListContacts.vb et ucFicheContact.vb . Laissons-les de ct pour le moment, et revenons sur la partie code FormMain.vb afin de grer laffichage de ces contrles en fonction du menu slectionn. Dclarons 2 variables reprsentant nos 2 contrles utilisateurs.
Dim ucFiche As ucFicheContact Dim ucListe As ucListContacts

A laide des 2 listes prsentent sur la partie suprieure, slectionnez sur la liste de gauche FormMain Events ; automatiquement la liste de droite chargent les vnements disponible. Choisissez lvnement Load pour gnrer lentte de la mthode.

Il faut dans un 1er temps instancier le contrle utilisateur :


ucFiche = New ucFicheContact() ucFiche.Dock = DockStyle.Fill Me.AutoSize = True ucFiche.Visible = False

Ajouter le contrle utilisateur au sein du formulaire, dans le container du ToolStripContainer :

15

ToolStripContainer1.ContentPanel.Controls.Add(ucFiche)

On procde de mme pour ucListe Il ne nous reste plus qu crire le code qui va bien sur les vnements clicks des sous-menus. Affichage du contrle utilisateur correspondant :
Private Sub SousMenuListe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SousMenuListe.Click ucListe.Visible = True ucFiche.Visible = False End Sub

Fermer le formulaire et quitter lapplication :


Private Sub SousMenuFermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SousMenuFermer.Click Me.Close() Application.Exit() End Sub

16

4.3) Cration dun DataSource li notre objet Contact


Passons aux choses srieuses, et connectons notre objet Contact avec son formulaire. Visual Studio 2005 vous offre la possibilit dautomatiser et dacclrer considrablement cette tape de construction et va grer le mapping entre vos interfaces et vos objets mtiers. Ce paragraphe a donc pour objectif de vous faire dcouvrir ces fonctionnalits. Remarque importe : au pralable (si ce nest pas dj fait), recompilez votre projet afin de mettre jour lassembly du projet GestionContacts et de rendre ainsi disponible laccs aux classes mtiers Contact , Contacts dj crites, lors de la slection de l'objet au DataSource. Vous allez donc crer un objet Data Source sur notre objet Contact . Pour cela, aller dans le menu Data\Add New Data Source et slectionner Object :

Vous devez voir apparatre larborescence de notre projet GestionContacts. Si vous dployez GestionContacts , nous retrouvons tous nos classes VB cres. Choisissez Contact puis cliquez sur Next et Finish .

17

Remarquez que vous avez la possibilit de venir directement rfrencer une autre assembly via le bouton "Add Reference" pour venir lier un objet provenant d'une autre dll

18

4.4) Gnration du formulaire Contact partir de notre DataSource et analyse du code gnr par le Designer de Visual Studio 2005
Allez dans la barre de menu est cliqu sur Data\Show Data Sources . Vous voyez apparatre la fentre Data Sources avec notre connecteur sur lobjet Contact . Cliquez de suite sur la liste de choix pour prendre le mode Detail (et non DataGridView par dfaut).

Remarquez que nous retrouvons bien les proprits de notre classe Contact . Une fois ceci fait, il vous suffit alors de glisser le Data Source Contact sur votre ucFicheContact et VS 2005 vous gnre automatiquement : o Autant de [label, textbox] quil y a de proprits pour lobjet (ici ID, Mail, Nom, Prenom) o 1 objet System.Windows.Forms.BindingSource : ContactBindingSource o 1 objet System.Windows.Forms.BindingNavigator : ContactBindingNavigator; automatiquement li ContactBindingSource via sa proprit (BindingSource)

19

A ce stade ci, plusieurs lignes de code ont t gnres par le designer de VS2005 afin de construire notre formulaire et son Binding avec notre objet Contact , sans que nous en ayons crite une seule !! Cliquez sur licne Show All File sur la fentre Solution Explorer afin dafficher l'arborescence des fichiers de ucFicheContact.vb .

Ouvrez alors le fichier ucFicheContact.Designer.vb et consultez le code gnr ; ceci savrera pdagogique et vous aidera mieux comprendre le mcanisme mis en place derrire. Remarquez ainsi que les traitements suivant sont dj crit : o Le Binding entre lentit Contact et les lments du formulaire est automatiquement gr

Me.IDTextBox.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.ContactBindingSource, "ID", True))

Les actions de la barre de navigation sont relies la source de donnes

Me.ContactBindingNavigator.MoveNextItem = Me.BindingNavigatorMoveNextItem

Il nous restera donc fournir le jeu de donnes qui sera chargs dans le ContactBindingSource (lier sur sa proprit DataSource). Cest ce que nous allons faire prsent.

20

4.5) Liaison du DataSource au contrle DataBinding et mise jour dans le fichier XML
Affichez la partie code de ucFicheContact.vb (click droit View Code ) et dclarez une variable globale qui correspondra notre jeu de donnes :
Dim MesContacts As Contacts

Comme pour le 4.b, gnrez les vnements : ucFicheContact Events - Load Contacts_ContactBindingNavigatorSaveItem - Click o Evnement ucFicheContact_Load

La 1ere tape consiste donc initialisation la variable MesContacts. Pour cela, nous allons utiliser notre classe ContactsStoreXML (qui hrite directement de Contacts) pour charger (LoadData) les contacts stocks dans le fichier XML :
MesContacts = New ContactsStoreXML() MesContacts.LoadData()

Puis lier notre jeu de donnes sur le DataSource de contrle BindingSource :


Contacts_ContactBindingSource.DataSource = MesContacts.ListContacts

Evnement Contacts_ContactBindingNavigatorSaveItem_Click

Au moment de lenregistrement de donnes il suffira de sauvegarder notre liste de contact MesContacts dans le fichier XML via linstruction :
MesContacts.SaveData()

Histoire davertir lutilisateur dune ventuelle erreur qui pourrait survenir lors de la sauvegarde des donnes (erreur lors de lcriture), ajoutons un label ayant pour identifiant lErreur dans notre formulaire, puis sur le Catch aprs linstruction SaveData, affecter le message de lexception sur sa proprit Text :
lErreur.Text = ex.Message

21

4.6) Contrle de saisi utilisateur et expression rgulire


Sur notre fiche de contact, nous allons ajouter un contrle de saisi sur le format de mail. Pour ce faire, glisser un lment ErrorProvider sur le formulaire ucFicheContact (ErrorProvider1). Lobjectif est de vrifier que le Text saisi dans MailTextBox correspond bien une adresse mail. Le moment le plus opportun de vrifier le texte saisi est lorsque lutilisateur quitte le textbox. Evitons dafficher le message derreur durant sa saisie pour ne pas le surprendre. Dans la partie code ucFicheContact.vb , gnrons donc lvnement MailTextBox.LostFocus et utilisons la librairie System.Text.RegularExpressions pour tester le format attendu : Dclaration dun objet Expression rgulire correspondant au test de mail :
Dim regExpMail As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*") regExpMail.IsMatch(MailTextBox.Text) indiquera alors "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"

si MailTextBox.Text respecte le format

Sil ne respect pas le format, il suffit alors dajouter le message derreur pour ce contrle via la mthode SetError :
If Not regExpMail.IsMatch(MailTextBox.Text) Then ErrorProvider1.SetError(MailTextBox, "Format de mail incorrect") Else ErrorProvider1.Clear() End If

Remarque : noubliez pas de vider lerreur si le format est valid ; car si une erreur est survenue au pralable elle saffichera tant que vous ne laurait pas supprim (ErrorProvider1.Clear()).

22

Conclusion
Voil que se termine ce lab. Notre application Windows GestionContacts prend forme. Dornavant vous savez : o Crer un projet sous VS2005 o Gnrer vos classes partir du diagramme o Grer les paramtres dun projet o Crer un menu Windows o Crer des formulaires et des contrles utilisateurs o Srialiser et d srialiser un objet vers une source XML o Lier un objet un DataSource et gnr un contrle DataBinding li o Contrler la saisi dutilisateur avec affichage des erreurs Dans le prochain lab ( ADO.Net 2.0 ), nous allons toffer notre application tout en dcouvrant de nouvelles fonctionnalits : o laccs aux donnes via ADO.NET 2.0 o cration de la base SQLServer 2005 au sein de VS2005 o le DataGridView , tableau trs complet pour laffichage et la manipulation des donnes

23

Vous aimerez peut-être aussi