Vous êtes sur la page 1sur 135

Microsoft

Visual Basic
.Net

Microsoft Visual Basic . Net - 2005

1/135

Sommaire
1. PRESENTATION ................................................................................................................ 7
1.1 HISTORIQUE....................................................................................................................... 7
1.2 NOUVEAUTES .................................................................................................................... 7
1.3 INSTALLATION ................................................................................................................... 7
2. ENVIRONNEMENT VISUAL STUDIO ........................................................................... 8
2.1 LINTERFACE ..................................................................................................................... 8
2.2 FENETRES DEXPLORATION ............................................................................................... 9
2.2.1 Explorateur de serveur.............................................................................................. 9
2.2.2 Explorateur de Solutions ........................................................................................... 9
2.2.3 Laffichage de classes ............................................................................................. 10
2.2.4 Fentre de proprits .............................................................................................. 11
2.2.5 Laide dynamique .................................................................................................... 11
2.2.6 La liste des tches ................................................................................................... 11
3. GESTION DE PROJETS .................................................................................................. 11
3.1 LES SOLUTIONS ................................................................................................................ 12
3.2 CREATION DUN PROJET................................................................................................... 12
3.3 CONFIGURATION DUN PROJET ........................................................................................ 12
4. BASES DU LANGAGE ..................................................................................................... 14
4.1 STRUCTURE DU CODE ...................................................................................................... 14
4.1.1 Formulaire .............................................................................................................. 14
4.1.2 Module..................................................................................................................... 14
4.1.3 Les commentaires .................................................................................................... 15
4.1.4 Les rgions .............................................................................................................. 15
4.2 LES VARIABLES ............................................................................................................... 16
4.2.1 Types de variables ................................................................................................... 16
4.2.1.1 Types numriques ............................................................................................ 16
4.2.1.2 Types chane de caractre................................................................................. 16
4.2.1.3 Autres types...................................................................................................... 17
4.2.2 Dclaration de variables ......................................................................................... 17
4.2.3 Porte et visibilit des variables ............................................................................. 17
4.2.3.1 Porte des variables .......................................................................................... 17
4.2.3.1 Visibilit des variables ..................................................................................... 18
4.2.4 Les tableaux............................................................................................................. 18
4.2.5 Les constantes ......................................................................................................... 19
4.2.6 Les numrations..................................................................................................... 19
4.3 LES OPERATEURS ............................................................................................................. 20
4.3.1 Oprateur daffectation........................................................................................... 20
4.3.2 Oprateurs Arithmtiques ....................................................................................... 20
4.3.3 Oprateurs de comparaison .................................................................................... 20
4.3.4 Oprateurs de concatnation .................................................................................. 21
4.3.5 Oprateurs logiques ................................................................................................ 21
4.4 LES STRUCTURES DE CONTROLE ...................................................................................... 22
4.4.1 Les conditions.......................................................................................................... 22
4.4.2 Structures conditionnelles ....................................................................................... 22

Microsoft Visual Basic . Net - 2005

2/135

4.4.2.1 Structure If........................................................................................................ 22


4.4.2.2 Structure Select Case........................................................................................ 23
4.4.2.3 Instruction conditionnelles ............................................................................... 23
4.4.3 Structures rptitives............................................................................................... 24
4.4.3.1 Structure While ................................................................................................ 24
4.4.3.2 Structure Do loop ............................................................................................. 24
4.4.3.3 Structure For..................................................................................................... 25
4.4.3.4 Structure For each ............................................................................................ 25
4.5 PROCEDURES ET FONCTIONS ............................................................................................ 25
4.5.1 Cration de procdure ............................................................................................ 26
4.5.1.1 Dclaration ....................................................................................................... 26
4.5.1.2 Appel ................................................................................................................ 26
4.5.2 Cration de fonction................................................................................................ 27
4.5.2.1 Dclaration ....................................................................................................... 27
4.5.2.1 Appel ................................................................................................................ 27
4.5.3 Passage de paramtres............................................................................................ 27
4.5.3.1 Dclaration ....................................................................................................... 27
4.5.3.2 Appel ................................................................................................................ 28
4.5.3.3 Passage par valeur et par rfrence .................................................................. 28
4.5.3.4 Passer un nombre quelconque de paramtre .................................................... 29
4.6 FONCTIONS INTEGREES .................................................................................................... 29
4.6.1 Fonctions sur les chanes de caractres ................................................................. 30
4.6.2 Fonctions sur les nombres....................................................................................... 31
4.6.3 Fonctions sur les dates ............................................................................................ 31
4.6.4 Fonctions sur les tableaux....................................................................................... 32
4.6.5 Fonctions de conversion.......................................................................................... 32
4.6.6 Fonction de formatage (Format)............................................................................. 33
4.6.6.1 Caractres de formatage pour les numriques.................................................. 33
4.6.6.2 Caractres de formatage pour les dates ............................................................ 33
4.6.7 Les botes de dialogue ............................................................................................. 34
4.6.7.1 Boite de message .............................................................................................. 34
4.6.7.2 Bote de saisie................................................................................................... 36
4.7 LES COLLECTIONS............................................................................................................ 37
4.7.1 Classe CollectionBase............................................................................................. 37
4.7.1.1 Crer la collection ............................................................................................ 37
4.7.1.2 Utilisation ......................................................................................................... 38
4.7.2 Classe Stack............................................................................................................. 38
4.7.3 Classe Queue........................................................................................................... 39
4.8 GESTION DES ERREURS .................................................................................................... 39
4.8.1 Types derreurs ....................................................................................................... 39
4.8.2 Gestion en ligne....................................................................................................... 40
4.8.2.1 Linstruction On Error...................................................................................... 40
4.8.2.2 Linstruction Resume ....................................................................................... 41
4.8.2.3 Lobjet Err ........................................................................................................ 41
4.8.3 Les Exceptions......................................................................................................... 42
4.8.3.1 Try, Catch & Finally ........................................................................................ 42
5 PROGRAMMATION OBJET........................................................................................... 43
5.1 INTRODUCTION A LA POO ............................................................................................... 43
5.2 CLASSES & OBJETS ......................................................................................................... 44

Microsoft Visual Basic . Net - 2005

3/135

5.2.1 Cration dune classe.............................................................................................. 44


5.2.2 Visibilit de la classe............................................................................................... 44
5.2.3 Options dhritage................................................................................................... 45
5.2.5 Implements & Inherits............................................................................................. 45
5.2.6 Cration et utilisation dobjets................................................................................ 45
5.3 LES PROPRIETES............................................................................................................... 47
5.3.1 Variables ................................................................................................................. 47
5.3.2 Procdures de proprits ........................................................................................ 48
5.4 LES METHODES ............................................................................................................... 50
5.4.1 Gnralits .............................................................................................................. 50
5.4.2 Constructeur et Destructeur.................................................................................... 51
5.4.2.1 Constructeur ..................................................................................................... 51
5.4.2.2 Destructeur ....................................................................................................... 51
5.4.3 La surcharge ........................................................................................................... 52
5.4.4 Lobjet Me ............................................................................................................... 53
5.5 LHERITAGE .................................................................................................................... 53
5.5.1 Introduction ............................................................................................................. 53
5.5.2 Mise en place........................................................................................................... 55
5.5.3 Objet MyBase .......................................................................................................... 56
5.5.4 Le remplacement ..................................................................................................... 56
5.6 METHODES ET VARIABLES PARTAGEES ............................................................................ 57
5.7 LES INTERFACES .............................................................................................................. 58
5.7.1 Cration................................................................................................................... 58
5.7.2 Utilisation................................................................................................................ 59
5.7.3 Exploiter les interfaces .Net .................................................................................... 59
5.7.3.1 Implmenter linterface .................................................................................... 60
5.7.3.2 Utiliser linterface............................................................................................. 60
5.8 LA DELEGATION .............................................................................................................. 61
5.8.1 Signature de la mthode .......................................................................................... 61
5.8.2 Appel du Delegate ................................................................................................... 62
5.9 LES EVENEMENTS ............................................................................................................ 62
5.9.1 Cration................................................................................................................... 62
5.9.2 Utilisation................................................................................................................ 63
5.9.2.1 Utilisation de With Events ............................................................................... 63
5.9.2.2 Utilisation du gestionnaire dvnement.......................................................... 64
5.10 CLASSES DEXEMPLE ..................................................................................................... 64
5.10.1 Classe personne..................................................................................................... 65
5.10.2 Classe Cadre ......................................................................................................... 67
6 APPLICATIONS WINDOWS ........................................................................................... 68
6.1 LES FORMULAIRES ........................................................................................................... 68
6.1.1 Diffrents types........................................................................................................ 68
6.1.1.1 Windows Forms ............................................................................................... 68
6.1.1.2 Web forms ........................................................................................................ 68
6.1.1.3 Modes de prsentation...................................................................................... 68
6.1.2 Membres de la classe Form .................................................................................... 69
6.1.2.1 Proprits.......................................................................................................... 70
6.1.2.2 Mthodes .......................................................................................................... 78
6.1.2.2 Evnements ...................................................................................................... 78
6.1.3 Botes de dialogue ................................................................................................... 79

Microsoft Visual Basic . Net - 2005

4/135

6.1.3.1 Ouverture.......................................................................................................... 79
6.1.3.2 Enregistrement ................................................................................................. 80
6.1.3.3 Choix dune couleur ......................................................................................... 81
6.1.3.4 Choix dune police ........................................................................................... 82
6.2 LES CONTROLES............................................................................................................... 83
6.2.1 Membres communs .................................................................................................. 83
6.2.1.1 proprits .......................................................................................................... 83
6.2.1.2 Mthodes .......................................................................................................... 86
6.2.1.3 Evnements ...................................................................................................... 86
6.2.2 Principaux Contrles .............................................................................................. 86
6.2.2.1 TextBox ............................................................................................................ 86
6.2.2.2 Label................................................................................................................. 87
6.2.2.3 CheckBox ......................................................................................................... 88
6.2.2.4 RadioButton ..................................................................................................... 89
6.2.2.5 GroupBox et Panel ........................................................................................... 90
6.2.2.6 Button ............................................................................................................... 91
6.2.2.7 ListBox ............................................................................................................. 91
6.2.2.8 ComboBox ....................................................................................................... 92
6.2.2.9 Splitter .............................................................................................................. 92
6.2.2.10 ImageList........................................................................................................ 93
6.2.2.11 Treeview......................................................................................................... 94
6.2.2.12 ListView ......................................................................................................... 95
6.2.2.13 TabControl ..................................................................................................... 98
6.2.2.14 Menus ............................................................................................................. 98
6.2.2.15 DateTimePicker.............................................................................................. 99
6.2.2.16 Timer ............................................................................................................ 100
6.2.3 Le Drag and Drop ................................................................................................. 100
6.2.3.1 Dmarrer le drag and drop ............................................................................. 100
6.2.3.3 Contrler la rception..................................................................................... 101
6.2.3.3 Rcuprer llment ....................................................................................... 102
7 ACTIVEX DATA OBJECT .NET................................................................................... 102
7.1 MODE CONNECTE ET DECONNECTE ................................................................................ 103
7.1.1 Mode connect....................................................................................................... 103
7.1.2 Mode dconnect................................................................................................... 103
7.2 LES FOURNISSEURS DACCES ......................................................................................... 104
7.3 LOBJET CONNECTION ................................................................................................... 104
7.3.1 Proprits........................................................................................................... 105
7.3.2 Mthodes ........................................................................................................... 106
7.3.3 Evnements ....................................................................................................... 106
7.4 OBJET COMMAND .......................................................................................................... 107
7.5 OBJET DATAREADER ..................................................................................................... 108
7.6 OBJET DATASET ............................................................................................................ 109
7.6.1 Objet DataTable.................................................................................................... 109
7.6.2 Objet DataColumn ................................................................................................ 110
7.6.3 Objet DataRelation ............................................................................................... 111
7.6.4 Travailler avec les donnes................................................................................... 112
7.6.4.1 Parcourir les donnes ..................................................................................... 113
7.6.4.2 Insertion de donnes....................................................................................... 114
7.6.4.3 Modification de donnes ................................................................................ 115

Microsoft Visual Basic . Net - 2005

5/135

7.6.4.4 Suppression de donnes ................................................................................. 115


7.6.5 Objet DataView ..................................................................................................... 116
7.6.6 Les vnements ...................................................................................................... 116
7.7 OBJET DATAADAPTER ................................................................................................... 117
7.7.1 Cration................................................................................................................. 117
7.7.2 Importer des donnes ............................................................................................ 117
7.7.2.1 Remplir un DataSet ........................................................................................ 117
7.7.2.2 Mappage des donnes..................................................................................... 119
7.7.2.3 Importer la structure ....................................................................................... 121
7.7.3 Exporter des donnes ............................................................................................ 122
7.7.3.1 Mise jour de la source de donnes............................................................... 122
7.7.3.1 Dfinition des requtes dactualisation .......................................................... 122
7.7.3.2 Dclencher la mise jour des donnes........................................................... 124
7.7.3.3 Gestion des conflits ........................................................................................ 125
7.8 LIAISON DE DONNEES AUX CONTROLES ......................................................................... 128
7.8.1 Objets utiliss ........................................................................................................ 128
7.8.1.1 DataBinding ................................................................................................... 128
7.8.1.2 ControlBindingCollection .............................................................................. 129
7.8.1.3 BindingManagerBase ..................................................................................... 129
7.8.1.4 BindingContext .............................................................................................. 129
7.8.2 Liaison de donnes par Interface Graphique........................................................ 129
7.8.2.1 Dfinir la connexion....................................................................................... 129
7.8.2.2 Cration des objets connexion et DataAdapter .............................................. 130
7.8.2.3 Gnrer le groupe de donnes ........................................................................ 130
7.8.2.4 Lier les contrles ............................................................................................ 131
7.8.2.5 Finalisation par le code .................................................................................. 132
7.8.3 Exemple dapplication........................................................................................... 132
7.8.4 Formulaires de donnes Maitre / Dtail .............................................................. 134

Microsoft Visual Basic . Net - 2005

6/135

1. Prsentation
Depuis son apparition, le langage Visual Basic ainsi que ses divers environnements de
dveloppement ont su simposer comme les standards en matire doutils de ralisation
dapplications Windows.

1.1 Historique
Version
1.0
3.0
4.0

5.0
6.0

Nouveauts
Sortie en 91, Visual Basic innove en particulier grce son environnement de
dveloppement permettant de masquer les tches fastidieuse
Evolution du langage, apparition de nouvelles fonction et de structures de contrle
(select case)
Sorti en 96, la version 4.0 marque une tape importante dans lvolution du
langage :
- Cration dapplication 32 bits
- Cration et utilisation de DLL
- Apparition des fonctionnalits Objet (Classes)
Disparition des applications 16 bits et stabilit accrue du langage
Peu dvolution sur le langage mais apparition de la technologie ADO
(remplaante de DAO et RDO) et des outils de connexion aux sources de donnes
(DataEnvironment)

1.2 Nouveauts
La version .Net (ou version 7.0) de Visual Basic et plus gnralement de lIDE Visual
Studio marquent une tape importante dans lvolution du langage. Llment principal de
linfrastructure .NET est le CLR (Common Language Runtime), langage offrant un ensemble
de classe permettant lutilisateur dinteragir avec le systme. Ces classes peuvent tre
utilise avec nimporte quel langage .Net (Vb, C++, C#) car elle font partie dune norme
commune : le CLS (Common Language Specification).
Une autre des rvolutions du .Net rside dans le MSIL (Microsoft Intermediate
Language) : les applications ralises avec Vb .Net sont dabord compils en pseudo code, le
MSIL, et cest lors de lexcution que le compilateur (JIT pour Just In Time) compile le code
MSIL afin de le rendre excutable par le processeur utilis. Lavantage de ce systme est
double :
- Gain de ressource lors de lexcution car seules celle devant tre utilises seront
charges et de ce fait, leur installation pralable nest pas obligatoire
- Portabilit des applications sur diffrentes plateformes la manire de la machine
virtuelle Java.

1.3 Installation
A linstar de la version 6.0, dvelopper en VB .Net requiert une configuration machine
beaucoup plus importante.
Ci dessous figurent les spcifications Microsoft :

Microsoft Visual Basic . Net - 2005

7/135

Processeur
Mmoire Vive (Ram)
Espace Disque
Carte Vido
Lecteur CD Rom

Config. Minimum

Config Optimale

P2 450 Mhz

P3 733 Mhz

128 Mo

256 Mo

3 Gb

3Gb

800x600, 256 Couleurs

1024x768, 65536 Couleurs

Obligatoire

Obligatoire
Windows 2000
Windows NT 4.0
Windows Me
Windows 98

Systme dexploitation

Ces spcifications concernent lutilisation du FrameWork .Net ainsi que de lIDE, pas
lexcution des programmes MSIL.

2. Environnement Visual Studio


2.1 Linterface
Les habitus de Visual Studio 6.0 ne seront pas drouts : linterface de Visual Basic .net
reprend la plupart des palettes standards avec quelques outils en plus :
- la barre doutils regroupe les diffrents contrles par catgories
- La zone centrale permet tour tour dcrire le code et de dfinir les interfaces
graphiques utilisateurs
- A droite, lexplorateur de solutions et la fentre de proprits

Microsoft Visual Basic . Net - 2005

8/135

2.2 Fentres dexploration


2.2.1 Explorateur de serveur

Lexplorateur de serveur permet de recenser sous forme


hirarchique lensemble des objets dun serveur (Serveurs
SQL, journaux, Services ). Cette fentre est
principalement utilises afin daccder au schma dune
base de donnes utilise dans une application.

2.2.2 Explorateur de Solutions

Microsoft Visual Basic . Net - 2005

9/135

Lexplorateur de solutions (Ex explorateur de projet sous


VB 6.0) rfrence lensemble des lments du projets
(Fichier de configuration pour lassemblage, super classes
hrits, Feuilles.)
Une solution contient les fichiers suivants :
.sln : fichier de configuration de la solution
.vbproj : fichier projet, (ancien .vbp)
.vb : fichiers contenant du code (anciens .bas, .frm, .cls)
.resx : associ une feuille, contient les ressources

2.2.3 Laffichage de classes

Laffichage de classes liste de manire hierarchique les


diffrentes classes du projet ainsi que leurs mthodes,
proprits, vnements et autre relations dhritage.

Microsoft Visual Basic . Net - 2005

10/135

2.2.4 Fentre de proprits


Dj prsente dans la version 6.0, cette fentre recense
toutes les proprits relatives lobjet selectionn.

2.2.5 Laide dynamique


Laide dynamique propose tous les moments de la conception des rubriques daide
utiles en fonction de ce que vous fates. Par exemple, la rubrique crer une collection de
contrles sera affiche lorsque vous ajouterez un bouton radio votre application.
2.2.6 La liste des tches
La fentre liste des tche permet de recenser lensemble des tche raliser sur votre projet.
Cette liste peut tre remplie de plusieurs faons :
- Une tche que vous aurez vous mme dfinie (ex : appeler le client 11h)
- Une tche issue des commentaires de votre code : tous commentaires de votre code
commencant par todo: sera automatiquement ajout
- Lorsquune erreur de syntaxe est dtecte par Visual Studio, elle est automatiquement
ajoute dans la liste
-

3. Gestion de projets

Microsoft Visual Basic . Net - 2005

11/135

3.1 Les solutions


Une solution le plus haut conteneur logique dlments (projets, fichiers, feuilles, classes).
Une solution peut contenir plusieurs projets.

3.2 Cration dun projet


Il est possible de crer un projet soit directement dans une solution ouverte soit dans une
nouvelle solution.

Menu Fichier > Nouveau > Projet

Principaux projets Visual Basic


Type
Application Windows
Bibliothque de classe
Bibliothque de contrle Windows
Application Smart Device
Application Web ASP.Net
Service Web ASP.Net
Application console
Service Windows

Description

3.3 Configuration dun projet


Pour chaque projet de votre solution, un ensemble de proprits sont configurables.
Pour accder aux proprits dun projet, clic droit sur le projet dans lexplorateur de solution
et Proprits.

Microsoft Visual Basic . Net - 2005

12/135

Proprits communes
Proprit
Description
Nom de lassembly
Nom du fichier gnr aprs compilation (MSIL)
Type de sortie
Type dapplication a gnrer
Objet de dmarrage
Feuille ou procdure servant de point de dpart au programme
Espace de nom racine
Permet de dfinir un prfixe pour accder lensemble des
classes disponibles dans le projet
Icne de lapplication
Fichier .ico servant dicne au fichier de sortie
Option explicit
Interdit lutilisation dune variable non dclare
Option Strict
Oblige lcriture de explicite de la conversion de donnes
Option compare
Distinction de la casse en mode binaire (pas en mode texte)
Espaces de noms
Permet de dfinir les espaces de noms qui devront tre
automatiquement imports dans le projet (ex : permet dcrire
form la place de system.windows.forms.form
Chemin daccs de rfrence Dfinit les dossiers dans lesquels se trouvent les rfrences
utilises dans le projet
Prsentation page
Mode de positionnement des contrles : en mode Grid, le
placement est libre, en mode Flow, le placement se fait dans
lordre de cration.
Schma cible
Navigateur pour lequel le code HTML doit tre compatible
Langage de script Client
Type de langage utiliser

Proprit
Action de dmarrage
Argument de la ligne de
commande
Rpertoire de travail
Dbogueurs
Optimisation
Chemin de sortie

Proprits de configuration
Description
Action raliser par lenvironnement lors de la demande
dexcution
Permet de passer des paramtres lors de lexcution du
programme
Rpertoire actif pour lapplication
Dbogueurs activer lors de lexcution
Dfinit un ensemble de contrles que le compilateur ne fera pas
lors de la compilation du programme
Rpertoire o sera gnr lexcutable ou la bibliothque

Microsoft Visual Basic . Net - 2005

13/135

Activer les avertissements de


gnration
Considrer les
avertissements du
compilateur comme des
erreurs
Constantes de compilation
conditionnelles

Si coch, le compilateur ajoutera ses remarques la liste des


tches
Lors de la compilation, les avertissements (Warning) fait par le
compilateur stopperont la compilation (aucun fichier gnr)

Cette option permet de dfinir des constantes qui influeront sur


les lignes compiles

4. Bases du langage
4.1 Structure du code
Un exemple valant mieux quun long discours, nous allons commencer par dcortiquer
un programme de base avant de parcourir le langage en lui mme.
4.1.1 Formulaire
Lors de la cration dun formulaire, le code suivant est automatiquement gnr :

Le code est en fait constitu de la dfinition dune nouvelle classe portant le nom du
formulaire.
Linstruction inherits System.windows.forms.form indique que la classe que nous
crons doit hriter (rcuprer) de tous les lments inscrits dans la classe form
Enfin, la rgion Code gnr par le concepteur Windows Form contient lappel
aux mthodes de base de classe form ainsi que linitialisation des contrles.

Tout ajout dlments au formulaire (Variables, procdures, contrles) seront ensuite perus
(selon leur visibilit) comme membres de la classe form1 .
4.1.2 Module
Lors de la cration dun nouveau module, le code suivant est automatiquement gnr :

Microsoft Visual Basic . Net - 2005

14/135

Tout le code contenu dans le module sera insr entre module et end module
4.1.3 Les commentaires
Les commentaires permettent dajouter des annotations sur le code qui, une fois la
compilation lance, ne seront pas traites par le compilateur et ainsi exclue du programme
final.
Pour ajouter un commentaire, utiliser le caractre apostrophe . lorsquun commentaire est
ajout, tout le reste de la ligne sera un commentaire.
ceci est un commentaire
Dim mavar as string ceci est un autre commentaire
Il nest pas possible de crer des commentaires multilignes. Dans ce cas, vous tes oblig de
rpter le caractre apostrophe au dbut de chaque ligne
A noter que lorsquun commentaire commence par le mot cl todo:, il sera automatiquement
ajout dans la liste des tches
todo: commentaire automatiquement ajout dans la liste des tches
4.1.4 Les rgions
Les rgions sont une nouvelle fonctionnalit de Visual Basic permettant de masquer
une partie du code pour gagner en lisibilit.
La fonctionnalit applique aux rgion se retrouve sur chaque procdure Visual Basic : le
signe + situ gauche du nom des procdures permet de ne garder que leur dclaration.

Il est possible de crer vos propres rgions avec la syntaxe suivante :


#Region libell de la rgion

#End Region

Microsoft Visual Basic . Net - 2005

15/135

#Region Dclaration des variables


dim i, j as integer =0
dim nom as string
#End Region

4.2 Les variables


Les variables permettent de stocker des informations lors de lexcution du programme.
Une variable est caractrise par les informations suivantes
- Un nom : le nom dune variable commence obligatoirement par une lettre, peut
contenir des lettres, chiffres et le signe _ (underscore) avec un maximum de 255
caractres. Visual Basic ne tient pas compte de la casse (Majuscules / Minuscules)
- Un type : le type dun variable prcise le type de la valeur stockes par la mmoire
(numrique, chane de caractre, date )
- Une porte : la porte dune variable correspond sa dure de vie
4.2.1 Types de variables
4.2.1.1 Types numriques
Nom

Min

Max

Taille

Byte

255

8 bits

Short

-32768

32767

16 bits

Integer

-2 147 483 648

2 147 483 647

32 bits

Long

-9223372036854775808

9223372036854775807

64 bits

Single

-3.402823 E 38

3.402823 E 38

32 bits

Double

-1.79769313486231 E 308

-1.79769313486232 E 308

64 bits

Decimal -79228162514264337593543950335 79228162514264337593543950335 16 Octets

4.2.1.2 Types chane de caractre


Depuis la version .Net, les chanes de caractre sont enregistres au format Unicode, cest
dire que chaque caractre utilise 2 octets.

Nom
Char
String

Description
Utilis pour stocker un seul caractre
Chane de caractre longueur variable
dune taille de 0 environ 1 milliard de

Exemple
a
Sandrine Desayes

Microsoft Visual Basic . Net - 2005

16/135

caractres

4.2.1.3 Autres types


Nom
Boolean
Date

Object

Description
Variable dont le contenu peut tre False (0)
ou True (1)
Stocke les informations de date et heure. Si
la date est omise, le 1er janvier de lanne en
cours sera utilis. Si lheure est omise,
minuit sera lheure par dfaut.
Le type object est un type universel
(anciennement nomm Variant). Ce type ne
stocke en fait pas la donne elle mme mais
il contient un pointeur vers ladresse
mmoire contenant la donne. De ce fait,
une variable de type object peut pointer vers
(contenir) nimporte quel type de donnes

Exemple
True
#12/07/02 15:33:17#
#12/07/02#
#15:33:17#
!Erreur !
Laffectation des adresses
mmoire se fait de manire
implicite

4.2.2 Dclaration de variables


La dclaration des variables permet, lors de lexcution dun programme de rserver
lespace mmoire ncessaire au stockage des informations. Par dfaut, la dclaration des
variables est obligatoire mais il est possible de la dsactiver (voir les options communes de
projet). Il est cependant dconseiller de la dsactiver car une simple erreur de syntaxe au
niveau du nom dune variable ne sera pas interprt comme une erreur par le compilateur et
de ce fait, le programme travaillera sur deux emplacements mmoire bien distincts.
La dclaration des variables se fait de la faon suivante
Dim nomvariable1, nomvariable2, nomvariable3 as type_variables = valeur_par_defaut
Laffectation dune valeur par dfaut est facultative.
Dim i as integer = 0
Dim moncar as char = i
Dim aujourdui as date = #12/07/02#
Dim nom as string
4.2.3 Porte et visibilit des variables
4.2.3.1 Porte des variables
La porte dune variable est quivalent sa dure de vie, cest dire tant quelle est
accessible. La porte est dfinie en fonction de lendroit o est place sa dclaration. Quatre
niveaux de porte existent :
- Niveau Bloc : si la variable est dclare dans un bloc (boucle while, condition ), la
variable ne sera valable que lintrieur du bloc

Microsoft Visual Basic . Net - 2005

17/135

Niveau Procdure : si la variable est dclare lintrieur dune procdure ou dune


fonction, elle ne sera accessible qu lintrieur de cette procdure / fonction

Niveau Module : la variable dclare dans un module sera accessible uniquement


partir des lments du modules (procdures, fonctions)

Niveau projet : la variable est accessible partir de tous les lments du projet. Dans
ce cas, il faut utiliser le mot cl friend la place du mot dim .
4.2.3.1 Visibilit des variables

En dehors de lemplacement o est dfinie la variable, plusieurs mot cls sont disponibles
pour agir sur la visibilit :
- Public : tous les blocs de code peuvent accder la variable
- Private : seul les lments membres de la classe ou du module peuvent y accder
Dim i as integer
Public y as string
Private z as integer
4.2.4 Les tableaux
Un tableau est un regroupement de variables accessibles par le mme nom et diffrentiables
par leurs indices.
- Un tableau peut avoir jusqu 32 dimensions.
- Les indices de tableaux commencent toujours 0.
- Lors de la dclaration dun tableau, lindice maximum est prcis : le tableau
comportera donc (indice_max + 1) valeurs.
Dim montableau(10) as integer
Dim tableau2(5) as string
Pour accder un lment du tableau, il faut prciser le nom du tableau avec entre
parenthses lindice de llment dsir.
Montableau(2) = 123
Tableau2(5) = toto
En Vb, les tableaux sont dynamiques, cest dire quil est possible de modifier leur taille.
Pour cela, il faut utiliser linstruction Redim suivi du nom du tableau et de sa nouvelle
taille.
Redim montableau(15)
Cependant, linstruction Redim ne conserve pas les donnes dj prsentes dans le
tableau. Pour conserver son contenu, utiliser le mot cl preserve
Redim preserve montableau(15)

Microsoft Visual Basic . Net - 2005

18/135

4.2.5 Les constantes


Les constantes permettent de stocker une valeur en sassurant quelle ne sera jamais
modifie. Elles sont gnralement utilises pour amliorer la modularit du code en ne
dfinissant quune seule fois une valeur utilise plusieurs fois.
Il nest pas obligatoire de prciser le type de la constante sauf lorsque loption
Strict du compilateur est active.
Dim tx_tva = 19.6
Dim voyelles as string = aeiouy

4.2.6 Les numrations


Les numrations permettent de dfinir un type de variable dont les valeurs
appartiennent un domaine prcis. Chacune des valeurs dune numration correspond un
entier : le premier lment de lnumration est initialis 0, le second 1 etc
Enum civilite
Monsieur
Madame
Mademoiselle
End enum
Il est cependant possible de personnaliser les indices utiliss :
Enum jour
Jeudi = 4
Lundi = 1
Dimanche = 7

End enum
Une fois lnumration dclare, il est possible de dclarer une variable du type de
lnumration.
Dim macivilite as civilite
De cette faon, la variable macivilite pourra uniquement prendre les valeurs dfinies
dans lnumration :
Macivilite = monsieur
Macivilite = 1
Macivilite = 4

correspond madame
invalide, lindice max est 2

De manire gnrale, les numrations sont utilises pour le passage de paramtres, de


faon utiliser des constantes parlantes plutt que des valeurs numriques pas toujours
comprhensibles.

Microsoft Visual Basic . Net - 2005

19/135

4.3 Les oprateurs


il existe 5 types doprateurs
4.3.1 Oprateur daffectation
Un seul oprateur daffectation existe et ce quelque soit le type de donnes concern : le signe
gal = . Il permet daffecter une valeur une variable.
Mavar = 123
Attention, le signe gal est aussi utilis pour la comparaison.
Il est galement possible dutiliser les oprateurs arithmtique lors dune affectation.
Dim i as integer = 5
I += 3
quivalent i = i + 3

4.3.2 Oprateurs Arithmtiques


les oprateurs arithmtique permettent deffectuer des calculs sur des variables, constantes
Oprateur

Description

Exemple

Rsultat

Addition

3+2

Soustraction

86

Multiplication

3*4

12

Division

8/2

Division entire

9\2

9 mod 2

3^2

Mod
^

Modulo (Reste de la division entire)


Puissance

Dim nombre as double


Nombre = 50 + 7
Nombre = 8 mod 2

4.3.3 Oprateurs de comparaison


Il permettent de comparer deux membres et, en fonction du rsultat, retournent True ou False
Oprateur

Description

Exemple

Microsoft Visual Basic . Net - 2005

Rsultat

20/135

Egalit

2=5

False

<>

Ingalit

3<>6

True

<

Infrieur

-2 < 12

True

>

Suprieur

8>9

False

<=

Infrieur ou gal

9 <= 9

True

>=

Suprieur ou gal

13 >= 7

True

Like

Egalit de chane de caractres

maison like m*

True

4.3.4 Oprateurs de concatnation


La concatnation est lunion de deux chanes. Deux oprateurs existent :
-

Le plus + : dans ce cas, il faut que les deux membres de la concatnation soient de
type chane de caractres.

Lperluette & : dans ce cas, loprateur effectue une conversion implicite lorsque
les deux membres ne sont pas des chanes de caractres.

Dim chaine as string


Dim nombre as integer
Chaine = nous sommes le
Nombre = 23
Msgbox (chaine & nombre)
Msgbox (chaine + nombre)

affiche nous sommes le 23


plantage !

4.3.5 Oprateurs logiques


Les oprateurs logiques permettent de combiner des expressions logique (renvoyant
True ou False) lintrieur de conditions.
Par rapport la version 6 du langag, deux oprateurs font leur apparition : AndAlso et OrElse.
Ces oprateurs permettent une optimisation des conditions dans le sens o il neffectueront le
second test que si le premier ne rpond pas la condition.
Oprateur
And
Or
Xor
Not
AndAlso

Description
Et logique
Ou logique
Ou exclusif
Ngation
Et logique optimis

Exemple
True and False
True or False
True Xor True
Not true
Test1 AndAlso test2

OrElse

Ou logique optimis

Test1 OrElse Test2

Microsoft Visual Basic . Net - 2005

Rsultat
False
True
False
False
Test2 sera valu que
si Test1 est True
Test2 sera valu que
si Test1 est faux

21/135

4.4 Les structures de contrle


Les structures de contrle permettent de modifier le nombre dexcution dune instruction.
4.4.1 Les conditions
Une condition est une comparaison entre deux membres dont le rsultat retourne True
(Vrai) ou False (Faux). Une condition est compose dau moins 2 membres (variables,
constantes, appel de fonction) et ventuellement doprateurs logiques permettant de lier les
sous conditions. Les conditions sont utilises dans les structures de contrle afin den dfinir
leur fonctionnement.
4.4.2 Structures conditionnelles
Egalement nommes structures de dcision, les structures conditionnelles aiguillent
lexcution de tel ou tel bloc de code en fonction dune condition.

4.4.2.1 Structure If
Plusieurs syntaxes sont possibles :

Forme simple

A utiliser dans le cas o vous ne souhaitez raliser quune seule instruction lorsque la
condition est vrifie. Dans ce cas, la condition et linstruction raliser doivent se trouver
sur le mme ligne.
If qte_stock < 10 then nouvelle_commande()

Forme normale

La forme normale permet dexcuter plusieurs instructions lorsque la condition est vrifie.
If qte_stock < 10 then
nouvelle_commande()
prevenir_service_reception()
End if

Forme volue

La forme volue permet dexcuter plusieurs instructions lorsque la condition est vrifie
et dexcuter dautres instructions.
If note < 10 then
Msgbox(Examen chou)
Else

Microsoft Visual Basic . Net - 2005

22/135

Msgbox(Examen russi)
End if
4.4.2.2 Structure Select Case
La structure de contrle Select Case permet deffectuer un ensemble de test sur une
seule valeur. Cette valeur peut-tre le contenu dune variable, le rsultat dun calcul ou dune
fonction. Le principal intrt de cette structure est de clarifier le code : en effet, toute
utilisation de cette structure peut tre remplace par un ensemble de structures If.
Les diffrentes possibilits de test sont les suivantes :
-

Case constante : test valide si valeur = constante

Case min to max : pour les valeurs numrique, permet de dfinir un interval

Case is > constante : pour les valeurs numriques, dfinition dun interval non ferm

Case Else : cette condition sera valide si tous les tests dfinis dans le select case sont
faux

Dim note as integer


Note = inputbox(Veuillez saisir une note)
Select case Note
Case is <= 10
Msgbox(Examen chou)
Case 11 to 19
Msgbox(Examen russi)
Case 20
Msgbox(Excellent, tout est juste)
Case else
Msgbox(Note invalide)
End Select
4.4.2.3 Instruction conditionnelles
3 autres instructions existent pour effectuer des tests :

Iif

Linstruction IIF permet dvaluer une condition et de retourner des valeurs diffrentes en
fonction du rsultat de la condition.
IIF (condition, valeur_retourne_si_vrai, valeur_retourne_si_faux)
Appreciation = iif(note < 10, Echou, Reu)

Switch

Microsoft Visual Basic . Net - 2005

23/135

Linstruction Switch regroupe plusieurs conditions et retourne le rsultat correspondant


pour la premire condition vraie.
Switch (condition1, valeur1, condition2, valeur2 .)
Lib_famille = Switch (code_famille=1, Info, code_famille=2, Consommable)

Choose

Linstruction Choose permet de choisir une valeur dans une liste en fonction dun Index.
Attention, les Index commencent 1 !
Choose(index, valeur1, valeur2 .)
Lib_famille = Choose(code_famille, Info, Consommable)

4.4.3 Structures rptitives


Les structures rptitives ou structures de boule permettent dexcuter un bloc dinstructions
un certain nombre de fois.
4.4.3.1 Structure While
La structure while rpte les instructions contenues entre While et End while tant que
la condition est vrifie.
While condition

end while
dim i as integer = 0
while i < 10
msgbox (i)
i++
end while
4.4.3.2 Structure Do loop
La structure do loop possde 4 variantes. Elle peut tre paramtre avec les mots cls while
(tant que la condition est vrifie) et Until (Jusqu ce que la condition soit vrifie).
Do while condition

loop
Do until condition

loop

Microsoft Visual Basic . Net - 2005

24/135

Dans ces deux cas, la condition est value une premire fois avant lentre dans la
boucle, cest dire quil est tout fait possible que les instructions de la boucle ne soient
excutes aucune fois.
Une seconde variant de cette structure permet dexcuter au moins une fois les
instructions de la boucle et dvaluer la condition ensuite :
Do

loop while condition


Do

loop until condition


4.4.3.3 Structure For
La structure For est utilise pour excute un bloc dinstruction un nombre de fois
dtermin tout en grant un compteur qui sera automatiquement incrment. Le nombre
dexcution est fonction de lintervalle dfinit pour le compteur :
For compteur = valeur_depart to valeur_fin step valeur_increment

next
Lexemple suivant affiche les nombres 1,3,5,7,9
dim i as integer
for i = 1 to 10 step 2
msgbox (i)
next
4.4.3.4 Structure For each
La structure For Each permet de parcourir un tableau ou une collection (tableau
dobjets) sans se proccuper de leurs indices. Lutilisation dune telle structure est
gnralement plus rapide lors de lexcution quun parcourt par indices.
For each element in collection_ou_tableau

next

4.5 Procdures et fonctions


Dans une application Visual Basic, les instructions doivent obligatoirement figurer
dans une procdure ou une fonction. Ce sont des units logique de code qui seront ensuite

Microsoft Visual Basic . Net - 2005

25/135

appeles. Le dcoupage dun programme en procdures et fonctions prsente plusieurs


intrts :

Lisibilit du code : lors de dbogage, il est plus facile danalyser le comportement de


plusieurs blocs de code de 10 lignes quun pav de 200 lignes

Modularit : lcriture de procdures et fonctions permet ensuite deffectuer des appels


partir de plusieurs endroits dans le code au lieu de rcrire les mme instructions

Evolutivit : lorsquune procdure est utilise dans plusieurs partie du programme,


modifier la procdure permettra de rpercuter les modifications pour tous les appels de
la procdure

Enfin, il existe plusieurs cas dans lequel lutilisation de procdures est impos par Vb.
Il existe en Vb 4 catgories de procdures :

Les procdures sub qui excutent du code la demande


Les procdures vnementielle dclenches automatiquement lorsquun vnement se
produit (clic sur un bouton par exemple)
Les fonctions qui excutent un bloc de code et retournent une valeur
Les procdures de proprits obligatoires lors de la manipulation dobjets (leur
utilisation est spcifi dans le chapitre consacr aux objets)

4.5.1 Cration de procdure


Lutilisation dune procdure comporte deux tapes : la dclaration dfinissant le
comportement de celle ci et lappel demandant lexcution.
Attention, la dclaration dune procdure ne lexcute en aucun cas !!!
4.5.1.1 Dclaration
public sub nom_procedure(paramtres)

end sub
-

Toutes les instructions situes entre sub et end sub feront partie de la procdure
Le nom dune procdure suit les mme rgles que pour les variables
Il possible de prciser la visibilit de la procdure en remplaant public par private ou
friend
4.5.1.2 Appel

Pour appeler une procdure, il suffit de placer son nom avec le mot cl call (facultatif)
Call nom_procedure(valeurs_parametres)
nom_procedure(valeurs_parametres)

Microsoft Visual Basic . Net - 2005

26/135

4.5.2 Cration de fonction


Les fonction sont des procdures retournant un rsultat.
4.5.2.1 Dclaration
Lors de la dclaration dune fonction, il faut reprendre les mme lments que pour les
procdures avec en plus le type de retour de la fonction (String, integer).
La fonction doit galement comporter linstruction Return qui permet de dfinir la valeur
retourne par la fonction.
Public function nom_fonction(paramtres) as type_retour

return valeur_retour
end function
4.5.2.1 Appel
Nous lavons dit plus haut, un fonction est une procdure retournant une valeur. Cette
valeur peut tre issue dun calcul ou tre un code erreur. De ce fait, lors de lappel dun
fonction, il faut rcuprer le rsultat afin de le traiter. Le rsultat peut donc tre stock
directement dans une variable ou encore tre pass en paramtre une autre procdure ou
fonction.
Variable = nom_fonction(valeurs_parametres)
Msgbox (nom_fonction(valeurs_parametres))

4.5.3 Passage de paramtres

Le passage de paramtres permet de personnaliser le fonctionnement dune procdure


ou dune fonction en lui prcisant lors de lappel les valeurs sur lesquelles elle devra
travailler.
4.5.3.1 Dclaration
Cest lors de la dclaration de la procdure ou de la fonction que vous devez prciser
les paramtres attendus. Ces paramtres seront ensuite utilisables comme des variables locales
la procdure.
Public sub nom_procedure (parametre1 as type_parametre1, parametre2 as type_parametre2
)
Public sub feliciter (nom as string)
Msgbox (bravo & nom)
End sub

Microsoft Visual Basic . Net - 2005

27/135

Dans certains cas, un paramtre peut tre facultatif. Dans ce cas, il faut placer le mot
cl optionnal devant le paramtre et, ventuellement, spcifier la valeur par dfaut avec
loprateur daffectation :
Public sub feliciter (nom as string, optional prenom as string = inconnnu)
Msgbox (bravo & nom & & prenom)
End sub
4.5.3.2 Appel
Lors de lappel dune procdure ou dune fonction, il faut donner les valeurs des diffrents
paramtres utiliss par la fonction.
Feliciter(Dupont)
Feliciter(Dupont, gerard)
4.5.3.3 Passage par valeur et par rfrence
Lors du passage de paramtres une procdure ou une fonction, deux mthodes sont
disponibles :

Passage par valeur

Cest le mode de passage de paramtre par dfaut : lors du passage par rfrence, seule la
valeur du paramtre est pass la procdure. Cette dernire travaille donc sur une variable
locale.
Pour dfinir un passage de paramtre par valeur, il suffit dajouter le mot cl byval
devant le nom du paramtre dans la dclaration de la procdure.
Dans lexemple suivant, les 2 variables nom et enom font rfrence des emplacements
mmoires distincts.
Sub main()
Dim nom as string = toto
Afficher(nom)
End sub
Sub afficher(byval enom as string)
Msgbox(enom)
End sub

Passage par rfrence

Dans le cas dun passage par rfrence, ce nest pas la valeur du paramtre qui est pass
mais ladresse de la variable contenant la valeur : dans ce cas, la procdure appele et la
procdure appelante travaille sur la mme variable, mme si le nom utilis pour le paramtre
est diffrent du nom de la variable initiale. De ce fait, il est possible de modifier le contenu de
la variable passe en paramtre partir de la procdure appele.

Microsoft Visual Basic . Net - 2005

28/135

Pour dfinir un passage de paramtre par valeur, il suffit dajouter le mot cl byref
devant le nom du paramtre dans la dclaration de la procdure.
Sub main()
Dim nom as string = toto
Modifier(nom)
Msgbox(nom)
affiche titi
End sub
Sub modifier(byref enom as string)
Enom = titi
End sub
4.5.3.4 Passer un nombre quelconque de paramtre
Visual basic .Net permet le passage dun nombre quelconque de paramtre grce au mot cl
ParamArray . Il suffit de dfinir un paramtre de type tableau correspondant au type des
paramtres qui devront tre pass. Chaque lment du tableau correspond ensuite un
paramtre.
Sub nom_procedure(ParamArray tableau() as type_parametre)
Sub somme (ParamArray nombres() as integer)
Dim nombre as integer
Dim total as integer
For each nombre in nombres
Total += nombre
Next
Msgbox (total)
End sub
Pour la procdure somme, il sera donc possible deffectuer les appels suivants :
Somme (12,2)
Somme(15,7,6,9,2,4)

4.6 Fonctions intgres


Visual Basic comporte un ensemble de fonctions dj intgres permettant de raliser les
oprations de base sur les nombres, chanes et dates. Ces fonctions peuvent apparatre sous
deux formes :
- Fonction standards Vb
- Mthodes des classes de type (System.String, System.DateTime )
De manire gnrale, il est prfrable dutiliser les mthodes lies aux type de variables dans
le sens o elles sont accessibles par simple ajout du point aprs le nom de la variable (Liaison
prcoce).

Microsoft Visual Basic . Net - 2005

29/135

Attention, lappel des mthodes ne change pas la valeur de la variable mais retourne la
valeur modifie.
4.6.1 Fonctions sur les chanes de caractres
Pour les exemples du tableau ci-dessous, nous utiliserons la variable suivante :
Dim ch as string = tartanpion
Mthode
.Chars(Index)

Description
Retourne le caractre lindice
Index
Retourne lindice de la
premire occurrence de
caractre partir de la position
dbut
Insre chaine la position
indice
Retourne le nombre de
caractre de la chane
Formate la chane sur nb
caractres en remplissant les
espaces vides gauche avec
remplissage
Identique mais droite

Exemple
Ch.Chars(2)

Rsultat
r

Ch.IndexOf(p)

Ch.Insert(2,ta)

Tatartanpion

Ch.length

10

Supprime les caractres de la


chane partir de lindice
dbut sur une longueur de
nombre
.Replace(recherche, Remplace les occurrences de
remplace)
recherche par remplace
.Split(Sparateur)
Dcoupe une chane selon
sparateur et retourne un
tableau
.StartWith(debut)
Retourne un boolen spcifiant
si la chane commence par
debut
.SubString(Debut, n) Retourne la sous chane
partir de la position Debut sur
1 longueur de n caractres
.ToLower()
Met la chane en minuscule
.ToUpper()
Met la chane en majuscule
.Trim(caractre)
Supprime les occurrences de
caractre en dbut et en fin de
chaine

Ch.remove(2,3)

Tanpion

Ch.replace(an,
i)
Ch.Split(a)

Tartipion

Ch.SubString(4,2)

Anp

Ch.tolower
Ch.toUpper
Ch.trim(t)

Tartanpion
TARTANPION
Artanpion

.IndexOf(Caractre,
debut)

.Insert(Indice,
chaine)
.Length
.PadLeft(nb,
remplissage)

.PadRight(nb,
remplissage)
.Remove(debut,
nombre)

Ch.PadLeft(15,s) Ssssstartanpion

Ch.PadLeft(15,s) Tartanpionsssss

T
Rt
Npion
Ch.StartWith(tar) True

Microsoft Visual Basic . Net - 2005

30/135

Dautres fonctions sont disponibles dans lespace de nom


microsoft.VisualBasic.Strings

4.6.2 Fonctions sur les nombres


Lensemble des fonctions disponibles pour la gestion des nombres est disponible dans la
classe Math.
Fonction
.Floor(n)
.Ceiling(n)
.Pow(n, p)
.abs(n)

Description
Tronque la valeur
Retourne le nombre entier juste
suprieur
Retourne n la puissance p
Retourne la valeur absolue de n

Exemple
.Floor(3.25)
.Ceiling(3.25)

Rsultat
3
4

.pow(2,3)
.abs(-8)

8
8

4.6.3 Fonctions sur les dates


Pour les exemples ci dessous, nous utiliserons la variable suivante comme base :
Dim d as datetime = #12/07/2003 16:00#
Mthodes
.addmonths(n)
.addDay(n)
.addHours(n)
.addMinutes(n)

Description
Ajoute n mois la date
Ajoute n jours la date
Ajoute n heures la date
Ajoute n minutes la
date
.addSeconds(n)
Ajoute n secondes la
date
.addYears(n)
Ajoute n annes la date
.Day
Jour du mois
.DayOfWeek
Jour de la semaine
.DayOfYear
Jour de lanne
.DaysInMonth(y, Nombre de jour pour le
m)
mois m de lanne y
.Minute
Retourne la valeur de
minute
.Hour
Retourne la valeur de
heure
.Day
Retourne la valeur de
jour
.Month
Retourne la valeur de
mois
.Year
Retourne la valeur de
anne
.Now
Retourne lheure et la
date courante

Exemple
d.addmonths(2)
d.addDay(1)
d.addHours(1)
d.addMinutes(1)

Rsultat
#12/09/2003 16 :00#
#13/07/2003 16:00#
#12/07/2003 17:00#
#12/07/2003 16:01#

d.addSeconds(1)
d.addyears(1)
#12/07/2004 16:00#
d.day
12
d.DayOfWeek
6
d.DayOfYear
341
d.DaysInMonth(1,2003)
31
d.minute

00

d.hour

16

d.day

12

d.month

07

d.year

2003

d.now

Microsoft Visual Basic . Net - 2005

31/135

4.6.4 Fonctions sur les tableaux


pour les exemples ci dessous, nous utiliserons la variable suivante :
dim t() as integer = {1,9,4,3}
Mthodes
.Length
.Reverse(tab)
.Sort(tab)
.GetUpperBound(d)

Description
Retourne la taille du tableau
Inverse les lments de tab
Trie les lments de tab
Retourne lindice de llment le
plus grand dans la dimension
spcifie

Exemple
t.length
t.reverse(t)
t.Sort(t)
t.GetUpperBound(0)

Rsultat
4
3,4,9,1
1,3,4,9
3

4.6.5 Fonctions de conversion


Les fonctions de conversion permettent de travailler sur plusieurs variables possdant
des types de donnes diffrents. Dans tous les cas, le type de donnes retourn est modifi et
la valeur, lorsque cela est possible, adapte au nouveau type. Une erreur sera gnre dans les
autres cas.
Fonction
Cbool
Cdate
CDbl
Cint
Cstr

Type de donnes retourn


Boolen
Date
Double
Entier
String

Il existe principalement deux cas dutilisation de ces fonctions :

Convertir une donne lors dun passage de paramtres


Sassurer du bon fonctionnement des oprateurs de comparaison

Il existe une autre fonction de formatage dont le fonctionnement est un peu diffrent : la
fonction ctype permet de convertir une variable de type Object vers un type dobjet
prcis. Le principal intrt de cette mthode est de profiter de la liaison prcoce lors de
lcriture de programmes.
Ctype(objet, classe)
Dim f as object
Dim g as Personne
F = new personne(toto)
G = Ctype(f, personne)

Microsoft Visual Basic . Net - 2005

32/135

4.6.6 Fonction de formatage (Format)


Les fonctions de formatage permettent une reprsentation diffrentes des donnes
numriques ou dates mais ne sont pas utilise pour des conversion de types.
Une seule fonction est utilise en Vb : la fonction format.
Format(expression_a_formater, style) as string
Lexpression formater peut tre une valeur numrique ou de type date / heure.
Le style est un format spcifiant les lments de reprsentation de lexpression (par exemple,
le nombre de dcimal aprs la virgule ). Deux possibilits sont offertes lutilisateur pour
le formatage :
- Des formats prdfinis sous vb (par exemple, la date au format amricain)
- Des caractres de formatage permettant lutilisateur de dfinir ses propres formats

4.6.6.1 Caractres de formatage pour les numriques

Formats prdfinis

Caractre
C
Percent
Scientific

Description
Sparateur de milliers et 2 dcimales
Multiplie le nombre par 100 et ajoute le signe %
Notation scientifique

Exemple
12 846.49
1284648.61%
1.28E+04

Formats dfinis par lutilisateur

Caractre
0
#
.
,
\

Description
Affiche le chiffre ou 0
Affiche le chiffre ou rien
Dcimal
Sparateur de milliers
Caractre dchappement

Dim nb as double = 12.263


Msgbox (format(nb, 000,000.00))
Msgbox (format(nb, ###.##))
Msgbox (format(nb, rsultat\ : ###,###.##))

affiche 000 012.26


affiche 12,26
affiche rsultat : 12.26

4.6.6.2 Caractres de formatage pour les dates

Formats prdfinis

Caractre
G

Description
Affiche la date selon les paramtres du
systme

Exemple
4/3/2003

Microsoft Visual Basic . Net - 2005

33/135

Format date longue spcifi au niveau du


systme

04/03/2003

Formats dfinis par lutilisateur

Caractre
:
/
d
dd
ddd
dddd
M
MM
MMM
MMMM
gg
h
hh
m
mm
s
ss
tt
yy
yyyy
z

Description
Sparateur dheures
Sparateur de date
Jour sans zro non significatif
Jour sur 2 chiffres
Jour sous la forme dabbrviation (ex : Lun)
Jour sous la forme du nom complet (ex : Lundi)
Mois sans zro non significatif
Mois sur 2 chiffres
Mois sous la forme abrge (ex : Juil)
Mois sous la forme de nom complet
Affiche lre (A.D)
Heure sans zro significatif
Heure sur 2 chiffres
Minute sans zro significatif
Minute sur 2 chiffres
Seconde sans zro significatif
Seconde sur 2 chiffres
Format 12 heures
Anne sur 2 chiffres
Anne sur 4 chiffres
Affiche le dcalage horaire

Dim madate as datetime = #12/07/2002 15 :30#


Msgbox(format(madate, M/d/yy))
Msgbox(format(madate, d-MMMM-yyyy))
Msgbox(format(madate, ddd d MMM yy))

affiche 12/7/02
affiche 12-Juillet-2002
Lun 12 Juil 02

4.6.7 Les botes de dialogue


Les bote de dialogue intgres sont des feuilles modales (cest dire quelle suspendent
lexcution du programme jusqu leur fermeture) destines afficher une information ou
demander une saisie.
4.6.7.1 Boite de message
La bote de message (MsgBox) permet laffichage dune information et donne la
possibilit de configurer les boutons, le titre et licne associe.
MessageBox.Show(prompt, titre, type_boutons, icne, bouton_par_defaut)

Microsoft Visual Basic . Net - 2005

34/135

Titre

Prompt

Icne

Type boutons

Types de bouton

Types de bouton (membres de la classe MessageBoxButtons)


Constante
Description
Ok
Bouton Ok Seulement
OkCancel
Boutons Ok et bouton annul
AbortRetryIgnore
Boutons Abandonner, Ressayer, Ignorer
YesNoCancel
Boutons Oui, Non et Annuler
YesNo
Boutons Oui et Non
RetryCancel
Boutons Ressayer et Annuler

Constantes de Retour

La dfinition du type de boutons modifie laffichage mais permet la mthode .Show de


retourner une valeur correspondant au bouton slectionner par lutilisateur.
Constantes de retour (membres de la classe DialogResult)
Constante
Description
Ok
Bouton Ok
Cancel
Bouton Annuler
Abort
Bouton Abandonner
Retry
Bouton Ressayer
Ignore
Bouton Ignorer
Yes
Bouton Oui
No
Bouton Non

Type dicne
Types dicne (membres de la classe MessageBoxIcon)
Constante
Aperu

Error
Exclamation
Information

Microsoft Visual Basic . Net - 2005

35/135

Question

Bouton par dfaut

Loption bouton par dfaut permet de dfinir le bouton qui sera slectionn par dfaut.
Bouton par dfaut (membres de la classe MessageBoxDefaultButton)
Constante
Description
DefaultButton1
Premier bouton
DefaultButton2
Second bouton
DefaultButton3
Troisime bouton

MessageBox.Show("Le total de la commande s'lve 1000 Eur", "Rsultat",


MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
If MessageBox.Show("Continuer ?", "Confirmation", MessageBoxButtons.YesNo) =
DialogResult.Yes then
MessageBox.Show("Vous avez choisi Oui ")
Else
MessageBox.Show("Vous avez choisi Non ")
End if

4.6.7.2 Bote de saisie


La bote de saisie (InputBox) permet la saisie dune chane de caractre par
lutilisateur. Il est possible de paramtrer le titre, le texte affich ainsi que le texte saisi par
dfaut.
Titre
Message

Valeur par dfaut

InputBox est une fonction, elle retourne la valeur saisie par lutilisateur o chane vide
si le bouton Annuler est utilis. La valeur retourne est toujours de type String. Les ventuels
contrle de saisie devront tre fait par le programme une fois la valeur retourne.
Dim note as string
note = InputBox(Veuillez saisir la note, Saisie, 0)

Microsoft Visual Basic . Net - 2005

36/135

4.7 Les collections


Une collection est une classe contenant un ensemble dobjets de mme type ainsi que
plusieurs proprits et mthodes afin de grer cette liste. Suivants vos besoins, il existe
plusieurs types de collection tous issu de lespace de nom System.Collections .
Pour imager, une collection est un tableau dobjets.
4.7.1 Classe CollectionBase
La classe CollectionBase permet de crer une classe collection contenant tous les
lments de base ncessaires la cration. Il ne reste qu dfinir quelques mthodes
supplmentaires pour avoir une collection oprationnelle.
4.7.1.1 Crer la collection
Dans les exemples suivants, nous nous inspirons de la classe Personne dcrite dans
le chapitre consacre la POO.
La cration dune collection se fait partir dune classe dans laquelle il faut hriter de
system.collections.collectionbase .
Public class PersonneCollection
Inherits system.collections.CollectionBase
End class
La classe PersonneCollection hrite des lments suivants :

Ceci nest pas suffisant : en effet, nous navons pas accs au contenu de notre collection. Pour
cela, nous devons implmenter la proprit item et la mthode add :
Public Class PersonneCollection
Inherits System.collections.CollectionBase
Public Property Item(ByVal index As Integer) As personne
Get
Return CType(Me.InnerList(index), personne)
End Get
Set(ByVal Value As personne)
Me.InnerList(index) = Value
End Set

Microsoft Visual Basic . Net - 2005

37/135

End Property
Public Sub add(ByVal value As personne)
Me.InnerList.Add(value)
End Sub
End Class
4.7.1.2 Utilisation
Dim macol As PersonneCollection
macol = New PersonneCollection
macol.add(New personne("toto"))
macol.add(New personne("titi"))
macol.RemoveAt(0)
MsgBox(macol.Item(0).nom)

4.7.2 Classe Stack


La classe Stack est une collection particulire de type LIFO (Dernier rentr premier
sorti) permettant de grer une pile. Cette dernire se prsente comme un tableau mais contient
des fonctionnalits diffrentes. Pour imager, vous empiler des lments les uns sur les autres
et vous ne pouvez retirer que llment du haut. Ce genre de liste est utilis pour grer les files
dappels.
Pour dclarer une pile, on utilise la classe Stack en prcisant le nombre maximum
dlments :
Dim nom_pile as new Stack(nb)
Dim mapile as new Stack(10)

Pop
Peek
Contains(valeur)
Count
Push
Clear

Proprits et mthodes disponibles


Supprime la valeur au sommet de la pile et la retourne
Retourne la valeur au sommet de la pile
Return true si valeur est prsent dans la pile
Nombre dlment de la pile
Insre une nouvelle valeur
Vide la pile

Dim mapile as New Stack(10)


Mapile.push(5)
Mapile.push(8)

Microsoft Visual Basic . Net - 2005

38/135

Mapile.push(10)
Msgbox (Mapile.peek)
Msgbox (Mapile.pop)

affiche 5
affiche 5 et supprime llment

Msgbox (Mapile.contains(10))
Msgbox (Mapile.count)

affiche true
affiche 2

4.7.3 Classe Queue


La classe Queue est galement issue de lespace de nom System.collections . Elle
permet de grer des files FIFO (Premier rentr, premier sorti).
Pour dclarer une telle files dattente, utiliser la classe Queue en prcisant deux
paramtres : la taille initiale de la liste (par dfaut 32) et le facteur dextension (par dfaut 2).
Dim maliste as new Queue(taille_initiale, facteur)
Dim malisteas new Queue(100,1.5)

Enqueue(valeur)
Dequeue
Peek
Count
Clear
Contains(valeur)

Proprits et mthodes disponibles


Ajoute un lment la liste
Retourne la valeur et supprime llment
Lit la valeur
Nombre dlment
Vide la liste
Retourne true si la valeur est prsente dans la liste

4.8 Gestion des erreurs


La gestion des erreurs est fondamentale en programmation : une bonne gestion
derreur permet dviter tout plantage brusque avec risque de perte de donnes, renseigner le
dveloppeur sur lorigine du problme et enfin proposer ou choisir des alternatives.
4.8.1 Types derreurs
Erreur
De syntaxe

Dexcution

Description
De type derreur correspond aux fautes dorthographe. Elles sont
directement captes par lenvironnement de dveloppement qui les
signale en les soulignant. Noter quune erreur de syntaxe empche la
compilation du programme et de fait ne peut survenir lors de
lexcution.
Une erreur dexcution survient lorsque lenvironnement
dexcution ne correspond pas lopration demande (Accs un
fichier inexistant, dpassement de capacit). Ces dernire affiche
un message derreur incomprhensible pour lutilisateur final avant

Microsoft Visual Basic . Net - 2005

39/135

de stopper le programme.
Cest srement le type derreur le plus compliqu corriger : aucun
plantage nest effectu par la machine et pourtant le rsultat obtenu
est erron. Sur ce genre derreur, il faut gnralement dbugger
le programme avec des outils comme les espions.

De logique

4.8.2 Gestion en ligne


La gestion en ligne existait dj sur la version 6. Elle permet de dfinir les traitements
effectuer dans une procdure lorsquune erreur survient.
4.8.2.1 Linstruction On Error
Linstruction On error est la base de la gestion derreur : cest elle qui va spcifier
les oprations raliser lorsquune erreur survient.
Il existe 3 gestion diffrentes :

On error resume next

Cette instruction ignore la ligne ayant provoqu lerreur et continue lexcution. Cette
mthode est peu fiable dans le sens o vous ntes pas prvenu dune erreur et le reste du
programme peut en tre affect.

On error goto tiquette

Cette instruction dirige lexcution du code vers une tiquette en fin de procdure. Cest
dans cette tiquette que vous pourrez ensuite dfinir les traitements correspondants.
On error goto fin

exit sub
fin :
instructions de gestion
Il est important de placer linstructions Exit sub ou Exit function juste avant la
dclaration de ltiquette car dans le cas o lexcution se droule correctement, il ne faut pas
que la gestion derreur soit active.
Public sub main()
On error goto fin
Dim i as integer
i=3/0
plantage, division par 0
exit sub
fin :
msgbox(Une erreur est survenue)
end sub

On error goto 0

Microsoft Visual Basic . Net - 2005

40/135

Cette instruction dsactive simplement les gestionnaires derreur.


4.8.2.2 Linstruction Resume
Une fois que vous avez redirig le code lors dune erreur, vous devez dfinir les
actions entreprendre : Il existe pour cela 2 mots cls permettant de continuer lexcution du
programme :
Instruction
Resume
Resume Next

Description
Cette instruction reprend le programme o il stait interrompu et essaye
de rexcuter linstruction lorigine du plantage.
Reprend lexcution du programme partir de linstruction suivant
linstruction lorigine du plantage.

Lexemple suivant illustre lutilisation de Resume :


On Error GoTo fin
Dim i, j As Integer
j=0
i = (3 / j)
MsgBox("Fin")
Exit Sub
fin:
Select Case MessageBox.Show("Une erreur est survenue, souhaitez vous ressayer ?",
"", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Case DialogResult.Cancel
Exit Sub
Case DialogResult.Yes
Resume
Case DialogResult.No
Resume Next
End Select

4.8.2.3 Lobjet Err


Avec la mthode prcdente, vous rcuprez toutes les erreur de la procdure et ce
quelque soit lerreur. Pour une gestion derreur plus pointue, vous avez la possibilit de
rcuprer des informations sur la dernire erreur gnre : cest lobjet Err .
Cet objet est toujours accessible.
Proprit
Description
Erl
Number
Source

Description
Description textuelle de lerreur
Numro de la dernire ligne excute
Numro de lerreur
Objet ou application lorigine de lerreur

Mthode

Description

Microsoft Visual Basic . Net - 2005

41/135

Clear
Raise

Efface les paramtres de lobjet


Dclenche une erreur

Le code suivant affiche les informations sur lerreur :


On Error GoTo fin
Dim i, j As Integer
j=0
i = (3 / j)
MsgBox("Fin")
Exit Sub
fin:
With Err()
MsgBox("Erreur no " & .Number & vbCr & "Description : " & .Description & vbCr &
"Apparu dans : " & .Source)
End With

4.8.3 Les Exceptions


4.8.3.1 Try, Catch & Finally
La gestion des exceptions est une mthode plus rcente pour la gestion des erreurs.
Cette mthode est standardise pour tous les langages du FrameWork .Net . De plus, elle
permet de dfinir une gestion derreur pour un bloc particulier et non pas pour une procdure
ou une fonction.
La gestion des exceptions pour un bloc de code est structur de la manire suivante : le
code dangeureux doit tre compris dans le bloc try . Ensuite pour chaque exception
suceptible dtre dclenches, le mot cl catch (analogue au select case) permet de dfinir
les traitements excuter. Enfin, le bloc finally contient du code qui sera excut dans
tous les cas.

Try
{ Instructions dangeureuses}
catch objet1 as type_exception1
{Instructions raliser si exception1}
catch objet2 as type_exception2
{Instructions raliser si exception2}
finally
{Code excuter dans tous les cas}
end Try

Microsoft Visual Basic . Net - 2005

42/135

Lexemple suivant montre lutilisation des exceptions lors de laccs un fichier


contenu sur une disquette :
Try
Microsoft.visualbasic.fileopen(1, A:\fichier.txt, openmode.input)
Catch exception1 as system.io.ioexception
Msgbox(Erreur lors de louverture du fichier : & exception1.source)
Finally
Msgbox(Fin de la procdure)
End try
A chaque exception est associ un objet contenant les informations sur lexception leve :
Proprit
Message
Source
StackTrace
TargetSite

Description
Description textuelle de lexception
Nom de lapplication ayant gnre lerreur
Liste de toutes les mthodes par lesquelles lapplication est passe avant le
dclenchement de lerreur
Mthode ayant dclenche lexception

5 Programmation Objet
Contrairement aux versions prcdentes, Visual Basic .net impose un minimum de
notions Objets afin de lutiliser de faon optimale. De plus, de nombreux concepts objets sont
venus renforcer la POO sous Visual Basic comme les notions dhritage, dinterface et de
polymorphisme.

5.1 Introduction la POO


Lorsque nous parlons de programmation squentielle, nous avons un ensemble de
variables, de tableaux, de bloc de code, de procdure et de fonction relatifs au mme domaine
mais sans lien logique entre eux : par exemple, pour grer un groupe de personne avec un
nom et un prnom, nous utiliserons deux tableaux en faisant correspondre les indices pour la
mme personne. De mme, les fonctions comme envoyer un mail ou augmenter le salaire
travailleront sur les tableaux sans quil y ait de rel lien.
Lide de la Programmation Oriente Objet est de faire correspondre chaque lment du
monde rel une entit informatique. Cest la notion dobjets. Chaque objet reprsente un
lment du rel et contient ses informations (Couleur, taille .). De plus, les fonctionnalits
attendues pour les objets seront implmentes sous la forme de mthode : cest dire une
fonction ou une procdure lie un type dobjet (les classes) et dpendante. Par exemple, la
fonction calculer age perd tout son sens si vous ne lappelez pas partir dune personne
existante (objet). De ce fait, nous obtenons un programme structur logiquement et
grandement clarifi.
Le principe des classes, objets, mthodes et lencapsulation sont les principes de base de
la programmation oriente objet. Plusieurs aux concepts viennent enrichir la POO comme
lhritage qui permet de rcuprer le comportement dune classe dj existante pour en crer

Microsoft Visual Basic . Net - 2005

43/135

une nouvelle, la surcharge qui permet de dfinir plusieurs fois le comportement dune mme
procdure en fonction des paramtres passs et la visibilit (partie de lencapsulation)
permettant de cacher un certain nombre de paramtres inutiles pour lutilisateur final.
Les objectifs de la POO sont les suivants :
- Regroupement logique des lments de programmation pour une meilleur
comprhension du programme
- Rutilisation des composants (une classe ou une partie dune classe utilise dans un
programme peut tre importe dans une autre, do les gains en productivit)
- Maintenance simplifie car tous les objets ont un modle (classe) qui une fois
modifie rpercutera ses modifications sur tous les objets

5.2 Classes & Objets


Nous lavons dit prcdemment, une classe reprsente un objet du rel : elle sera
compose dattributs (variable contenant les caractristiques de lobjet), de mthodes
(procdures ou fonctions matrialisant leur comportement) et dvnement (bloc de code
excuter lorsque lobjet passe un tat dfinit).
La dfinition dune classe permet de dfinir un modle pour les objets qui seront crs.
5.2.1 Cration dune classe
Pour crer une nouvelle classe, il est conseill de crer un nouveau fichier (.vb) dans le projet.
La dclaration dune classe se fait avec les mots cls class et end class .
Public class personne

End class

En visual Basic .Net, il est possible de dfinir une classe lintrieur dune autre classe :

Public class personne

Private class emploi

End class
End class

5.2.2 Visibilit de la classe


La visibilit dune classe permet de dfinir la porte de celle ci, cest dire les blocs
de code qui auront accs la classe. Cinq niveaux de visibilit existent :
Visibilit
Public

Description
Classe utilisable dans tout les projet

Microsoft Visual Basic . Net - 2005

44/135

Friend
Private
Protected
Protected friend

Classe utilisable uniquement dans le projet


Classe utilisable uniquement dans le module / classe o elle est dfinie
Classe utilisable dans les sous classes de celle o elle est dfinie
Union des portes de Protected et Friend

Protected class personne

End class

5.2.3 Options dhritage


Ces options permettront de prciser le comportement de la classe vis vis de lhritage.

Option
MustInherit

Description
Indique que la classe sert de base dans une relation dhritage (Super
classe).
Indique que la classe ne peut tre hrite. Elle devra tre au dernier
niveau de la hirarchie dhritage.

NotInheritable

Public MustInherit class personne

End class

5.2.5 Implements & Inherits


Le mot cl Inherits permet dhriter des membres dune super classe(Cf section sur
lhritage).
5.2.6 Cration et utilisation dobjets
Une fois la classe dfinie, son utilisation devra se faire par la cration ou instanciation
dobjets. Chaque objet contiendra ses propres caractristiques (valeurs des proprits) mais
aura les mme possibilits (mthodes) que les autres objets.
La cration dun objet se fait en deux tapes :

Dabord, il faut crer une variable capable de rfrencer lobjet cr en mmoire :


cest dire que cette variable ne contiendra que ladresse de lobjet. Le type de cette
variable est le nom de la classe qui instanciera lobjet.

Dim MonObjet as MaClasse


Dim moi as personne
Dim toi as personne

Microsoft Visual Basic . Net - 2005

45/135

Ensuite, crer lobjet avec loprateur new et stocker ladresse retourne dans la
variable

MonObjet = New MaClasse()


Moi = new personne()
Toi = new personne()
Le mot cl New effectue plusieurs oprations :

Rservation de lespace mmoire ncessaire au stockage de lobjet


Retourne ladresse mmoire de lobjet cr
Le constructeur de la classe est appel (Cf plus bas), gnralement pour initialiser les
proprits de lobjet.

A partir de ce moment, lobjet est utilisable, cest dire quil possible de modifier ses
proprits et dappeler ses mthodes. Lenvironnement .net effectue ce quon appel une
liaison prcoce, cest dire qu partir de la dfinition de la classe, il est capable dafficher
lensemble des membres disponibles :

Les liaisons prcoces sont utilisables en faisant suivre le nom de lobjet par le caractre point
. . Il est ensuite possible dutiliser les proprits de lobjet comme des variables et
dappeler ses mthodes.
Lorsquun objet nest plus utilis, il est important de le supprimer afin de librer de la
mmoire et, ventuellement, effectuer des oprations denregistrement dans une base de
donnes par exemple via le destructeur.
Pour supprimer un objet, il suffit de placer le mot cl nothing lintrieur de la variable
rfrenant lobjet.
MonObjet = Nothing
Moi = nothing

Microsoft Visual Basic . Net - 2005

46/135

Toi = nothing

5.3 Les proprits


Une proprit permet de dfinir une caractristique dun objet. Une proprit peut tre une
variable ou un objet dont la valeur sera dfinie pour chaque objet.
Il existe deux faon dimplmenter une proprit :
5.3.1 Variables
La premire solution consiste dclarer des variables directement lintrieur de la
classe. En fonction de leur visibilits, celles ci seront accessibles uniquement lintrieur de
la classe ou alors dans tout le programme
Public Class personne
Public nom As String
Public prenom As String
Private mdp As String
Public Sub afficher()
MsgBox(Me.nom & " " & Me.prenom)
End Sub
End Class

Visibilit partir de la classe :

Visibilit partir dun autre module :

Microsoft Visual Basic . Net - 2005

47/135

les proprits ainsi cres sont accessibles en lecture / criture :


dim p as personne
p = new personne()
p.nom = toto
p.prenom = titi
5.3.2 Procdures de proprits
Lutilisation de variables directement dclares dans la classe nest pas trs souple. En
effet il nest pas possible de :
Crer des proprits en lecture seule
Crer des proprits en criture seule
Effectuer des calculs avant de retourner la valeur dune proprit (pour le formatage
par exemple)
Effectuer des calculs lors de la modification dune proprit (Effectuer des
vrifications de date de naissance par exemple)
Pour palier ces problmes, il existe les procdures de proprits. Lide est de lier
chaque proprit deux procdures : GET et SET. La procdure get sera appele lorsque
la proprit set utilise en lecture et set lorsque la proprit est utilise en criture.
Dans tous les cas, les procdures de proprit agiront sur une variable de stockage qui
contiendra la valeur de la proprit.
Pour crer les procdures de proprit, utiliser la syntaxe suivante :
Private variable_stockage as type_proprit
Property nom_proprit() as type_proprit
Get

End Get
Set (byval value as type_proprit)

End set

Microsoft Visual Basic . Net - 2005

48/135

End property
La section Get est en fait une fonction devant contenir le mot cl return pour dfinir la
valeur de retour de la proprit.
La section Set est une procdure prenant en paramtre value , la valeur assigner la
proprit.
Lexemple suivant implmente la proprit nom . Elle vrifie que le nom ne soit pas
vide et retourne le nom en majuscule. Dans cet exemple, cest la variable v_nom qui
contient la valeur de la proprit.

Il est galement possible via les procdures de proprits de crer des proprits en lecture
seule ou en criture seule.
Pour crer une proprit en lecture seule, il suffit domettre la section set et
dajouter le mot cl Readonly devant la dfinition de la proprit
Pour crer une proprit en criture seule, il suffit domettre la section get et
dajouter le mot cl WriteOnly devant la dfinition de la proprit
Lexemple suivant cre la proprit mdp en criture seule et la proprit daten en
lecture seule :

Microsoft Visual Basic . Net - 2005

49/135

Enfin il est possible dutiliser les mots cls private et public pour la dfinition des
proprits.

5.4 Les Mthodes


5.4.1 Gnralits
Les mthodes sont des procdures ou des fonctions dclares lintrieur dune classe et
appelable uniquement partir dun objet.

lappel de la mthode se fait ensuite par lintermdiaire dun objet issu de la classe.

Microsoft Visual Basic . Net - 2005

50/135

dim p as personne
p = new personne()
p.afficher()

5.4.2 Constructeur et Destructeur


Les constructeur et destructeur sont 2 mthodes spcifiques dont lappel est effectu
automatiquement respectivement lors de la cration et lors de la destruction dun objet.
Le constructeur est gnralement utilis pour initialiser les proprits dune classe tandis que
le destructeur permet gnralement la sauvegarde des donnes dans une base par exemple.
5.4.2.1 Constructeur
Le constructeur se doit dtre Public afin quil puisse tre appel lors de
linstanciation des objets.
Public Sub New()
End Sub
Le constructeur suivant permet dinitialiser les proprits de personne
Public Sub New()
v_nom = "toto"
v_prenom = "titi"
v_daten = #12/7/2002#
End Sub
Il est galement possible de passer des paramtres un constructeur. Le constructeur
suivant prend en paramtre le nom de la personne a crer.
Public Sub New(ByVal lenom As String)
v_nom = "toto"
v_prenom = "titi"
v_daten = #12/7/2002#
End Sub
Cest lors de la cration de lobjet que la valeur du paramtre sera dfinie :
Dim p As personne
p = New personne("toto")

5.4.2.2 Destructeur
Le destructeur est lui appel automatiquement lors de la destruction de lobjet. Il
permet gnralement de sauvegarder des donnes ou de supprimer des objets lis en mmoire.

Microsoft Visual Basic . Net - 2005

51/135

Protected Overrides sub Finalize()

end sub
Le mot cl Overrides dfinit une rcriture de fonction. Nous dtaillerons ce point
plus tard.
5.4.3 La surcharge
La surcharge de mthode permet de dfinir plusieurs fois la mme mthode mais avec des
paramtres diffrents. Seuls les paramtres peuvent tre modifis dans une surcharge, pas le
type de retour. Pour surcharger une mthode, il faut utiliser le mot cl OverLoads .
Overloads sub nom_procedure(paramtres)
End sub
Overloads function convertir (byval valeur as integer) as double
Return valeur / 100 * 19.6
End function
Overloads function convertir (byval valeur as integer, byval taux as double) as double
Return valeur / 100 * taux
End function
Ainsi, deux appels sont possibles :
Msgbox convertir(100)
Msgbox convertir(100, 5.5)
Ci dessous figure un exemple de surcharge pour le constructeur de la classe personne.
Cet exemple est spcifique dans le sens o pour les constructeur, il ne faut pas utiliser le mot
cl overload.
Public Sub New(ByVal lenom As String)
v_nom = lenom
v_prenom = "titi"
v_daten = #12/7/2002#
End Sub
Public Sub New(ByVal lenom As String, ByVal leprenom As String)
v_nom = lenom
v_prenom = leprenom
v_daten = #12/7/2002#
End Sub
Public Sub New(ByVal lenom As String, ByVal leprenom As String, ByVal ladaten As Date)
v_nom = lenom

Microsoft Visual Basic . Net - 2005

52/135

v_prenom = leprenom
v_daten = ladaten
End Sub
Ainsi, il est possible dappeler tel ou tel constructeur lors de la cration de lobjet :
Dim p, q, r As personne
p = New personne("toto")
q = New personne("titi", "momo")
r = New personne("tutu", "mimi", #12/7/2002#)
5.4.4 Lobjet Me
Comme dans la version prcdente de Visual Basic, lobjet Me est lobjet courant.
Lorsque vous crivez une mthode, vous pouvez faire rfrence directement aux proprits de
lobjet :
Return nom
Le compilateur sait alors que vous fates rfrence la proprit de lobjet courant.
Pour clarifier le code, lever des ambiguits entre plusieurs variables portant le mme nom ou
profiter du menu de saisie automatique, vous pouvez faire rfrence lobjet Me qui lors
de lexcution fera rfrence lobjet ayant appel la mthode.

5.5 LHritage
5.5.1 Introduction
Lhritage est une fonctionnalit fondamentale de la programmation objet. Il permet
dimporter des classes dj existantes lintrieur dautres classes. Lide est de rutiliser les
composants dj programms sans avoir copier/coller le code ni crer dautres objets
lintrieur de la classe.
Deux acteurs sont prsents lors de lhritage :

Microsoft Visual Basic . Net - 2005

53/135

Super classe (ou classe mre: cest la classe qui contient les proprits et mthodes qui
seront ensuite rutilise dans les sous classes. De manire gnrale, la super classe
contient les membres communs aux sous classes.
Sous classe (ou classe fille) : cest la classe qui hrite des membres de la super classe.
Elle ajoutera ses propres membres qui en feront une classe spcialise.

Reprenons par exemple notre classe personne. Elle contient des proprits et des mthodes
gnriques quelque soit la personne. Cependant, les personnes sont subdivises en 2
catgories : les employs qui ont un taux horaire et une dure de contrat, les cadres qui ont un
salaire fixe plus un montant de primes. Dans ce cas, les employs comme les cadres auront un
nom, prnom et date de naissance. Ainsi, les proprits communes sont regroupes dans la
super classe (Personne) tandis que les proprits spcifiques comme le taux horaire ou le
montant des primes seront eux stocks dans la sous classe.

PERSONNE
Nom
Prnom
Date naissance
Calc_salaire()

EMPLOYE
Tx_horaire
Duree

CADRE
Salaire
Prime

Il sera possible (dans certaines conditions) dinstancier la classe PERSONNE. Cependant,


lorsque nous instancierons les classes EMPLOYE ou CADRE, nous obtiendrons rellement
les classes suivantes :
EMPLOYE

CADRE

Nom
Prnom
Date naissance
Tx_horaire
Duree
Calc_salaire()

Nom
Prnom
Date naissance
Salaire
Prime
Calc_salaire()

Lintrt de lhritage est donc de dfinir les lments communs une seule fois et de
pouvoir les rutiliser dans plusieurs autres classes.

Microsoft Visual Basic . Net - 2005

54/135

5.5.2 Mise en place


Pour dfinir quune classe hrite dune autre classe, vous devez utiliser le mot cl
Inherits dans la dfinition de la sous classe. Attention, la classe que vous utilisez en tant
que super classe ne doit pas possder loption NotInheritable , auquel cas vous ne pourrez
hriter de ses membres.
Public class sous_classe
Inherits super_classe

End class
Dans lexemple suivant, la classe cadre hrite des membres de la classe personne.
Public Class cadre
Inherits personne
Private v_salaire As Double
Private v_montant_prime As Double

Public Property montant_prime() As Double


Get
Return v_montant_prime
End Get
Set(ByVal Value As Double)
v_montant_prime = Value
End Set
End Property

Public Property salaire() As Double


Get
Return v_salaire
End Get
Set(ByVal Value As Double)
v_salaire = Value
End Set
End Property
Public sub new()
Me.nom =
Me.prenom =
Me.daten = #12/07/2002#
Me.salaire = 0
Me.montant_prime = 0
End sub
End Class
Ainsi, lors de linstanciation de la classe cadre, nous retrouvons lensemble des proprits :

Microsoft Visual Basic . Net - 2005

55/135

5.5.3 Objet MyBase


Lobjet MyBase est utilisable uniquement dans les sous classes. Il fait rfrence aux super
classes.
Si nous reprenons notre exemple prcdent, le constructeur de la sous classe cadre fait
directement rfrence aux proprits de la super classe personne . Dans le cas ou rien nest
prcis, le compilateur appellera le constructeur de la super classe par dfaut, cest dire celui
qui ne possde aucun paramtre.
Si vous souhaitez spcifi le constructeur, vous devez lappeler de manire explicite dans
le corps du constructeur de la sous classe :
Public Sub New()
MyBase.New("tyty", "marine")
Me.salaire = 0
Me.montant_prime = 0
End Sub

5.5.4 Le remplacement
Le remplacement est une autre fonctionnalit de lhritage qui permet de rcrire le
comportement dune mthode dclare dans la super classe. Lintrt est de pouvoir rcuprer
les lments dj dfinis dune classe sans pour autant tre bloqu par le comportement dune
fonction qui ne conviendrait pas notre programme.
Par exemple, nous allons modifier le code de telle faon ce que, lorsque nous appelons
la mthode afficher partir dun objet de type cadre, celle ci affiche le nom, prnom et
salaire fixe. Cependant, le fonctionnement de la mthode ne sera pas modifi pour les objets
de type Personne ou Employe .
Pour remplacer la fonction afficher , nous devons la rcrire dans la sous classe cadre
et utiliser le mot cl overrides . Attention, la signature des deux classes doit tre identique
(paramtres et valeur de retour).

Microsoft Visual Basic . Net - 2005

56/135

Overrides sub procedure_de_la_super_classe()


Overrides Sub afficher()
MsgBox(Me.salaire)
End Sub
Quelques contraintes doivent cependant tre respectes afin de mener bien le
remplacement :
La mthode de remplacement doit avoir la mme signature que la mthode remplace.
La mthode remplace (dans la super classe) doit comporter loption Overridable
Dans le cas dune mthode de la super classe comportant loption Mustoverride , le
remplacement est obligatoire.

5.6 Mthodes et variables partages


Jusquici, nous avons vu que les mthodes et les proprits ntaient utilisables que par
lintermdiaire dobjet instancis. Les mthodes et variables partages sont elles accessibles
partir de la classe et non dun objet instanci. Ainsi, dans le cas dune variable partage, nous
avons faire une globale au niveau de la classe.
Pour dclarer une proprit ou une mthode partage, il suffit de rajouter le mot cl
shared (partag ) devant le nom du membre :
Public shared nom_variable as type_variable
Public shared function nom_fonction () as type_fonction
Public shared sub nom_procdure ()
Ces variables et procdures seront ensuite accessibles soit via un objet, soit via le nom de
la classe.
Lexemple suivant cre une variable partage contenant le nombre dobjet instancis partir
de la classe personne . Nous crons galement la proprit nb_personne retournant la
valeur de v_nbpersonne.
Public class personne
Private shared v_nbpersonne as integer = 0
Sub New()
v_nbpersonne++
End Sub
Public shared ReadOnly nb_personne() as integer
Get
Return v_nbpersonne
End get
End sub

Microsoft Visual Basic . Net - 2005

57/135

End class
A chaque instanciation dobjet, le constructeur new incrmente la variable v_nbpersonne.
Ensuite, pour accder la proprit nb_personne, il est possible dutiliser un objet ou
directement la classe :
Dim p as personne
P = new personne
Msgbox (p.nb_personne)
Msgbox (personne.nb_personne)

5.7 Les Interfaces


Une interface est une classe contenant des proprits et dont les mthodes possdent
toutes loption MustOverride , cest dire quelles ne contiennent aucun code.
Les interfaces sont utilises lorsque plusieurs classes doivent implmenter la mme mthode.
Lavantage des interfaces est que le codeur sengage fournir le comportement de toutes les
mthodes lies linterface (Le compilateur sera l pour le vrifier).
Il nest pas possible dinstancier directement une classe.
5.7.1 Cration
La cration dune interface ressemble celle dune classe, elle est dfinie par les mots cl
interface et end interface .
Public interface nom_interface

End interface
Elments susceptibles dintervenir dans une interface
Dclaration de variables
Hritage dune autre interface
Synopsis des mthodes
Elments ne devant pas apparatre dans une interface
mots cl end xxx
lignes de code, oprations, appels
Dans notre cas nous allons dfinir linterface comparer implmentant la mthode
plus_grand prenant en paramtre un Objet.
Public Interface comparer
Function plus_grand(obj as object) as boolean
End Interface

Microsoft Visual Basic . Net - 2005

58/135

5.7.2 Utilisation
Pour utiliser une interface, il suffit de limplmenter dans une classe et de dfinir le
comportement des diffrentes mthodes. Plusieurs lments doivent apparatre dans la classe
implmentant linterface :
- Le mot cl implements nom_interface afin de prciser que la classe va
implmenter linterface
- Le mot cl implements nom_interface.nom_mthode aprs les mthodes qui
dfinissent le comportement dune mthode de linterface.
Dans lexemple suivant, la classe employ va implmenter linterface comparer. Nous
nous baserons sur lage de la personne pour effectuer la comparaison.
Public Class personne
Implements comparer
Public Function plus_grand(ByVal obj As Object) As Boolean Implements _
comparer.plus_grand
If Me.daten < obj.daten Then
Return True
Else
Return False
End If
End Function

Il est maintenant possible dutiliser la mthode partir des objets personne :


Public Sub main()
Dim a, b As personne
a = New personne("toto", "titi", #1/1/1901#)
b = New personne("vuvu", "baba", #1/1/1951#)
MsgBox(a.plus_grand(b))
affiche true
End Sub
5.7.3 Exploiter les interfaces .Net
Jusquici, nous avons cr nos propres interfaces. Le framework .net met disposition
plusieurs interfaces dont le dveloppeur doit savoir tirer avantage pour simplifier la
programmation.
Nous baserons notre exemple sur linterface Icomparable qui permet ensuite dutiliser
la mthode Sort de la classe Array . Cette interface ne comporte quune seul mthode
CompareTo qui prend en paramtre un objet et retourne 1, 0 ou 1 selon que lobjet en
cours est infrieur, gal ou suprieur lobjet pass en argument. A partir de cette mthode de
Tri, la mthode Sort sera capable de trier tous types dobjets, condition quils
implmente linterface.

Microsoft Visual Basic . Net - 2005

59/135

Plus simplement, nous devons dfinir dans la classe personne la mthode


CompareTo qui implmente linterface Icomparable et plus particulirement la
mthode CompareTo . Ainsi, lorsque nous appellerons la mthode Sort de la classe
Array , le compilateur utilisera notre mthode afin de comparer les diffrents Objets et
classer notre tableau.
Lintrt des Interfaces est de pouvoir utiliser des mthodes dj dfinies et de
modifier leur comportement afin quelles puissent tre utilises avec des classes utilisateurs.
5.7.3.1 Implmenter linterface
Pour implmenter linterface, il suffit de la dclarer et dcrire le comportement de la
mthode CompareTo :
Public Class personne
Implements comparer
Implements IComparable
Private Function CompareTo(ByVal obj As Object) As Integer Implements _
IComparable.CompareTo
If obj Is Nothing Then Return 1
Dim autre As personne
autre = CType(obj, personne)
If Me.nom < autre.nom Then
Return -1
ElseIf Me.nom > autre.nom Then
Return 1
Else
Return 0
End If
End Function
.

5.7.3.2 Utiliser linterface


Une fois linterface implmente, nous pouvons utiliser la mthode Sort avec un
tableau dobjets de type personne :
Sub main()
Dim t_personne(2) As personne
Dim p As personne
t_personne(0) = New personne("toto")

Microsoft Visual Basic . Net - 2005

60/135

t_personne(1) = New personne("titi")


t_personne(2) = New personne("tata")
Array.Sort(t_personne)
For Each p In t_personne
MsgBox(p.nom)
Next
End Sub
Cet exemple affiche la liste des personne tries grce lappel de la mthode Sort .

5.8 La dlgation
La dlgation est un mcanisme qui permet de dfinir une variable pointant sur une
fonction. En ralit, cette variable contiendra ladresse de la fonction ou de la procdure.
Lintrt de la dlgation est de permettre tous moments de modifier le
comportement du programme en le faisant pointer sur une autre mthode.
Dans les exemples suivants, nous utiliserons les deux fonctions suivantes :
Public function ajouter(byval x as integer, byval y as integer) as integer
Return (x + y)
End function
Public function multiplier (byval x as integer, byval y as integer) as integer
Return (x * y)
End function

5.8.1 Signature de la mthode


Afin de pouvoir stocker une ou plusieurs rfrences vers des fonctions, il faut dfinir
un type de donne correspondant la signature des fonctions qui seront appeles. Nous
dclarerons ensuite une variable de ce type qui contiendra ladresse de la fonction dlgue.
Public delegate function nom_type (parametre) as type_retour
Nous allons crer le type calcul qui sera un pointeur vers fonction :
Public delegate function calcul (byval x as integer, byval y as integer) as integer
Une fois le type dfini, il faut lui assigner une valeur laide de loprateur Address Of
Calcul = addressof multiplier
A ce moment, le type calcul fait rfrence la fonction multiplier .

Microsoft Visual Basic . Net - 2005

61/135

5.8.2 Appel du Delegate


Une fois le type faisant rfrence la fonction, il suffit dappeler la mthode
invoke afin dexcuter la fonction.
Nom_type.invoke(paramtres)

Msgbox calcul.invoke(1,3)

affiche 3

5.9 Les vnements


Les vnements sont des mthodes qui seront automatiquement appeles par les objets
afin de prvenir dun tat donn. Il est galement possible de dfinir des paramtres
lvnement : ces derniers permettront de prciser les conditions dans lesquelles il se
dclenche.
5.9.1 Cration
La cration dun vnement permet den dfinir ses paramtres ainsi que les
conditions dans lesquelles il sera dclench. Cest lutilisateur de la classe qui dfinira ensuite
les actions raliser lorsque lvnement survient.
Pour crer un vnement, il faut tout dabord le dclarer dans la classe :
Public event nom_evenement(paramtres)
Dans lexemple suivant, nous crons un vnement lorsque le montant des primes dun cadre
dpasse 10 000.
Public event depassement_plafond_prime (byval montant as double)
Une fois lvnement dfini, il faut placer lintrieur de la classe les instructions qui
permettront de le dclencher. Pour cela, on utilise le mot cl RaiseEvent en prcisant les
valeurs des diffrents paramtres attendus par lvnement.
Raiseevent nom_evenement (valeur_parametre)
Dans notre cas, nous devons placer le code ncessaire lors de la modification de la
proprit montant_salaire . Pour cela nous allons placer le code dans la procdure de
proprit Set de montant_prime .
Public Property montant_prime() As Double
Get
Return v_montant_prime
End Get

Microsoft Visual Basic . Net - 2005

62/135

Set(ByVal Value As Double)


v_montant_prime = Value
If v_montant_prime > 10000 Then
RaiseEvent depassement_plafond_prime(v_montant_prime)
End If
End Set
End Property
5.9.2 Utilisation
Il existe deux mthodes pour traiter les vnements : soit en utilisant le mot cl
withEvents , soit en utilisant un gestionnaire dvnements.
5.9.2.1 Utilisation de With Events
La premire solution consiste utiliser le mot cl WithEvents lors de la dclaration
de lobjet :
Dim WithEvents nom_variable as Classe
Dim withEvents violaine as cadre
Une fois la variable cre, vous devez dfinir le bloc de code excuter lors du
dclenchement de lvnement : pour cela, placer le code dans la procdure dvnement
correspondant. Pour quune procdure soit dclenche lorsquun vnement survient, vous
devez ajouter la fin le mot cl handles suivi du nom de la classe et de lvnement
Public sub nom_procedure(parametre) handles objet.nom_evenement

End sub
Dans notre cas, nous afficherons un simple message :
Public sub violaine_depassement_plafond_prime(byval montant as double) handles violaine.
depassement_plafond_prime
Msgbox(Attention, le montant des primes slve & montant)
End sub
Par convention, le nom de la procdure est le nom de lobjet suivi de lvnement mais il ny
aucune obligation : lexemple suivant fonctionne trs bien.
Public sub toto(byval montant as double) handles violaine.depassement_plafond_prime
Msgbox(Attention, le montant des primes slve & montant)
End sub
Lutilisation du mot cl withevents comporte cependant quelques limitations car
les variables dclares avec loption WithEvents ne doivent pas se trouver dans des

Microsoft Visual Basic . Net - 2005

63/135

procdures ou fonctions et il est impossible de modifier dynamiquement le comportement


dun vnement en le faisant pointer sur une autre procdure par exemple.
5.9.2.2 Utilisation du gestionnaire dvnement

La seconde mthode utilise un gestionnaire dvnement : il nest plus ncessaire


dutiliser le mot cl WithEvents et il faudra associer dynamiquement une procdure pour
grer lvnement. Pour cela, on utilise le mot cl AddHandler prenant en paramtre
lvnement et la procdure.
AddHandler objet.evenement, adresseOf procedure
Dans lexemple suivant, nous avons 2 procdure qui affiche le montant des primes en
mode texte et en mode graphique.
Public sub affiche_txt(byval montant as double)
Console.writeline (montant)
End sub
Public sub affiche_graph(byval montant as double)
Msgbox (montant)
End sub
Nous crons ensuite deux objets de type cadre (c1 et c2) et nous lions chaque objet une
procdure diffrente pour la gestion de lvnement depassement_plafond_prime.
Dim c1, c2 as Cadre
C1 = new Cadre()
C2 = new Cadre()
AddHandler c1.depassement_plafond_prime, addressOf affiche_txt
AddHandler c2.depassement_plafond_prime, addressOf affiche_graph
Ainsi, le traitement des vnements sera diffrent selon lobjet utilis.
A linverse, pour supprimer un gestionnaire dvnement mis en place, il faut utiliser le mot
cl RemoveHandler
RemoveHandler objet.vnement, AddressOf procdure
RemoveHandler c1.depassement_plafond_prime, AddressOf affiche_txt
Si aucune procdure nest lie lvnement, ce dernier sera tout simplement ignor.

5.10 Classes dexemple

Microsoft Visual Basic . Net - 2005

64/135

5.10.1 Classe personne


Public Class personne
Implements comparer
Implements IComparable
Private Function CompareTo(ByVal obj As Object) As Integer Implements
IComparable.CompareTo
If obj Is Nothing Then Return 1
Dim autre As personne
autre = CType(obj, personne)
If Me.nom < autre.nom Then
Return -1
ElseIf Me.nom > autre.nom Then
Return 1
Else
Return 0
End If
End Function
Public Function plus_grand(ByVal obj As Object) As Boolean Implements
comparer.plus_grand
If Me.daten < obj.daten Then
Return True
Else
Return False
End If
End Function
Public Shared v_nbpersonne As Integer = 0
Private v_nom As String = ""
Private v_prenom As String = ""
Private v_daten As Date = #12/7/2002#

Public Overridable Sub afficher()


MsgBox(Me.v_nom & " " & Me.v_prenom)
End Sub
Public Sub New()
v_nom = "toto"
v_prenom = "titi"

Microsoft Visual Basic . Net - 2005

65/135

v_daten = #12/7/2002#
v_nbpersonne = v_nbpersonne + 1
End Sub
Public Sub New(ByVal lenom As String)
v_nom = lenom
v_prenom = "titi"
v_daten = #12/7/2002#
v_nbpersonne = v_nbpersonne + 1
End Sub
Public Sub New(ByVal lenom As String, ByVal leprenom As String)
v_nom = lenom
v_prenom = leprenom
v_daten = #12/7/2002#
v_nbpersonne = v_nbpersonne + 1
End Sub
Public Sub New(ByVal lenom As String, ByVal leprenom As String, ByVal ladaten As
Date)
v_nom = lenom
v_prenom = leprenom
v_daten = ladaten
v_nbpersonne = v_nbpersonne + 1
End Sub
Protected Overrides Sub finalize()
MsgBox("Destruction de l'objet personne")
End Sub
Public Property nom() As String
Get
Return v_nom
End Get
Set(ByVal Value As String)
v_nom = Value
End Set
End Property
Public Property prenom() As String
Get
Return v_prenom
End Get
Set(ByVal Value As String)
v_prenom = Value
End Set
End Property
Public Property daten() As String
Get

Microsoft Visual Basic . Net - 2005

66/135

Return v_daten
End Get
Set(ByVal Value As String)
v_daten = Value
End Set
End Property
End Class
5.10.2 Classe Cadre
Public Class cadre
Inherits personne
Private v_salaire As Double
Private v_montant_prime As Double
Public Event depassement_plafond_prime(ByVal montant As Double)
Public Property montant_prime() As Double
Get
Return v_montant_prime
End Get
Set(ByVal Value As Double)
v_montant_prime = Value
If v_montant_prime > 10000 Then
RaiseEvent depassement_plafond_prime(v_montant_prime)
End If
End Set
End Property

Public Property salaire() As Double


Get
Return v_salaire
End Get
Set(ByVal Value As Double)
v_salaire = Value
End Set
End Property
Public Sub New()
MyBase.New("tyty", "marine")
Me.salaire = 0
Me.montant_prime = 0
End Sub
Overrides Sub afficher()

Microsoft Visual Basic . Net - 2005

67/135

MsgBox(Me.salaire)
End Sub
End Class

6 Applications Windows
Le FrameWork Visual Basic .Net permet la cration de formulaires Windows afin
dtablir des interfaces graphiques entre lutilisateur et le code. Ces formulaires sont des
fentre qui contiendront des contrles (Champs texte, boutons, liste droulantes .).

6.1 Les formulaires


les formulaires sont les lments de base des applications graphiques Windows.
6.1.1 Diffrents types
Il existe 2 solutions pour la cration de formulaires sous le FrameWork .Net :
6.1.1.1 Windows Forms
Ce sont les formulaires dont disposait Visual basic 6. Les applications bases sur ces
formulaires sont utiliss pour le dveloppement dapplications pour lesquelles la plupart des
traitements se font sur la machine cliente et qui ont besoin daccder aux ressources de la
machine (fichiers, lecteurs, imprimantes ).
6.1.1.2 Web forms
Les applications base de Web Forms sont destins tre utilises sur le Web par le
biais dun navigateur. Ce genre dapplication prsente plusieurs avantages comme un
dploiement facile dans le sens o seul les composants du navigateur doivent tre installs,
une maintenance simplifie car le programme est stock sur le serveur et, enfin, les
applications dveloppes sont indpendantes de toutes plateformes dans le sens o elles
nutilisent que les ressources du navigateur.

6.1.1.3 Modes de prsentation


En fonction de lapplication raliser, plusieurs modes de prsentation des feuilles
peuvent tre utiliss :

Mono document : Ce genre dapplication appele SDI (Single Document Interface) ne


permet laffichage que dune fentre la fois. Loutil Paint en est un bon exemple.

Multi document : Les applications MDI (Multiple Document Interface) sont


constitues dune fentre principale (Fentre mre) contenant son tour plusieurs
documents (fentre fille). Microsoft Word est une application MDI.

Microsoft Visual Basic . Net - 2005

68/135

Explorateur : Cest le mode de prsentation le plus utilis. Il permet un affichage


hirarchique des menus sur la partie gauche et laffichage des lments sous forme de
liste sur la partie droite. Loutil Gestion de lordinateur sous Windows 2000 en est
un exemple.

6.1.2 Membres de la classe Form


Nous lavons vu au chapitre 4, un formulaire sa cration contient dj plusieurs
lignes de code. Maintenant que nous connaissons la programmation oriente objet ainsi que
ces concepts, voyons dun peu plus prs son contenu :
Hritage de la classe system.windows.forms.form
Inherits System.Windows.Forms.Form

Dfinition du constructeur new avec notamment lappel du constructeur de


MyBase (donc de windows.forms)

Public Sub New()


MyBase.New()
InitializeComponent()
End Sub

Surcharge de mthode Dispose afin de nettoyer les composants ajouts par


lutilisateur

Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)


If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

Ajout de la proprit components donnant au formulaire toutes les caractristiques


pour ensuite contenir des contrles

Private components As System.ComponentModel.IContainer

Dfinition des Objets plac sur le formulaire. (remarquez le mot cl withevents


permettant la gestion des vnements). Dans cet exemple, llment ajout est un
champs texte.

Friend WithEvents TextBox1 As System.Windows.Forms.TextBox

Ajout de la mthode InitializeComponent dont le rle est dinitialiser les


diffrentes proprits du formulaire et des contrles. Dans lexemple suivant, nous
avons rajout un champs texte.

Microsoft Visual Basic . Net - 2005

69/135

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()


Me.TextBox1 = New System.Windows.Forms.TextBox
Me.SuspendLayout()
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(112, 72)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(128, 20)
Me.TextBox1.TabIndex = 0
Me.TextBox1.Text = "toto"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(292, 273)
Me.Controls.Add(Me.TextBox1)
Me.Name = "Form1"
Me.Text = "Form1"
Me.ResumeLayout(False)
End Sub
6.1.2.1 Proprits

AcceptButton

Lorsque lutilisateur appuie sur la touche entre, la mthode lie lvnement click
du bouton dacceptation sera automatiquement dclenche. Gnralement, cest le bouton
ok ou sauvegard qui est paramtr comme AcceptButton.

AllowDrop

Spcifie si le formulaire gre le Drag and Drop (Glisser dpos).

AutoScale

Si cette option est active, la taille des contrles et du formulaire sont automatiquement
redimensionns lors dun changement dynamique de la police dcran.

AutoScroll

Loption AutoScroll est une nouveaut de la version .Net : elle permet de placer
automatiquement des barres de dfilement lorsque la taille du formulaire ne permet pas
laffichage de tous les contrles quil contient.

Microsoft Visual Basic . Net - 2005

70/135

Avec AutoScroll

Sans AutoScroll

BackColor

La proprit backColor dfinit la couleur de fond du formulaire.

BackgroundImage

Il est possible de dfinir une image comme fond pour le formulaire. Limage sera
automatiquement rpte en mosaique.

CancelButton

Le bouton dannulation ralise lopration inverse du bouton dacceptation. Il permet


dclencher lvnement click dun bouton du formulaire lorsque lutilisateur appuie sur
touche escape.

ControlBox

La proprit ControlBox dfinit si le menu systme apparat au niveau de la barre de titre


du formulaire :

Le menu systme peut galement tre modifi avec les proprits MinimizeBox ,
MaximizeBox et HelpButton .

Cursor

Dfinit lapparence par dfaut du curseur sur le formulaire. Cette option peut galement
tre paramtre au niveau des contrles.

Microsoft Visual Basic . Net - 2005

71/135

Les diffrentes valeurs sont disponibles dans la classe


System.Windows.Forms.Cursors

Enabled

Dfinit si le formulaire est disponible (True) ou non (False). Dans ce dernier cas, aucun
des contrles et menus du formulaires ne seront accessibles (griss).

Font

Cette proprit dfinit les paramtres de formatage du texte. Cette proprit sera
automatiquement applique par dfaut au texte des diffrents contrles. Cette proprit est
elle mme dcompose en plusieurs autres proprits :
Proprit
Name
Size
Unit

Bold
GdiXXXX
Italic
Strikeout
Underline

Description
Nom de la police utilise
Taille de la police
Unit de mesure pour la police (Sachez que
la plupart des logiciels utilisent lunit
point )
Texte en gras
Paramtres sur le jeu de caractre utilis
Texte en italique
Texte barr
Texte soulign

Exemple
Garamond
12.5
Point

True
True
False
True

ForeColor

Couleur daffichage par dfaut pour les textes et graphismes du formulaire.

FormBorderStyle

Style de bordure du formulaire :


Valeur

Apparence

None

Microsoft Visual Basic . Net - 2005

Dimensionnable
Non

72/135

FixedSingle

Non

Fixed3d

Non

FixedDialog

Non

Sizable

Oui

FixeToolWindow

Non

SizableToolWindow

Oui

HelpButton

Affiche le bouton daide gauche de la barre de titre. Attention, le bouton ne sera pas
affich si les boutons min et max sont activs.

Pour dclencher un bloc dinstruction lorsque lutilisateur demande laide (Soit partir de
la touche F1, soit partir du bouton daide, vous devez crer une mthode implmentant
lvnement :

Microsoft Visual Basic . Net - 2005

73/135

Private sub nom_mthode (ByVal sender As Object, ByVal hlpevent As


System.Windows.Forms.HelpEventArgs) Handles objet.HelpRequested
Le code suivant permet dafficher une boite de dialogue lorsque lutilisateur demande
laide sur le champs texte text1 qui doit tre dclar avec le mot cl WithEvents . La
procdure suivante implmente lvnement :
Private Sub textBox_HelpRequested(ByVal sender As Object, ByVal hlpevent As
System.Windows.Forms.HelpEventArgs) Handles TextBox1.HelpRequested
converti le paramtre pass en control
Dim requestingControl As Control = CType(sender, Control)
affiche le nom du controle
MsgBox(CStr(requestingControl.name))
valide la gestion de lvnement
hlpevent.Handled = True
End Sub
Lobjet sender pass en paramtre rfrence lobjet lorigine de la demande daide.

Icon

Dfinit licne lie au formulaire : cette dernire apparat dans la barre de titre.

IsMDIContainer

Dtermine si le formulaire est un conteneur MDI, cest dire sil est capable de contenir
dautre fentres.

Microsoft Visual Basic . Net - 2005

74/135

Dans le cas dun formulaire MDI, vous devez spcifier le code afin dafficher dautres
formulaires lintrieur. Le code suivant permet laffichage dun formulaire fils : dans cet
exemple, Form2 est le formulaire MDI, Form1 et Form3 sont les formulaires enfant. Il faut
galement paramtr loption IsMdiContainer du Form2 True.
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim f1 As New Form1
Dim f2 As New Form3
f1.MdiParent = Me
f1.Show()
f2.MdiParent = Me
f2.Show()
End Sub

Location

Cette objet dfini la position du formulaire par rapport son conteneur (cest dire lcran
ou le formulaire parent dans le cas dapplication MDI). Deux proprits permettent de dfinir
la position :



X : distance entre le bord gauche du conteneur et le bord gauche du formulaire


Y : distance entre le haut du conteneur et le haut du formulaire

Locked

Dtermine si le formulaire est verrouill ou non : cette proprit est identique


enabled mais elle ne grise pas lapparence du formulaire.

Microsoft Visual Basic . Net - 2005

75/135

MinimizeBox, MaximizeBox
Dtermine si les boutons Agrandir et Rduire sont visibles. Leur affichage
empchera laffichage du bouton daide.

MinimumSize, MaximumSize

Cet objet dfinit la taille minimale et maximale que peut avoir le formulaire. Cet objet est
gnralement utilis pour viter que lutilisateur rduise la fentre au point de ne plus avoir
accs aux contrles. Pour chaque objet, deux proprit sont disponibles : width (largeur) et
height (hauteur).

Opacity

Dfinit un pourcentage dopacit pour la fentre. Une valeur de 100% rend la fentre opaque.

(Exemple avec 65%)

ShowInTaskBar

Dtermine si un nouveau bouton est ajout dans la barre des tches lorsque la fentre est
ouverte :

Size

Cet objet dfinit la taille du formulaire laide de deux proprits : width (largeur) et
height (hauteur).

Startposition

Dfinit la position de dpart lorsque la fentre est ouverte :

Microsoft Visual Basic . Net - 2005

76/135

Valeur
Manual
CenterScreen
WindowsDefaultlocation
WindowsDefaultBounds
Centerparent

Description
Position dfinie par la proprit location
Centr par rapport lcran
Situ lemplacement par dfaut de Windows et possde la taille
dfinie dans size
Situ lemplacement par dfaut de Windows et possde la taille
par dfaut de Windows
Centr par rapport la fentre ayant dclench louverture.

Text

Dtermine le texte affich dans la barre de titre

TopMost

Si cette option est active (true) le formulaire sera toujours au dessus de tous les autres
formulaires, mme sil nest pas activ. Cette option se prte particulirement bien pour les
botes outils qui doivent toujours rester accessibles.

TransparencyKey

Du meilleur effet, cette proprit dfinit la couleur de transparence du formulaire : si vous


spcifiez la couleur jaune en tant que TransparencyKey, toutes les zones du formulaire jaune
seront transparentes :

WindowState

Dtermine ltat du formulaire lors de louverture :


Valeur
Normal
Minimize
Maximize

Description
Le formulaire apparat avec sa taille standard
Le formulaire est rduit lors de louverture
Le formulaire est en plein cran lors de louverture

Microsoft Visual Basic . Net - 2005

77/135

6.1.2.2 Mthodes

Activate

La mthode activate permet de mettre le formulaire au premier plan et de lui donner le focus.

Close

Ferme le formulaire

ShowDialog

Affiche le formulaire en tant que feuille modale, cest dire quau niveau de lapplication,
la fentre restera au premier plan tant quelle nest pas ferme.

6.1.2.2 Evnements
Les vnements correspondent au cycle de vie de lobjet formulaire. Ils sont lists dans
lordre chronologique.

New

Lobjet formulaire est en cours de cration

Load

Le formulaire ainsi que ses composants sont chargs mais il nest pas visible.

Paint

Se produit lorsque le formulaire est redessin. Cet vnement peut apparatre plusieurs
fois : par exemple au dmarrage et lorsque le formulaire rapparait devant un autre.

Activated

Le formulaire rcupre le focus.

Deactivate

Le formulaire perd le focus

Closing

Le formulaire est en cours de fermeture, les diffrents lments le composant sont dtruits.
Le formulaire est cependant encore visible.

Closed

Microsoft Visual Basic . Net - 2005

78/135

Le formulaire est ferm et maintenant invisible.

Dispose

Lobjet formulaire est dtruit.

Resize

Cet vnement survient lorsque le formulaire est redimensionn. Gnralement utilis


pour modifier la taille des contrles le composant.

Click

Lutilisateur clique sur le fond du formulaire

DoubleClick

Lutilisateur double clique sur le fond du formulaire


6.1.3 Botes de dialogue
Si vous observez les diffrentes applications tournant sous windows, vous vous
apercevrez quelles utilisent toutes les mme botes de dialogue standard (Enregistrer, Ouvrir
Imprimer ). Visual Basic permet lutilisation de ces bote de dialogue standard.
6.1.3.1 Ouverture
La bote de dialogue douverture permet la slection dun ou plusieurs fichiers
physiques. La classe OpenFileDialog permet la gestion de cette bote de dialogue.

Proprit
InitialDirectory
Title
Filter
DefaultExt
AddExtension

Description
Dossier initial
Titre de la bote
Extension des fichiers accepts
Extension par dfaut
Boolen indiquant si lextension par
dfaut doit tre automatiquement ajoute

Valeur
C:\winnt
Slection du fichier
tous|*.*|Fichier texte|*.txt
gif
True

Microsoft Visual Basic . Net - 2005

79/135

MultiSelect
CheckFileExist
FileName
FileNames

la fin du fichier lors de lenregistrement


Permet la slection de plusieurs fichiers True
Vrifie lexistence du fichier
True
Chemin du fichier slectionn
Chemin des fichiers selectionns
Mthode

ShowDialog

Description
Affiche la fentre

Le code suivant paramtre la bote de dialogue en acceptant uniquement les fichiers


images (gif ou jpg). La slection multiple est autorise et la liste des fichiers est affiche la
fin.
Dim dlg As OpenFileDialog
dlg = New OpenFileDialog
'paramtrage de la bote
dlg.Title = "Veuillez slectionner l'image"
dlg.DefaultExt = "gif"
dlg.Filter = "Image gif|*.gif|Image Jpeg|*.jpg"
dlg.Multiselect = True
dlg.CheckFileExists = True
'affichage de la boite
dlg.ShowDialog()
'affichage des fichiers selectionns
Dim fichier As String
For Each fichier In dlg.FileNames
MsgBox(fichier)
Next

6.1.3.2 Enregistrement
La bote de dialogue denregistrement est identique la bote de dialogue douverture
excepte la proprit Mthode qui disparat. Pour ouvrir une bote denregistrement,
utiliser la classe SaveFileDialog .

Microsoft Visual Basic . Net - 2005

80/135

Dim dlg As SaveFileDialog


dlg = New SaveFileDialog
'paramtrage de la bote
dlg.Title = "Enregistrer le fichier"
dlg.DefaultExt = "gif"
dlg.Filter = "Image gif|*.gif|Image Jpeg|*.jpg"
'affichage de la boite
dlg.ShowDialog()
'affichage des fichiers selectionns
MsgBox("le fichier sera enregistr dans: " & dlg.FileName)

6.1.3.3 Choix dune couleur


Cette bote de dialogue permet lutilisateur de choisir une couleur dans un panel. Deux
versions de cette bote de dialogue existent :

Version simple

Version complte

Microsoft Visual Basic . Net - 2005

81/135

Dans les deux cas, vous devez utiliser la classe ColorDialog .


Proprit
Color
Fullopen
SolidColorOnly

Description
Dfinit la couleur par dfaut affiche et retourne la couleur slectionne
par lutilisateur
Boolen dfinissant si la bote de dialogue saffiche en mode complet ou
non
Boolen naffichant que les couleurs gres par la carte graphique

Lexemple suivant affiche une bote de dialogue et modifie la couleur de fond du


formulaire en fonction du choix de lutilisateur :
Dim c As New ColorDialog
c.FullOpen = False
c.Color = Me.BackColor
c.ShowDialog()
Me.BackColor = c.Color

6.1.3.4 Choix dune police


Cette bote de dialogue permet la slection de tous les paramtres concernant le
formatage de chane de caractre (police, taille, gras).

Proprit

Description

Microsoft Visual Basic . Net - 2005

82/135

ShowEffects

Boolen spcifiant si lutilisateur peut dfinir les effets (gras


)
Boolen spcifiant si lutilisateur peut dfinir la couleur
Taille minimale des caractres
Taille maximale des caractres
Police par dfaut et police retourne
Couleur par dfaut et couleur retourne

ShowColor
MinSize
MaxSize
Font
Color

Pour afficher la bote de dialogue, utiliser la mthode ShowDialog .

6.2 Les contrles


Les contrles permettent de crer linterface entre lutilisateur et notre application.
Cest via les contrles que lutilisateur pourra saisir des donnes, effectuer des slection et
dclencher des actions par lintermdiaires des vnements.
De manire gnrale, les contrles sont des objets graphiques, cest dire quil seront
placs et visibles sur le formulaire. Cependant, certains contrles offrant des fonctionnalits
de programmation napparatront pas sur le formulaire mais dans une zone situe en bas et
uniquement en mode Design .

Contrle graphique

Contrle masqu

6.2.1 Membres communs


Les contrles Visual Basic .Net sont des classes issues de la classe de base control .
Cette dernire assure les fonctions lmentaires comme le placement sur une feuille, leur
position A cette classe est ajoute une classe drive permettant la personnalisation des
diffrents contrles.

6.2.1.1 proprits

Name

Nom du contrle. Ce nom ne comporter que des lettres et le caractre underscore _ .

Microsoft Visual Basic . Net - 2005

83/135

Anchor

Les ancres permettent de modifier automatiquement la taille dun contrle lors du


redimensionnement dun formulaire. Chaque contrle possde sa propre ancre.
Lors du paramtrage, vous devez dfinir sur quels bords du conteneur est ancr le
contrle. Dans lexemple suivant, nous crons un contrle ancr gauche et droite :

CanFocus

Boolen spcifiant si le contrle peut recevoir le focus.

CanSelect

Boolen spcifiant si le contrle peut tre slectionn.

Dock

Dans le mme esprit, la proprit Dock permet dancrer un contrle aux un bord du
conteneur. Dans lexemple suivant, le bouton est ancr en bas :

Microsoft Visual Basic . Net - 2005

84/135

Enabled

Cette proprit est une valeur boolenne spcifiant si le contrle est accessible ou non.
Dans le second cas, le contrle apparatra gris.

Location

La proprit Location est un objet permettant de dfinir lemplacement du contrle par


rapport son conteneur. Il est compos de deux proprits (X et Y) qui dfinissent ses
coordonnes par rapport au coin suprieur gauche du conteneur.

Locked

Contrairement la version prcdente, cette proprit ne bloque pas le contrle lors de


lexcution mais lors de la conception. Il permet dviter de modifier les proprits dun
contrle.

Modifiers

Cette proprit paramtre la visibilit au niveau programmation de lobjet. Elle peut prendre
les valeurs suivantes :
Valeur
Public
Protected
Protected Friend
Friend
Private

Description
Accessible partir de tous les lments de la solution
Accessible partir des membres de la classe et des sous classes
Correspond lunion des visibilits Friend et Protected
Accessible partir du programme et des assemblages lis
Accessible partir des membres de la classe

Par dfaut, la visibilit est friend.

Size

Cet objet permet de dfinir la taille du contrle. Il est compos de deux proprits, width
(largeur) et height (hauteur).

TabIndex

Indice dfinissant lordre de tabulation du contrle par rapport son conteneur.

Text

Cet proprit rfrence le texte contenu ou affich dans un contrle (Par exemple, le texte
affich sur un bouton).

Visible

Microsoft Visual Basic . Net - 2005

85/135

Cet proprit dtermine si le contrle est visible lors de lexcution. Attention, aucun
changement nest visible lors de la conception.
6.2.1.2 Mthodes

Mthode
Focus

Description
Donne le focus au contrle

6.2.1.3 Evnements
Evnements
Click
DoubleClick
Enter
GotFocus
KeyDown
KeyPress
KeyUp
LostFocus
MouseDown
MouseUp
MouseMove
MouseWheel
Resize

Description
Activ lors du clic sur le contrle
Activ lors du double clic sur le contrle
Activ lorsque lutilisateur entre sur le contrle
Activ lorsque le contrle reoit le focus
Touche enfonce
Touche enfonce et relache
Touche relache
Activ lorsque le contrle perd le focus
Bouton souris enfonc
Bouton souris relach
Souris dplace sur le contrle
Dplacement de la roulette
Dclench lorsque le contrle est redimensionn

6.2.2 Principaux Contrles


Nous ne listerons dans cette partie que les principaux contrles.
6.2.2.1 TextBox
Le contrle TextBox est certainement le contrle le plus utilis : il permet de saisir des
chanes de caractre de 2000 32 000 caractres en fonction de la configuration.

Proprit
CanFocus
CharacterCasing
Focused
ForeColor

Description
Dtermine si le contrle peut recevoir le focus
Dtermine la casse du texte : majuscules (upper) ou minuscules
(lower)
Indique si le contrle dtient le focus
Couleur du texte

Microsoft Visual Basic . Net - 2005

86/135

HideSelection
Lines
MaxLength
Modified
MultiLine
PasswordChar
Readonly
Scrollbars
Selectionlength
SelectionStart
Text
TextLength

Dfinit si le contrle masque la slection lorsquil perd le focus


Tableau correspondant aux lignes du contrle
Nombre de caractres maximum du contrle
Spcifie si le contenu du champs a t modifi depuis sa cration
Dfinit si le contrle est multi lignes
Dfinit le caractre servant masquer un mot de passe
Contenu du champs en lecture seule
Affiche ou masque les barres de dfilement
Longueur de la slection
Indice de dbut de la slection dans le champs
Contenu du champs
Longueur du texte dans le contrle

Mthode
Clear
Copy / Cut
Focus
ResetText

Description
Efface le contenu du champs texte
Copie / coupe la slection dans le presse papier
Donne le focus au contrle
Rtabli la valeur initiale du champs

Evnement
TextChanged

Description
Dclench lorsque le texte change

Lexemple suivant permet de copier dans le presse papier tout le texte contenu dans le
champs textbox1 et de vider ce dernier lorsquil reoit le focus.
Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs)
Handles TextBox1.GotFocus
With Me.TextBox1
.SelectionStart = 0
.SelectionLength = .TextLength
.Copy()
.Text = ""
End With
End Sub
6.2.2.2 Label
Le contrle label est utilis pour afficher du texte qui ne sera pas ditable par
lutilisateur. Il est gnralement utilis pour afficher le rle des diffrents contrles.

Proprit
BorderStyle
AutoSize
Text

Description
Style de bordure
Le contrle sadapte la taille du texte
Contenu du label

Microsoft Visual Basic . Net - 2005

87/135

Lexemple suivant affiche successivement Bonjour en gras et Au revoir en


rouge lorsque lutilisateur double clic sur le contrle label1 :
Private Sub Label1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Label1.DoubleClick
With Me.Label1
If .Text = "Bonjour" Then
.Text = "Au revoir"
.Font = New Font(.Font, FontStyle.Regular)
.ForeColor = System.Drawing.Color.Red
Else
.Text = "Bonjour"
.Font = New Font(.Font, FontStyle.Bold)
.ForeColor = System.Drawing.Color.Black
End If
End With
End Sub
6.2.2.3 CheckBox
Le contrle Checkbox (Case cocher) est utilis pour proposer plusieurs options
lutilisateur parmi lesquelles il pourra effectuer plusieurs choix.

Proprit
Checked
CheckState
ThreeState

CheckAlign
Text
Evnement
CheckedChanged
CheckStateChanged

Description
Valeur boolenne indiquant si la case est coche ou non
Retourne ou modifie la valeur de la case cocher en grant le 3me
mode (gris).
En standard, une case coche peut tre coche ou non. Il existe
cependant un 3me tat Indtermin permettant de gris la case.
Cette proprit permet dactiver ce 3me tat.
Alignement de la case cocher par rapport au contrle
Texte associ au contrle
Description
Se produit lorsque la proprit Checked change
Se produit lorsque la proprit CheckState change

Lexemple suivant comporte 3 cases cocher (pour une slection doptions voiture) :
- ch1 libelle Dcapotable
- ch2 libelle Toit ouvrant
- ch3 libelle Ailerons

Microsoft Visual Basic . Net - 2005

88/135

Pour des raisons logiques, il nest pas possible de choisir ch2 et ch3 si ch1 est slectionn.
Le code suivant permet de dcocher et griser les cases.
Private Sub ch1_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ch1.CheckedChanged
If Me.ch1.CheckState = CheckState.Checked Then
Me.ch2.Checked = False
Me.ch3.Checked = False
Me.ch2.Enabled = False
Me.ch3.Enabled = False
Else
Me.ch2.Enabled = True
Me.ch3.Enabled = True
End If
End Sub
Private Sub ch2_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ch2.CheckedChanged
If Not Me.ch2.Checked = True Then Me.ch1.CheckState = CheckState.Unchecked
If Not Me.ch2.Enabled Then Me.ch2.Enabled = True
If Not Me.ch3.Enabled Then Me.ch3.Enabled = True
End Sub
Private Sub ch3_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles ch3.CheckedChanged
If Not Me.ch3.Checked = True Then Me.ch1.CheckState = CheckState.Unchecked
If Not Me.ch2.Enabled Then Me.ch2.Enabled = True
If Not Me.ch3.Enabled Then Me.ch3.Enabled = True
End Sub
6.2.2.4 RadioButton
Contrairement aux cases cocher, les boutons radio permettent lutilisateur
deffectuer un seul choix parmi plusieurs options. Cette dernire contrainte impose donc quil
ny ait jamais deux boutons cochs en mme temps : Visual basic soccupe de faire basculer
ltat des boutons pour les boutons prsents dans le mme conteneur. Dans lexemple suivant,
cest le formulaire qui est conteneur. Nous verrons plus loin les conteneurs GroupBox et
Panel .

Les boutons radios possdent les mme proprits et vnements que les cases cocher.

Microsoft Visual Basic . Net - 2005

89/135

Lexemple suivant travaille avec 3 boutons radio (rad_blue, rad_red, rad_black) qui
modifie la couleur de fond du formulaire en fonction de celui slectionn. Notez quune seule
procdure est utilise pour implmenter les lvnement CheckedChanged de chaque
bouton radio.
Private Sub rad_CheckedChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles rad_blue.CheckedChanged, rad_black.CheckedChanged,
rad_red.CheckedChanged
If Me.rad_black.Checked Then
Me.BackColor = System.Drawing.Color.Black
ElseIf Me.rad_blue.Checked Then
Me.BackColor = System.Drawing.Color.Blue
Else
Me.BackColor = System.Drawing.Color.Red
End If
End Sub
6.2.2.5 GroupBox et Panel
Au mme titre quun formulaire, les contrles GroupBox et Panel sont des conteneurs,
cest dire quil contiennent eux mme dautres contrles. Ces contrles prsentent deux
intrts majeurs :

Regrouper de manire logique des contrles afin de les isoler (pour les boutons radio
par exemple)
Faciliter le placement de plusieurs contrles car en modifiant la position du conteneur,
vous modifiez la position de tous les contrles contenus

Le GroupBox

Ce contrle possde une seule proprit particulire text qui correspond au texte affich.

Le Panel

Microsoft Visual Basic . Net - 2005

90/135

Le contrle panel reprend les fonctionnalits du contrle GroupBox avec en plus la possibilit
de grer les barres de dfilement (proprit AutoScroll).
6.2.2.6 Button
Le contrle button est principalement utilis pour dclencher une action lors du clic.
6.2.2.7 ListBox
Le contrle ListBox permet laffichage dune liste de choix, gnralement des chanes
de caractres, dans laquelle lutilisateur pour effectuer un ou plusieurs choix.
Proprit
MultiColumn
Integralheight
Items
Sorted
Itemheight
SelectedIndex
SelectedIndices
SelectionMode

Description
Permet un dfilement horizontal de la liste
Evite laffichage dune partie dun lment de la liste
Collection reprsentant les lments contenus dans la liste
Elments classs par dans lordre
Hauteur dun lment de la liste
Indice de llment slectionn
Indices des lments slectionns
Mode de slection des lments ( MultiExtended permet une
slection multiple, One permet une seule slection et None
aucune.

Mthode
FindString
SetSelected
GetSelected

Description
Retourne lindice de llment commenant par le texte recherch
Dfinit un lment en tant que slectionn ou non
Retourne un boolen permettant de savoir si un lment est slectionn
ou non

Evnement
Description
SelectedIndexChange Dclench lorsque la proprit SelectedIndex change
Lexemple suivant remplit un ListBox laide dune boucle.
Dim i As Int16
Me.ListBox1.Items.Clear()
For i = 1 To 50
Me.ListBox1.Items.Add("Element no " & i)

Microsoft Visual Basic . Net - 2005

91/135

Next
Celui ci affiche llment slectionn lors dun double clic sur le ListBox.
Private Sub ListBox1_DoubleClick(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ListBox1.DoubleClick
Dim elt As String
Dim indice As Int16
indice = Me.ListBox1.SelectedIndex
elt = Me.ListBox1.Items(indice)
MsgBox("Elment slectionn: " & elt)
End Sub
Enfin, le code permettant dafficher la liste des lments slectionns :
Dim elt As String
For Each elt In Me.ListBox1.SelectedItems
MsgBox("Libell: " & elt)
Next
6.2.2.8 ComboBox
Le contrle ComboBox est lassociation du contrle listBox et TextBox : il permet
lutilisateur de slectionner une valeur dans une liste ou de saisir une nouvelle valeur.
Cependant, ce contrle naccepte pas les slections multiples.

6.2.2.9 Splitter
Le contrle Splitter est une nouveaut de la version .Net. Il permet de crer des
barres de sparation redimensionnables pour distribuer lespace du formulaire entre les
diffrents contrles. Splitter est particulirement utilis dans les interfaces de type
explorateur .

Plutt quun long discours, ci-dessous figure le mode opratoire afin de raliser
linterface montre en exemple.

Placer le contrle liste et paramtrer la proprit Dock left


Placer le contrle splitter droite de la liste et paramtrer sa proprit dock
left

Microsoft Visual Basic . Net - 2005

92/135

Placer le contrle image droite et paramtrer la proprit Dock top


Placer le second splitter en dessous de limage et paramtrer la proprit Dock
top
Enfin, placer le contrle bouton en dessous et paramtrer la proprit Dock
fill

Proprit
MinSize
MinExtra

Description

6.2.2.10 ImageList
Le contrle ImageList est un conteneur dimages destines tre utilise dans
lapplication ou alors par dautre contrles (Listview, TreeView ). Ce contrle nest pas
visible sur le formulaire et peut contenir tous types dimages (Gif, Jper, Bmp ).
Proprit
ColorDepth
ImageSize
Transparent
Images

Description
Nombre de couleurs utiliser pour les images
Taille en pixels des images
Dfinit la couleur de transparence
Collection contenant les images

Chacune des images possde un Index qui sera ensuite utilis pour les lier aux autres
contrles. La gestion des images se fait laide dun assistant :

Le code suivant permet dajouter une image dans un Imagelist partir dun fichier physique et
la supprimer du contrle :
Dim chemin as string
Chemin = C:\mes documents\toto.gif
Me.Imagelist1.images.add(Image.fromfile(chemin))
Me.Imagelist1.images.RemoveAt(0)

Microsoft Visual Basic . Net - 2005

93/135

6.2.2.11 Treeview
Le contrle TreeView permet un affichage hirarchique des donnes la faon de
lexplorateur Windows. Chaque lment du treeview est un nud pouvant son tour contenir
dautres nuds.

Pour remplir le Treeview, vous pouvez utiliser les mthodes lies au contrle ou
utiliser lassistant fourni par le framework. Pour louvrir, utiliser le bouton situ droite de la
proprit Nodes :

Ajouter une racine : Ajoute un lment la racine (Employs par exemple)


Ajouter un enfant : Ajoute un nud enfant au nud slectionn
Etiquette : Texte affich au niveau de llment slectionn
Image : Image du contrle imagelist li.
Image slectionne : Image affiche lorsque llment est slectionn

Proprit
CheckBoxes
FullrowSelect
ImageIndex
ImageList

Description
Afficher les cases cocher au niveau des lments
La surbrillance stend sur toute la largeur du contrle
Indice de limage par dfaut du contrle ImageList
Contrle ImageList contenant les images utilises par le treeview

Microsoft Visual Basic . Net - 2005

94/135

Indent
LabelEdit
Nodes
SelectedImageIndex
ShowPlusMinus
Sorted
Mthode
Nodes.add

Valeur en pixel de lindentation


Permet lutilisateur de modifier ltiquette
Collection de nuds
Indice de limage par dfaut pour les lments slectionns
Affiche les signes + et devant les nuds parents
Indique si les nuds sont tris
Description
Ajoute un lment

Le code suivant remplit un ImageList, insre lintrieur du TreeView 2 catgories


principales (Renault & Peugeot) et place ensuite lintrieur les diffrents modle en leur
affectant des images :
Me.ImageList1.Images.Add(Image.FromFile("C:\peugeot.jpg"))
Me.ImageList1.Images.Add(Image.FromFile("C:\renaud.bmp"))
Me.TreeView1.ImageList = Me.ImageList1
Me.TreeView1.ImageIndex = 0
Dim noeud1, noeud2 As TreeNode
noeud1 = New TreeNode
noeud2 = New TreeNode
With noeud1
.Text = "Peugeot"
.ImageIndex = 0
.Nodes.Add("307")
.Nodes.Add("806")
.Nodes.Add("309")
End With
With noeud2
.Text = "Renault"
.ImageIndex = 1
.Nodes.Add("Mgane")
.Nodes.Add("4L")
.Nodes.Add("Laguna")
End With
With Me.TreeView1
.Nodes.Add(noeud1)
.Nodes.Add(noeud2)
End With
6.2.2.12 ListView
Le contrle listview permet laffichage dune liste plate selon les 4 modes de
prsentation de lexplorateur Windows :

Microsoft Visual Basic . Net - 2005

95/135

Au mme titre que le TreeView, le ListView possde des assistants afin de dfinir leur
contenu. Pour ouvrir lassistant permettant de grer la liste, cliquer sur le bouton droite de la
proprit Items :

Pour chaque lment, il est possible de paramtrer :

Checked : dfinit si llment apparat coch par dfaut


Font : police de llment
ForeColor : couleur daffichage du texte
ImageIndex : indice de limage lie llment
Text : libell de llment
UseItemStyleForSubitems : rpercute les proprit de llment sur les sous lments
SubItem : dans un affichage par dtail, correspond aux colonnes partir de la seconde.
Lors du clic sur le bouton correspondant cette proprit, un nouvel assistant est lanc
pour dfinir les autres colonnes.

Il existe galement un assistant pour les colonnes : pour louvrir, utiliser le bouton droite
de la proprit Columns . Celles ci napparatront que lors dun affichage au dtail.

Microsoft Visual Basic . Net - 2005

96/135

Proprit
AllowColumnReorder
AutoArrange
Columns
FullrowSelect
HeaderStyle
Items
LabelEdit
LargeImageList
MultiSelect
SmallImageList
Sorting
View

Description
Autorise ou non la modification de lordre des colonnes
Organise automatiquement la prsentation des lments
Collection de colonnes
La surbrillance stend sur toute la largeur du contrle
Style des entte de colonne
Collection dlments
Permet lutilisateur de modifier ltiquette des lments
ImageList utilis pour la prsentation LargeIcon
Permet la slection multiple
ImageList utilis pour toutes les prsentation (sauf LargeIcon)
Mode de tri
Mode de reprsentation de la liste

Le code suivant affiche pour chaque caractre son code ascii, le caractre en
minuscule et le caractre en majuscule. Il cre galement les colonnes :
Dim elt As ListViewItem
Dim i As Byte
With Me.ListView1
.View = View.Details
.Columns.Add("Ascii", 50, HorizontalAlignment.Center)
.Columns.Add("Min", 50, HorizontalAlignment.Center)
.Columns.Add("Maj", 50, HorizontalAlignment.Center)
For i = 0 To 255
elt = New ListViewItem
elt.Text = CType(i, String)
elt.SubItems.Add(LCase(Chr(i)))
elt.SubItems.Add(UCase(Chr(i)))
Me.ListView1.Items.Add(elt)
Next

Microsoft Visual Basic . Net - 2005

97/135

End With
6.2.2.13 TabControl
Le contrle TabControl permet laffichage donglet contenant chacun plusieurs
contrles. Ce dernier est gnralement utilis pour regrouper logiquement des contrle ou
pour placer beaucoup de contrles dans la mme formulaire.

TabControl possde galement un assistant permettant de le configurer. Pour ouvrir


lassistant, utiliser le bouton droite de la proprit TabPages :

Pour chaque page , il est possible de configurer les options dapparence qui sont
analogues celles dun formulaire.
Proprit
Alignment
HotTrack
Imagelist
Multiline
TabPages

Description
Dfinit la position des onglets par rapport aux pages
Modifie lapparence des onglets lorsque la souris passe dessus
ImageList li pour les icnes donglets
Permet laffichage des onglets sur plusieurs lignes
Collection de pages.
6.2.2.14 Menus

les menus permettent doffrir lutilisateur un ensemble de fonctionnalits sans pour


autant surcharger la prsentation du formulaire. Il existe 2 types de menu :

Microsoft Visual Basic . Net - 2005

98/135

Menu dapplication situ en haut du formulaire


Menu contextuel activ gnralement lors dun clic droit

Pour crer un ou plusieurs menus, vous devez ajouter votre formulaire le contrle
MainMenu . A ce moment, le contrle apparat en dessous du formulaire et un menu est
ajout. Il ny a pas dassistants particulier : pour ajouter un lment, cliquer sur les zones
Tapez ici :

Pour dfinir une barre de sparation, crer un lment avec - (tiret) en libell.
Proprit
Checked
DefaultItem
MdiList
RadioCheck
ShortCut
ShowShorcut
Text

Description
Indique si llment est coch
Dfinit llment en tant qulment par dfaut
Affiche la liste des fentres enfants dans le cas dune fentre MDI
Indique si llment est activ
Permet de dfinir un raccourci pour le menu
Affiche le raccourci
Libell du menu

6.2.2.15 DateTimePicker
Le contrle DateTimePicker associe une zone de texte et un calendrier permettant la
slection dune date.

Microsoft Visual Basic . Net - 2005

99/135

Proprit
Checked
CustomFormat
Format
MaxDate
MinDate

Description
Si activ, spcifie lorsque lutilisateur a slectionn une date
Chaine de format pour laffichage de la date slectionne
Mode daffichage de la date
Date maximale slectionnable
Date minimale slectionnable

Evnement
ValueChanged

Description
Dclench lorsque la valeur change

Il existe un second contrle pour la gestion des dates : MonthCalendar. Ce dernier


reprend les fonctionnalits du contrle DateTimePicker avec en plus la possibilit de dfinir
des jours fris ou des priodes slectionnes.
6.2.2.16 Timer
Le contrle Timer permet de dclencher un vnements intervals rguliers.
Proprit
Interval
Enabled

Description
Dfinit linterval en milliseconde. La valeur doit tre comprise entre 1
et 65536
Active ou dsactive le timer

Evnement
Tick

Description
Dclench chaque interval.

6.2.3 Le Drag and Drop


Le drag and Drop (ou Glisser Dposer) est une des fonctionnalits en terme
dergonomie qui fit le succs de Windows. Il permet de dplacer des informations (Fichiers,
Images, Texte, Objet) au sein dune mme application ou entre plusieurs en accrochant un
lment au curseur pour ensuite le dposer sur lobjet de destination (Liste, champs texte).
6.2.3.1 Dmarrer le drag and drop
Pour dmarrer le drag and drop, vous devez dtecter lorsque lutilisateur quitte un
contrle avec un bouton enfonc. Pour cela, on utilise lvnement MouseMove :
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
If e.Button = MouseButtons.Left Then

Microsoft Visual Basic . Net - 2005

100/135


End If
End Sub

Ensuite, vous activer le drag and drop en spcifiant llment dplacer ainsi que les
effets. Llment dposer est de type Object (donc ce peut tre nimporte quel lment).
Pour cela, on utilise la mthode DoDragDrop prenant deux arguments : lobjet dplacer
et les effets voulus. Les effets sont membres de la classe DragDropEffects .
Effet
All
Copy
Link
Move

Description
Les donnes sont copies, supprimes et parcourues dans la zone cible
Les donnes sont copies dans la zone de dplacement
Les donnes sont lies la cible de dplacement
Les donnes sont dplaces vers la cible de dplacement
6.2.3.3 Contrler la rception

En premier lieu, vous devez spcifier que le contrle cible peut recevoir des lments :
pour cela, paramtrez la proprit AllowDrop True .
Le contrle de la rception consiste modifier lapparence du curseur et du contrle
cible en vrifiant que llment dplac corresponde aux besoins. Pour cela, nous disposons
de plusieurs vnements (ces 3 vnements sont valides tant que lutilisateur ne lche pas le
bouton de la souris).
Evnement
DragEnter

Description
Se produit lorsque le curseur entre dans
la zone du contrle.

DragOver

Se produit tant que le curseur reste au


dessus de la zone du contrle
Se produit lorsque le curseur quitte la
zone du contrle

DragLeave

Utilisation
Utilis pour modifier lapparence
du contrle cible et du curseur et
vrifier la validit de llment
dplac

Utilis pour rtablir lapparence


du contrle cible et du curseur

Sur chacun des vnement est pass en paramtre e de type DragEventsArg


contient toutes les informations sur le dplacement :
Proprit
Data
Effect
KeyState
X, Y

Description
Correspond llment dplac
Dfini laction autorise par le contrle de destination et permet de modifier
lapparence de la souris
Permet de connatre ltat des touches Shift, Alt, Ctrl
Position du curseur sur le contrle

Pour rcuprer llment ou lobjet dplac, vous devez utiliser la mthode suivante :
e.Data.GetData(DataFormats.type_donnes)

Microsoft Visual Basic . Net - 2005

101/135

Cette mthode est utilise pour vrifier le type dobjet dplac (dans la mthode DragEnter).

6.2.3.3 Rcuprer llment


La rcupration de llment se fait lorsque lvnement DragDrop est dclench.
Ci dessous figure un exemple complet permettant de dplacer du texte dune textbox
une autre :
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As
System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
If e.Button = MouseButtons.Left Then
Me.TextBox1.DoDragDrop(Me.TextBox1.Text, DragDropEffects.Move)
End If
End Sub
Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As
System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
e.Effect = DragDropEffects.Move
Me.TextBox2.BorderStyle = BorderStyle.FixedSingle
End Sub
Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As
System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
Me.TextBox2.Text = e.Data.GetData(DataFormats.Text)
Me.TextBox2.BorderStyle = BorderStyle.FixedSingle
If CBool(e.KeyState And 32) Then
Me.TextBox1.Clear()
End If
End Sub
Private Sub TextBox2_DragLeave(ByVal sender As Object, ByVal e As
System.EventArgs) Handles TextBox2.DragLeave
Me.TextBox2.BorderStyle = BorderStyle.Fixed3D
End Sub

7 ActiveX Data Object .Net


Laccs aux donnes dans le dveloppement dapplications est une tape fondamentale
qui influera ensuite sur la rapidit et lvolutivit de votre application. Dans les versions
prcdentes de Visual Basic, il existait plusieurs mthodes daccs aux donnes en fonction
des configurations (Bases de donnes distantes ou locales, type de fichiers) : DAO, RDO,
ADO. Dans la nouvelle mouture seule la technologie ADO .Net est gard. Elle permet un
accs diffrentes sources de donnes par lintermdiaire de fournisseurs OLE DB. La grande
force de cette technologie est quelle permet une manipulation identique quelque soit la
source de donnes (en dehors des paramtres de connexion).

Microsoft Visual Basic . Net - 2005

102/135

Cette nouvelle version voit apparatre de nouvelles fonctionnalits :


Gestion des donnes en mode dconnect : les DataSet et DataAdapter permettent de
fusionner la base de donnes avec des fichiers de donnes en intgrant les
modifications effectues de chaque bord et, le cas chant, mettre en avant les conflits
Mise disposition de classe dpendante de la source de donnes afin doptimiser les
traitement et ainsi viter les couches successives
Intgration du format XML pour lchange et le rapatriement de donnes
Au final, lADO est un ensemble de classe mettant disposition les objets, mthodes et
vnements ncessaire linterfaage avec une base de donnes. Ces classes sont disponibles
dans plusieurs espaces de nom :
Espace de noms
System.Data
System.data.Common
System.Data.OleDB
System.Data.SqlClient

Description
Contient les objets ADO nappartenant pas un fournisseur
spcifique (DataSet, DataTable )
Contient les classes de base pour plusieurs objets des autres
espaces de noms
Contient les objets associs au fournisseurs OLEDB .Net
Contient les objets associs au fournisseurs Sql Server .Net

7.1 Mode connect et dconnect


Lors de lutilisation de donnes dans une application, deux modes sont opposs :
7.1.1 Mode connect
On parle de mode connect lorsque lapplication client un accs direct la source de
donnes. Dans ce cas, vous devez dans un premier vous connecter la source avant
deffectuer nimporte quelle tche. Ce mode est utilis pour les applications rsidante au
sein dune entreprise dans laquelle la base de donnes est toujours accessible.
Dans ce mode, vous utiliserez les objets suivants :

Connection : permet dtablir une connexion avec la source de donnes


Command : cet objet permet dexcuter des traitements o de modifier / lire des
donnes sur la source
DataReader : permet de parcourir un ensemble denregistrement rcupr

7.1.2 Mode dconnect


Le mode dconnect est une nouveaut de lADO .Net. Ce mode permet de travailler
sur des donnes sans avoir un accs direct et permanent la base. Il est principalement utilis
pour les applications nomades qui ne disposent pas toujours dun accs la source de
donnes comme par exemple, les portables des commerciaux dans une socit.
Dans cette configuration, le traitement des donnes se fait en 3 tapes :

Microsoft Visual Basic . Net - 2005

103/135

Rcupration des donnes partir de la source


Modification des donnes en mode dconnect
Intgration des donnes modifies la source avec, le cas chant, rsolution des
conflits (gnralement les contraintes dintgrit)

Si vous utilisez le mode dconnect, vous disposerez des objets suivants :


DataSet : jeu de donnes
DataAdapter : classe permettant la fusion entre un jeu de donnes et la source

7.2 Les fournisseurs daccs


Les fournisseurs daccs permettent la communication avec une source de donnes. En
fonction des sources de donnes, le provider sera diffrent. Il existe 3 types de Providers en
ADO.Net :
o Les fournisseurs ODBC permettant de se connecter aux sources ODBC
o Le fournisseur OLE DB (permettant de se connecter toutes les sources ayant
un provider OLE Db). Voir http://www.ableconsulting.com/MDAC/ADO/Connection/OLEDB_Providers.htm pour plus
dinformations
o Les fournisseurs natifs (Pour Sql Server ou Oracle)
Source de donnes
Microsoft Access
SQL Server
Oracle
ODBC
MySQL

Fournisseur
OLEDB
SQL
OLEDB
ODBC
OLEDB

Chaine de connexion
Microsoft.Jet.OLEDB.4.0
SQLOLEDB.1
OraOLEDB.Oracle
MSDASQL
MySQLProv

Le choix du fournisseur aura deux impacts majeurs dans le dveloppement de votre


application :
Influe sur la rapidit des traitements avec la source de donnes : lorsque que vous le
pouvez, utiliser le fournisseur ddi votre base de donnes
Utilisation des fonctionnalits propres la source : certaines fonctionnalits ne sont
accessibles que pour certains fournisseurs. Choisir un fournisseurs trop gnrique ne
vous permettra pas dexploiter compltement les fonctionnalits de votre source.

7.3 Lobjet Connection


Lobjet connection constitue la premire tape dans laccs aux donnes : elle permet
de se connecter la source et de connatre le niveau de scurit et les diffrents droits de
lutilisateur sur la source.
En fonction du type de fournisseur choisi, la cration de lobjet Connection diffrera :
Fournisseur

Classe

Microsoft Visual Basic . Net - 2005

104/135

ODBC
OLEDB
SQL Server

Odbc.OdbcConnection
OLEDB.oledbConnection
Sqlclient.SQLconnection

Lexemple suivant cre 3 connexions en fonction du fournisseur :


Dim cn_oledb As New OleDb.OleDbConnection
Dim cn_odbc As New Odbc.OdbcConnection
Dim cn_sql As New SqlClient.SqlConnection

7.3.1 Proprits
Proprit
Description
ConnectionString
Chane utilise pour la connexion
ConnectionTimeOut Dlai en seconde maximum pour ltablissement de la connexion
State
Etat de la connexion (Closed, connecting, Open, Executing, Fetching,
Broken)
Provider
Fournisseur utilis
DataSource
Emplacement de la base de donnes
La principale proprit est connectionString . Cest une chane de caractres
dfinissant les principaux attributs ncessaires la connexion. Parmi ces informations
figurent :
Le fournisseur daccs
Lemplacement de la base
Informations dauthentification
La base de donnes initiale
Lexemple suivant ouvre une connexion avec une base Microsoft Access :
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\Support\vbnet\bd2.mdb;"
cn.Open()
Select Case cn.State.ToString
Case ConnectionState.Open
MsgBox("Ouvert")
Case ConnectionState.Broken
MsgBox("Interrompue")
Case ConnectionState.Closed
MsgBox("Ferme")
Case ConnectionState.Connecting
MsgBox("En cours de connexion")
Case ConnectionState.Executing
MsgBox("En excution")
Case ConnectionState.Fetching
MsgBox("Extraction de donnes")
End Select

Microsoft Visual Basic . Net - 2005

105/135

cn.Close()
Lexemple ci-dessous ouvre une connexion avec un serveur SQL Server, spcifie un
compte SQL pour lauthentification et paramtre le timeout :
Dim cn as new SqlClient.SqlConnection
Cn.connectionString = "Provider=SQLOLEDB.1;Data Source=(local) ;User Id=sa ;Initial
Catalog =NorthWind ;Connection TimeOut=50"
Cn.open
Msgbox(cn.state)
Cn.close
Enfin, un exemple de connexion SQL Server avec authentification Windows, cest
dire que lutilisateur doit tre authentifi au niveau du domaine afin daccder aux donnes.
Dim cn as new SqlClient.SqlConnection
cn.ConnectionString = "Integrated Security=SSPI;Persist Security Info=False;Initial
Catalog=planning;Data Source=zeus;Workstation ID=OLIVIER;"
cn.Open()

cn.close
7.3.2 Mthodes
Mthode
Open
Close
BeginTransaction
CreateCommand

Description
Ouvre la connexion
Ferme la connexion et libre les ressources
Dbute une transaction avec un niveau disolation
Cre un objet Command
7.3.3 Evnements

Evnement
StateChange
InfoMessage

Description
Dclench lors du changement de la proprit State
Dclench lorsque la BD envoie un message

Lexemple suivant permet dafficher un message lorsque la connexion se ferme :


Dim WithEvents cn as new OleDb.OleDbConnection
Private sub cn_State_change(byval sender as Object, ByVal e as
System.Data.StateChangeEventArgs) handles cn.StateChange
If (e.CurrentState = ConnectionState.closed) then
MsgBox("Connexion ferme ! ")
End if
End sub

Microsoft Visual Basic . Net - 2005

106/135

7.4 Objet Command


Une fois la connexion tablie avec la source de donnes, vous devez communiquer avec cette
dernire pour grer vos traitements. Trois types de traitements peuvent tre effectus :
Requte de slection pour extraire des informations
Requte dexcution
Procdures stockes (scripts stocks sur le serveur)
Lors de la cration dun objet commande, vous devez dfinir le type dopration quil
devra raliser ainsi que la connexion laquelle il est rattach.
Proprit
Commandtext
CommandType
Connection
Transaction
CommandTimeOut
Parameters
Mthode
Cancel
ExecuteNonQuery
ExecuteReader
ExecuteScalar
CreateParameter
ExecuteXMLReader

Description
Texte SQL de la requte ou nom de la procdure stocke
Type de la commande (requte, table, procdure)
Connexion lie la commande
Objet transaction li (voir plus bas)
Nombre de seconde pour lexcution de la commande
Collection de paramtres envoyer avec la commande
Description
Annule lexcution de la commande
Excute la requte daction et retourne le nombre de ligne affectes
Excute la requte de slection et retourne un objet de type DataReader
Excute la requte et retourne la valeur scalaire (1re ligne, 1re colonne)
Cre un objet paramtre
Excute la requte de slection et retourne un objet de type XmlReader

Lexemple suivant permet de rcuprer le rsultat dune requte :


Dim com_sql As New SqlClient.SqlCommand
Dim dr_sql As SqlClient.SqlDataReader
com_sql.Connection = cn_sql
com_sql.CommandType = CommandType.Text
com_sql.CommandText = "select * from STAGIAIRE"
dr_sql = com_sql.ExecuteReader
Lexemple suivant permet de modifier les enregistrements dune table et dafficher le
nombre denregistrement modifis :
Dim com_sql As New SqlClient.SqlCommand
com_sql.Connection = cn_sql
com_sql.CommandType = CommandType.Text
com_sql.CommandText = "update STAGIAIRE set sta_nom = 'toto' where sta_num = 55"
MsgBox(com_sql.ExecuteNonQuery)

Microsoft Visual Basic . Net - 2005

107/135

Lexemple suivant permet de rcuprer le nombre de stagiaires :


Dim com_sql As New SqlClient.SqlCommand
com_sql.Connection = cn_sql
com_sql.CommandType = CommandType.Text
com_sql.CommandText = "select count(*) from STAGIAIRE"
MsgBox(com_sql.ExecuteScalar)
Lexemple suivant permet lexcution dune procdure stocke :
Dim com_sql As New SqlClient.SqlCommand
Dim dr_sql As SqlClient.SqlDataReader
com_sql.Connection = cn_sql
com_sql.CommandType = CommandType.StoredProcedure
com_sql.CommandText = "sp_who"
dr_sql = com_sql.ExecuteReader

7.5 Objet DataReader


De manire gnrale, il existe deux types de rsultat pour un objet command : soit il
retourne un seul rsultat (cest le cas lorsque vous utilisez les mthodes ExecuteScalar ou
ExecuteNonQuery), soit il retourne un ensemble denregistrements (mthode ExecuteReader).
Lobjet DataReader permet de lire (seulement en avant) les enregistrements issus
dune requte.
Proprit
FieldCount
HasRows
RecordsAffected

Description
Nombre de champs (colonne)
Dtermine si le DataReader comporte 1 ou plusieurs lignes
Nombre de ligne affecte lors dune opration en Transact SQL

Mthode
Close
Read
GetValue(i)
GetName(i)
GetType(i)

Description
Ferme le DataReader et remplit les paramtres de retour
Avance au prochain enregistrement
Retourne la valeur du champs lindice i
Retourne le nom du champs lindice i
Retourne le type du champs lindice i

Lexemple suivant affiche tous les enregistrement du datareader en sparant chaque


champs par un pipe | . Si aucun enregistrement nest retourn, un message est affich.

Dim com_sql As New SqlClient.SqlCommand


Dim dr_sql As SqlClient.SqlDataReader
com_sql.Connection = cn_sql
com_sql.CommandType = CommandType.Text

Microsoft Visual Basic . Net - 2005

108/135

com_sql.CommandText = "select * from FORMATEUR"


dr_sql = com_sql.ExecuteReader
if not dr_sql.HasRows then msgBox(Aucun enregistrement)
Dim contenu As String
Dim i As Int16
Do While dr_sql.Read
For i = 0 To dr_sql.FieldCount - 1
contenu &= dr_sql.GetValue(i)
Next
contenu &= vbCr
Loop
MsgBox(contenu)

7.6 Objet DataSet


Un DataSet regroupe un ensemble de classe, collections et objets permettant de
reproduire une source de donnes relationnelle avec des objets Tables et Relation .
Lintrt dun tel objet est de pouvoir travailler sur des donnes sans pour autant tre connect
la base ce qui permet une meilleur monter en charge des bases de donnes qui se verront
soulages dun grand nombre doprations.
La cration dun DataSet se fait par simple dclaration en spcifiant son nom.
Attention, deux DataSet ne peuvent avoir le mme nom.
Dim monds as DataSet
Monds = new DataSet("monds")
Une fois cr, vous devez lui ajouter des relations et des tables contenant elle mme
des champs.
Mthode
AcceptChanges
RefuseChanges

Description
Valide toutes les modifications effectues dans le DataSet
Refuse toutes les modifications effectues dans le DataSet

Proprits
HasChanges

Description
Retourne vrai si le DataSet contient des tables dont les
enregistrements ont t modifis, supprims, ajouts

7.6.1 Objet DataTable


Lobjet DataTable correspond une table.
Proprit
Columns
Constraints
Rows

Description
Collection des colonnes de la table
Collection des contraintes de la table
Collection des lignes de la table

Microsoft Visual Basic . Net - 2005

109/135

MinimumCapacity
CaseSensitive
PrimaryKey

Taille initiale pour les enregistrements


Mode de comparaison (Respect de la casse ou non)
Tableau de colonnes faisant parti de la cl primaire

Lexemple suivant cre un objet DataTable en spcifiant ces paramtres et le lie au


DataSet
Dim donnees As New DataSet("donnees")
Dim personne As New DataTable("personne")
personne.CaseSensitive = False
personne.MinimumCapacity = 50
donnees.Tables.Add(personne)
7.6.2 Objet DataColumn
Les objets DataColumn correspondent aux diffrentes colonnes dune table. En crant
une colonne, vous devez spcifier plusieurs informations :

Le nom de la colonne
Le type de la colonne (ci dessous figure la liste des types utilisables
Type
Boolean
Byte
Char
DateTime
Decimal
Double
Int16
Int32
Int64
SByte
Single
String
TimeSpan
UInt16
UInt32
UInt64

Description
Valeur boolene
Octets (Entier de 0 254)
Reprsente 1 caractre
Heure & Date
Dcimal
Nombre virgule flottante double prcision
Entier sign de XX Bits

Entier compris entre 127 et 128


Nombre virgule flottante
Chane de caractre
Reprsente un intervalle de temps
Entier non sign cod sur 16 bits

Les proprits de la colonne

Proprit
AllowDBNull
AutoIncrement

AutoIncrementSeed
AutoIncrementStep
Defaultvalue

Description
Autorise la valeur Null
Dfinit si la colonne est un compteur dont la valeur
sincrmente automatiquement (Attention, le champs doit
tre de type Integer )
Valeur de dpart pour lautoIncrement
Pas de lincrment
Valeur par dfaut de la colonne

Microsoft Visual Basic . Net - 2005

110/135

MaxLength
Unique

Longueur maximale pour le champs texte


Dfinit si les valeurs de la colonne doivent tre uniques

Lexemple suivant ajoute des champs la table personne en utilisant les diffrentes
proprits et spcifie la cl primaire :
Dim donnees As New DataSet("donnees")
Dim personne As New DataTable("personne")
personne.CaseSensitive = False
personne.MinimumCapacity = 50
donnees.Tables.Add(personne)
Dim col1 As New Data.DataColumn("pers_num", GetType(Integer))
col1.AutoIncrement = True
col1.AutoIncrementSeed = 1
col1.AutoIncrementStep = 1
donnees.Tables("personne").Columns.Add(col1)
donnees.Tables("personne").PrimaryKey = New DataColumn() {col1}
Dim col2 As New Data.DataColumn("pers_nom", GetType(String))
col2.Unique = True
col2.MaxLength = 255
col2.DefaultValue = "inconnu"
donnees.Tables("personne").Columns.Add(col2)
7.6.3 Objet DataRelation
Un DataSet est une reprsentation en objets dune base de donnes. Un des points
fondamental des bases de donnes est la mise en place de relation permettant ensuite de
vrifier la cohrence des donnes saisies dans plusieurs tables.
La cration dune relation se fait par rapport un DataSet en crant un objet
DataRelation et en spcifiant les champs des tables qui sont lis. Une relation concerne deux
champs. Lors de la cration de la relation, vous devez spcifier son nom, le champs cl
primaire et le champs cl trangre . Lexemple suivant cre les tables personne et
categorie et met en place une relation entre les deux :
Dim donnees As New DataSet("donnees")
'creation de la table personne et ajout des champs
Dim personne As New DataTable("personne")
personne.CaseSensitive = False
personne.MinimumCapacity = 50
donnees.Tables.Add(personne)
Dim col1 As New Data.DataColumn("pers_num", GetType(Integer))
col1.AutoIncrement = True
col1.AutoIncrementSeed = 1
col1.AutoIncrementStep = 1
donnees.Tables("personne").Columns.Add(col1)

Microsoft Visual Basic . Net - 2005

111/135

donnees.Tables("personne").PrimaryKey = New DataColumn() {col1}


Dim col2 As New Data.DataColumn("pers_nom", GetType(String))
col2.Unique = True
col2.MaxLength = 255
col2.DefaultValue = "inconnu"
donnees.Tables("personne").Columns.Add(col2)
Dim col3 As New Data.DataColumn("pers_cat_num", GetType(Integer))
donnees.Tables("personne").Columns.Add(col3)
'creation de la table catgorie et ajout des champs
Dim categorie As New DataTable("categorie")
categorie.CaseSensitive = False
categorie.MinimumCapacity = 50
donnees.Tables.Add(categorie)
Dim col4 As New Data.DataColumn("cat_num", GetType(Integer))
col4.AutoIncrement = True
col4.AutoIncrementSeed = 1
col4.AutoIncrementStep = 1
donnees.Tables("categorie").Columns.Add(col4)
donnees.Tables("categorie").PrimaryKey = New DataColumn() {col4}
Dim col5 As New Data.DataColumn("cat_lib", GetType(String))
col5.MaxLength = 50
donnees.Tables("categorie").Columns.Add(col5)
'creation de la relation
Dim rel As New DataRelation("personne_categorie",
donnees.Tables("categorie").Columns("cat_num"),
donnees.Tables("personne").Columns("pers_cat_num"))
donnees.Relations.Add(rel)
'Ajout des contraintes
Dim fk As ForeignKeyConstraint = rel.ChildKeyConstraint
fk.DeleteRule = Rule.None
fk.UpdateRule = Rule.None

Notez que la dernire partie dfinit le comportement des enregistrements de la relation


lors dopration dinsertion ou de suppression : dans le cas prcdent, la suppression dune
catgorie de personne sera refuse si elle contient des personnes.
7.6.4 Travailler avec les donnes
Une fois que la structure du DataSet est en place, vous devez tre en mesure dajouter
des donnes aux DataTable. Chaque DataTable contient une collection de DataRow qui
correspond aux diffrents enregistrements de la table.

Microsoft Visual Basic . Net - 2005

112/135

7.6.4.1 Parcourir les donnes


Le parcourt des donnes permet de lire les enregistrements stocks dans le DataTable.
Il existe deux modes de parcourt :

Le parcourt linaire qui consiste accder aux enregistrements dune seule table
partir de leurs indices (lments inexistants dans les bases de donnes relationnelles)
Le parcourt hirarchique permettant dutiliser les relations mises en place entre les
tables dun DataSet

Lexemple suivant affiche tous les lments de la table personne :


Dim i As Int16
Dim contenu As String
With donnees.Tables("personne")
For i = 0 To .Rows.Count - 1
contenu &= .Rows(i).Item("pers_num") & " - " & .Rows(i).Item("pers_nom") &
vbCr
Next
End With
MsgBox(contenu)
Le rsultat obtenu :

Le second exemple permet dafficher pour chaque catgorie, toutes les personnes
correspondantes. Le code vadans un premier temps parcourir toutes les catgories et, avec la
mthode GetChildRows rcuprer tous les enregistrements correspondant dans la table
personne. Cette mthode prend en argument la relation pour laquelle vous souhaitez rcuprer
les enregistrements enfants.
Dim contenu2 As String = "--- Liste des personnes par catgorie---" & vbCr
Dim elt As DataRow
With donnees.Tables("categorie")
For i = 0 To .Rows.Count - 1
contenu2 &= .Rows(i).Item("cat_lib") & vbCr
For Each elt In .Rows(i).GetChildRows("personne_categorie")
contenu2 &= "--> " & elt.Item("pers_nom") & vbCr
Next
Next
End With
MsgBox(contenu2)

Microsoft Visual Basic . Net - 2005

113/135

Le rsultat obtenu :

A linverse, il est possible de rcuprer lenregistrement parent dun


enregistrement faisant parti dune relation avec la mthode GetParentRow . Cette mthode
prend galement en paramtre la relation pour laquelle vous souhaitez rcuprer
lenregistrement pre. Lexemple suivant affiche la liste des personnes en affichant galement
le libell de la catgorie laquelle ils appartiennent :
Dim contenu3 As String = "--- Liste des personnes avec le libell catgorie---" & vbCr
With donnees.Tables("personne")
For i = 0 To .Rows.Count - 1
contenu3 &= .Rows(i).Item("pers_num") & " - " & .Rows(i).Item("pers_nom") & "
- " & .Rows(i).GetParentRow("personne_categorie").Item("cat_lib") & vbCr
Next
End With
MsgBox(contenu3)
Le rsultat obtenu :

7.6.4.2 Insertion de donnes


Pour insrer un nouvel enregistrement, vous devez crer un objet DataRow partir du
Datatable, configurer les valeurs des diffrentes colonnes et enfin ajouter le DataRow au
DataTable.
Lexemple suivant ajoute un enregistrement dans la table categorie :
Dim dr As DataRow = donnees.Tables("categorie").NewRow()
dr("cat_lib") = "Salari"
donnees.Tables("categorie").Rows.Add(dr)

Microsoft Visual Basic . Net - 2005

114/135

Lexemple suivant ajoute une personne en lui attribuant la catgorie no 3 (catgorie


inexistante !) :
Dim dr2 As DataRow = donnees.Tables("personne").NewRow()
dr2("pers_nom") = "Victor"
dr2("pers_cat_num") = "3"
donnees.Tables("personne").Rows.Add(dr2)
A ce moment, une exception est leve car les enregistrements ne respectent pas la
relation personne_categorie :

7.6.4.3 Modification de donnes


La modification de donnes est possible en modifiant la collection Rows de lobjet
DataTable. La modification dun enregistrement se fait en 3 tapes :

Appel de la mthode BeginEdit sur lobjet DataRow : cette mthode permet de


commencer une opration de modification
Modification des donnes
Appel de la mthode EndEdit pour valider les modifications ou CancelEdit
pour les annuler.

Lexemple suivant modifie le premier enregistrement de la table Personne :


With donnees.Tables("personne").Rows(0)
.BeginEdit()
.Item("pers_nom") = "saturnin"
.EndEdit()
End With
7.6.4.4 Suppression de donnes
La suppression de donnes consiste supprimer des Objets DataRow de lobjet
DataTable. Pour cela, on utilise la mthode Delete de lobjet DataRow.
Lexemple suivant permet de supprimer une personne :
donnees.Tables("personne").Rows(0).Delete()

Microsoft Visual Basic . Net - 2005

115/135

7.6.5 Objet DataView


Lobjet DataView permet dextraire, filtrer et trier des donnes issues dun DataTable.
De plus, il est possible de modifier, ajouter, supprimer des donnes directement partir du
DataView et les modifications seront automatiquement retranscrites dans le DataTable li. Un
DataView peut tre vu comme une vue au niveau base de donnes.
Proprit
AllowDelete
AllowEdit
AllowNew
Count
RowFilter
Sort

Mthode
Addnew
Delete
Find

FindRows

Description
Autorise la suppression denregistrements
Autorise la modification denregistrements
Autorise lajout denregistrements
Nombre denregistrement
Dfinit un filtre pour les donnes : chane de texte quivalente la
clause where dune requte SQL
Dfinit le tri : Equivalant la clause order by dune requte
SQL
Description
Ajoute un enregistrement
Supprime un enregistrement
Retourne lindice de lenregistrement correspondant aux
paramtres de recherche par rapport au champs spcifi dans
lattribut sort
Retourne un ensemble de DataRow correspondant la recherche.

Lexemple suivant cre un DataView partir du DataTable personne et ne garde que


les personnes dont le numro de catgorie est 1. les enregistrements sont classs par nom
dcroissant. Enfin, nous recherchons lenregistrement dont le nom est Julien et nous
affichons les informations.
Dim dv As New DataView
dv.Table = donnees.Tables("personne")
dv.AllowDelete = False
dv.AllowNew = False
dv.AllowEdit = True
dv.Sort = " pers_nom"
Dim indice As Integer
indice = dv.Find("Julien")
MsgBox(dv(i).Item("pers_nom"))

7.6.6 Les vnements


La modification des donnes dun DataTable entrane la leve de plusieurs vnements
qui permettront par exemple de valider les valeurs saisies dans les enregistrements.
Evnement

Description

Microsoft Visual Basic . Net - 2005

116/135

ColumnChanged
ColumnChanging
RowChanged
RowChanging
RowDeleted
RowDeleting

Valeur de colonne change


Valeur de colonne en cours de modification
Ligne de la table modifie
Ligne de la table en cours de modification
Ligne de la table supprime
Ligne de la table en suppression

7.7 Objet DataAdapter


Les Objets DataSet et DataTable permettent de dfinir la structure des donnes au
sein dune application comme mode temporaire de stockage. Ceux ci peuvent ensuite tre
aliments en donnes par un fichier texte par exemple. La ralit est cependant diffrente, la
plupart des applications ncessitent linterrogation et le stockage des informations dans une
base de donnes distante (Oracle, Sql Server) ou local (Access).
Lobjet DataAdapter est un connecteur entre la source de donnes et lobjet DataSet.
Lintrt dun tel composant est de pouvoir dissocier la zone de stockage des donnees (Une
BDR par exemple) de la zone de travail (Le DataSet).
Son utilisation se fait en plusieurs tapes :

Connection la source de donnes


Rcupration des donnes de la base et insertion dans les DataTable
Dconnexion de la source de donnes
Modification des donnes par lapplication
Connexion la source de donnes
Envoi des modifications effectues vers la source
7.7.1 Cration

Lors de la cration dun DataAdapter, il est ncessaire de spcifier la connexion


utilise ainsi que la requte Select. En fonction du Provider utilis, lobjet DataAdapter sera
diffrent car il doit tre en mesure de modifier les donnes dune source.
2 objets existent :

OleDbDataAdapter
SqlDataAdapter
Dim da As New OleDb.OleDbDataAdapter("select * from Table1", cn)

Ainsi, le DataAdapter sait sur quelles donnes il devra travailler.


7.7.2 Importer des donnes
Limportation des donnes consiste remplir les DataTable dune DataSet partir
dun DataAdapter dfini.
7.7.2.1 Remplir un DataSet

Microsoft Visual Basic . Net - 2005

117/135

Le remplissage des lments dun DataSet se fait laide de la mthode Fill de lobjet
DataAdapter. Plusieurs configurations sont possibles pour la rcupration des donnes en
raison de la surcharge de la mthode Fill :
Quelque soit la surcharge utilise, la mthode Fill a la capacit douvrir et de fermer la
connexion utilise pour la cration du DataAdapter. Attention, si vous accder plusieurs des
tables via un DataAdapter, il est prfrable douvrir et fermer vous mme la connexion.

Remplir un DataTable existant

La premire possibilit consiste remplir une DataTable dj existant : dans ce cas, la


structure du DataTable doit correspondre au jeu de rsultat retourn. Nous verrons plus tard
quil est possible de passer outre cette possibilit en utilisant un Mappage des donnes. La
mthode Fill prend en paramtres un DataSet ainsi que le nom de la table remplir.
'definition dataset et datatable
Dim ds As New DataSet("monds")
Dim t As New DataTable("matable")
Dim col1 As New Data.DataColumn("num", GetType(Integer))
Dim col2 As New Data.DataColumn("lib", GetType(String))
t.Columns.Add(col1)
t.Columns.Add(col2)
ds.Tables.Add(t)
'connexion (dfinition mais pas ouverture)
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\bd2.mdb;"
'remplissage datatable partir du DataAdapter
Dim da As New OleDb.OleDbDataAdapter("select * from Table1", cn)
da.Fill(ds, "matable")

Crer et remplir un nouveau DataTable

La seconde possibilit permet de laisser au DataAdapter le soin de crer le DataTable


ainsi que sa structure. Dans ce cas, il suffit dappeler la mthode Fill en passant en paramtre
le nom dun DataTable inexistant.

'definition dataset et datatable


Dim ds As New DataSet("monds")
'connexion (dfinition mais pas ouverture)
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\bd2.mdb;"
'remplissage datatable partir du DataAdapter
Dim da As New OleDb.OleDbDataAdapter("select * from Table1", cn)

Microsoft Visual Basic . Net - 2005

118/135

da.Fill(ds, "matable")

Rcuprer un certain nombre denregistrements

Il est possible lors de lappel de la mthode Fill de spcifier quelles sont les lignes de
la requte rcuprer. Pour cela, on utilise deux paramtres qui sont lindice de dpart et le
nombre maximal denregistrement rcuprer. Cette signature permet en particulier de
gnrer un affichage par page en rcuprant tour tour les 10 premiers enregistrements, les 10
suivants etc
Lexemple suivant rcupre 10 enregistrements partir du 50 me.
Dim da As New OleDb.OleDbDataAdapter("select * from Table1", cn)
da.Fill(ds, 50, 10, "toto")

Remplissage de Datatable multiples

Il est galement possible de remplir plusieurs DataTable partir dun seul


DataAdapter en passant en paramtres plusieurs requtes spares par des points virgules :
Attention, lors de la cration des DataTable, la mthode Fill les nomme Table1 ,
Table2 Il est donc vivement conseill de renommer les tables aprs excution.
'connexion (dfinition mais pas ouverture)
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\bd2.mdb;"
'remplissage datatable partir du DataAdapter
Dim da As New OleDb.OleDbDataAdapter("select * from Client;Select * from
Produit;Select * from Commande", cn)
da.Fill(ds, "matable")
ds.Tables(1).TableName = Client
ds.Tables(2).TableName = Produit
ds.Tables(3).TableName = Commande

7.7.2.2 Mappage des donnes


Jusqu prsent, pour remplir un DataTable dj existant, nous devions une structure
identique celle dfinit dans la source de donnes, en particulier au niveau des noms et des
types de champs. Le mappage des donnes permet de dfinir pour chaque table et colonne de
la source leur correspondance au niveau du DataTable.
Une telle mthode peut tre utile afin de :

Modifier le nom dune table

Microsoft Visual Basic . Net - 2005

119/135

Renommer les champs dune table pour amliorer la lisibilit du code


Rcuprer des informations pour des colonnes ne portant pas de nom (les oprations
daggrgation par exemple)

La dfinition dun mappage se fait au niveau du DataAdapter par le biais de la collection


TableMapping et ColumnMapping qui contiennent les quivalences en terme de
tables et de champs.
Lexemple suivant dfinit un mappage correspondant au schma ci dessous :
DataTable : customer

Table : Client

no

num

name

nom

surname
birth

prenom
daten

'definition dataset et datatable


Dim ds As New DataSet("monds")
Dim t As New DataTable("customer")
Dim col1 As New Data.DataColumn("name", GetType(String))
Dim col2 As New Data.DataColumn("surname", GetType(String))
Dim col3 As New Data.DataColumn("birth", GetType(Date))
Dim col4 As New Data.DataColumn("no", GetType(Int32))
t.Columns.Add(col1)
t.Columns.Add(col2)
t.Columns.Add(col3)
t.Columns.Add(col4)
ds.Tables.Add(t)
'connexion
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\Support\vbnet\bd2.mdb;"
'definition du DataAdapter
Dim da As New OleDb.OleDbDataAdapter("select num, nom, prenom, daten from
Client", cn)
'dfinition des mappings de table & champs
da.TableMappings.Add("Client", "customer")
da.TableMappings(0).ColumnMappings.Add("num", "no")
da.TableMappings(0).ColumnMappings.Add("nom", "name")
da.TableMappings(0).ColumnMappings.Add("prenom", "surname")
da.TableMappings(0).ColumnMappings.Add("daten", "birth")

Microsoft Visual Basic . Net - 2005

120/135

'remplissage
da.MissingMappingAction = MissingMappingAction.Ignore
da.Fill(ds.Tables("customer"))
7.7.2.3 Importer la structure
Dans certains cas, il peut tre interressant de ne rcuprer que la structure dune source
de donnes sans pour autant rcuprer les enregistrements qui la composent. Par exemple, un
programme ne faisant que de linsertion aura besoin de la structure mais pas des donnes.
Il faut dans ce cas, utiliser la mthode FillSchema et passer les arguments suivants :
Paramtre
DataSet
SchemaType

SrcTable

Description
Le dataSet vers lequel exporter les donnes
Spcifie si les mappings dfinit doivent tre utiliss :
SchemaType.Mapped  oui
SchemaType.Source  non
Nom du DataTable vers lequel envoyer la structure

Lexemple suivant importe la structure de la table Client vers le DataSet ds et


affiche la structure de la table :
'connexion
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\bd2.mdb;"
'definition du DataAdapter & DataSet
Dim da As New OleDb.OleDbDataAdapter("select * from Client", cn)
Dim ds As New DataSet("monds")
da.FillSchema(ds, SchemaType.Source, "dt_client")
'affichage de la structure de la table
Dim chps As DataColumn
Dim contenu As String
For Each chps In ds.Tables("dt_client").Columns
contenu &= chps.ColumnName & " - " & chps.DataType.ToString & vbCr
Next
MsgBox(contenu)
Rsultat obtenu :

Microsoft Visual Basic . Net - 2005

121/135

7.7.3 Exporter des donnes


Dans la plupart des applications exploitant les bases de donnes, vous devrez tt ou
tard mettre jour la source de donnes partir des donnes modifies dans un DataSet ou un
DataReader : cest galement le rle du DataAdapter qui doit pouvoir mettre jour les
enregistrement insrs, modifis ou supprims.
Dans un premier temps, vous devrez dfinir le comportement du DataAdapter pour
chaque type de modification sur la table du DataSet (Insert, Update, Delete). Il est galement
possible deffectuer un mappage pour les donnes du DataSet et de la source.
Cette mise jour peut cependant lever des conflits au niveau des enregistrements :
imaginez un enregistrement que vous modifiez et qui est supprim par un utilisateur juste
avant la demande de mise jour ! Pour rglez ces conflits, le DataAdapter possde un
ensemble dobjets et dvnements permettant de cibler et rsoudre les problmes.
7.7.3.1 Mise jour de la source de donnes

Proprits utilises

Afin de mener bien les oprations de mise jour vers la source de donnes, lobjet
DataAdapter doit tre en mesure de connatre ltat des enregistrement (DataRow) des
diffrents DataTable.
Pour cela, chacune des lignes possde la proprit RowState pouvant prendre les
valeurs suivantes :
Valeur
1
2
4
8
16

Description
Detached : la ligne nest encore intgre aucun DataTable
Unchanged : Aucun changement depuis le dernier appel de AcceptChanges
Added : la ligne a t ajoute
Deleted : La ligne a t supprime
Modified : La ligne a t modifie

7.7.3.1 Dfinition des requtes dactualisation


En fonction de ltat des lignes, lobjet DataAdapter excutera des requtes diffrentes
afin de mettre jour la source de donnes. Le comportement du DataAdapter est dfinit par
trois objets command :
-

InsertCommand
UpdateCommand
DeleteCommand

Pour crer ses commandes, vous pouvez soit utiliser la classe CommandBuilder
correspondant votre fournisseur de donnes qui gnrera automatiquement les commandes
ou alors les paramtrer vous mme :

Classe CommandBuilder

Microsoft Visual Basic . Net - 2005

122/135

Lexemple suivant cre les commandes dactualisation partir de la classe CommandBuilder :


'connexion
Dim cn As New OleDb.OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\Support\vbnet\bd2.mdb;"
'dataset, dataadapter
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter("select * from Client", cn)
da.Fill(ds, "Client")
'creation des commandes
Dim cmdbuilder As New OleDb.OleDbCommandBuilder(da)
da.InsertCommand = cmdbuilder.GetInsertCommand
da.DeleteCommand = cmdbuilder.GetDeleteCommand
da.UpdateCommand = cmdbuilder.GetUpdateCommand

Les commandes cres sont des requtes SQL contenant plusieurs paramtres
(reprsents par des ?).
Dans le cas dune commande Delete ou Update, les commandes gnrs prennent en
compte le fait que lenregistrement cible mettre jour doit avoir les mme valeurs que lors
de la lecture initiale. Si une des valeurs de lenregistrement t modifie sur la source de
donnes, la mise jour ne sera pas valide et une erreur sera retourne.
Voici les commandes gnres par la classe CommandBuilder :
o Commande Insert
INSERT INTO Client( nom , prenom , daten ) VALUES ( ? , ? , ? )
Notez que dans le cas dune cl primaire avec numroauto ou AutoIncrement, le
champs nest pas spcifie car il est gnr par la base de donnes.
o Commande Delete
DELETE FROM Client WHERE ( (num = ?) AND ((? = 1 AND nom IS NULL) OR (nom =
?)) AND ((? = 1 AND prenom IS NULL) OR (prenom = ?)) AND ((? = 1 AND daten IS
NULL) OR (daten = ?)) )

o Commande Update
UPDATE Client SET nom = ? , prenom = ? , daten = ? WHERE ( (num = ?) AND ((? = 1
AND nom IS NULL) OR (nom = ?)) AND ((? = 1 AND prenom IS NULL) OR (prenom = ?))
AND ((? = 1 AND daten IS NULL) OR (daten = ?)) )

Gnrer ses propres commandes

Microsoft Visual Basic . Net - 2005

123/135

De manire gnrale, la commande dinsertion correspond aux besoins de lentreprise.


Cependant, concernant les commandes Update et Delete, elles imposent que lenregistrement
mettre jour nest pas t modifi entre sa lecture et sa mise jour par votre application.
Dans lexemple suivant, la commande de suppression ne filtre les enregistrements que par
rapport leur cl primaire : ainsi, si un autre utilisateur a modifi les enregistrements entre
temps, la suppression se fera quand mme.
'creation de la commande personnalise de suppression
Dim cmddelete As New OleDb.OleDbCommand("Delete from Client where
num = ?", cn)
'definition du parametre numro
With cmddelete.Parameters.Add("@p1", GetType(Integer))
.SourceColumn = "num"
'colonne lie
.SourceVersion = DataRowVersion.Original 'valeur rcuprer
End With
'dfinition de la requete comme DeleteCommand du DataAdapter
da.DeleteCommand = cmddelete

7.7.3.2 Dclencher la mise jour des donnes


Pour dclencher la mise a jour des donnes, il suffit dappeler la mthode Update de
lobjet DataAdapter en passant en paramtre le DataSet ainsi que le nom de la table du
DataSet valider.
da.Update(ds, "Client")

Afin de ne pas lancer de mise jour injustifie, la proprit HasChanges de lobjet


DataSet peut tre consulte :
If ds.HasChanges Then
da.Update(ds, "Client")
Else
MsgBox("aucun changement")
End If

Il est galement possible de rcuprer partir dun DataTable uniquement les lignes
ayant subies des modifications (ajout ou suppression ou modification). De cette faon, vous
tes en mesure dactualiser quune partie des lignes modifies.
La mthode GetChanges des objets DataTable et DataSet permet de ne rcuprer que
les enregistrement modifis.
Lexemple ci dessous ne met jour que les enregistrements supprims de la table
Client : pour cela, on utilise la mthode GetChanges permettant de ne rcuprer que
les enregistrement ayant subit des modifications (ajout, suppression, modification).
'maj des enregistrements supprims :
Dim tbl2 As DataTable =
ds.Tables("Client").GetChanges(DataRowState.Deleted)
da.Update(tbl2)

Microsoft Visual Basic . Net - 2005

124/135

Une fois la mise jour effectue, la proprit RowState des diffrents DataRow
concerns est passe UnChanged spcifiant que la ligne est valid.
7.7.3.3 Gestion des conflits
Lors de la mise jour de la base de donnes avec la mthode Update, plusieurs conflits
peuvent apparatre. Un conflit est une exception de mise jour de la source.
Try
Da.update(ds, Clients)
Catch ex as Exceptio
Msgbox(Erreur de mise jour )
End Try
Dans le cas dune erreur de mise jour, la mise jour des lignes suivantes est ommise.
Afin de forcer la mise jour de toutes les lignes (mme celles suivants un conflit), vous devez
paramtrer le comportement du DataAdapter :
Da.ContinueUpdateOnErrors = true

Afficher les lignes conflictuelles

Aprs une mise jour, toutes les lignes voit leur proprit RowState Unchanged
sauf les lignes conflictuelles : la mthode consiste donc parcourir les RowState et rcuprer
seulement les lignes dont RowState est diffrent de UnChanged .
Lexemple suivant illustre cette mthode :
da.ContinueUpdateOnError = True
da.Update(ds, "Client")
'affichage des lignes conflictuelles
chaine = ""
If ds.HasChanges Then
Dim dr As DataRow
For Each dr In ds.Tables("Client").Rows
If dr.RowState <> DataRowState.Unchanged Then
Select Case dr.RowState
Case DataRowState.Deleted
dr.RejectChanges() 'retablit l'tat initial
afin de pouvoir accder la PK
chaine &= "Suppression impossible pour la cl "
& dr.Item(0)
Case DataRowState.Modified
chaine &= "Modification impossible pour la cl
" & dr.Item(0)
End Select
End If
Next
MsgBox(chaine)
Else
MsgBox("Toutes les mises jour ont t effectues")
End If

Microsoft Visual Basic . Net - 2005

125/135

La seconde mthode consiste rcuprer les enregistrements non valids par la mthode
Update par lintermdiaire de la mthode GetChanges : vous crez partir de cette
mthode un nouvel objet DataTable et vous pouvez ensuite parcourir les enregistrements
de cette table afin didentifier les conflits.

Evnements et proprits lis

Pour la gestion des conflits, il est galement possible dutiliser les vnements
RowUpdating et RowUpdated respectivement dclenchs avant et aprs la mise jour
dun enregistrement (cest dire lenvoi de la commande correspondante).
Lvnement RowUpdating est utilis pour prvenir les sources de conflits : par exemple,
dans une application ou deux utilisateurs peuvent simultanment modifier diffrents champs
dun mme enregistrement, un conflit sera automatiquement dclench pour le dernier faisant
la mise jour. Lvnement RowUpdating peut vous permettre de modifier
lUpdateCommande et ny inclure que les champs modifis (ceux dont lancienne valeur est
diffrente de la nouvelle).
Lvnement RowUpdated quand lui permet de rsoudre les conflits une fois que ceux ci
sont dclenchs afin de ne pas avoir dautres rpercutions sur les enregistrements suivants.
Ces deux vnements prennent en paramtre e de type System.Data.FillErrorEventArgs :
Proprit
StatementType
Command
Row
Status
Errors

Description
Type de la commande
Objet commande
Objet DataRow actualiser
Rgle de gestion des lignes suivantes
Erreurs gnres (seulement dans RowUpdated)

Lexemple suivant utilise lvnement RowUpdated afin de rsoudre les conflits


de maj lorsquils interviennent :
Private Sub da_RowUpdated(ByVal sender As Object, ByVal e As
System.Data.OleDb.OleDbRowUpdatedEventArgs) Handles da.RowUpdated
'gestion des conflits de maj
If e.Row.RowState <> DataRowState.Unchanged Then
Select Case e.Row.RowState
Case DataRowState.Deleted
If Not TypeOf e.Errors Is DBConcurrencyException Then
'erreur d'integrite referentielle
MsgBox("Erreur suppression" & vbCr & "type erreur =
" & e.Errors.Message)
Else
'conflit d'actualisation, l'enregistrement n'existe
plus
MsgBox("L'enregistrement supprimer n'existe plus
dans la source de donnes")
End If
Case DataRowState.Modified
If Not TypeOf e.Errors Is DBConcurrencyException Then
'erreur d'integrite referentielle

Microsoft Visual Basic . Net - 2005

126/135

MsgBox("Erreur de mise jour" & vbCr & "type


erreur = " & e.Errors.Message)
Else
'conflit d'actualisation, l'enregistrement n'existe
plus
MsgBox("L'enregistrement mettre jour n'existe
plus dans la source de donnes")
End If
End Select
End If
End Sub

Revenir en arriere sur plusieurs actualisations

Dans le cas dun problme dactualisation bloquant, il peut tre interressant dannuler
toutes les actualisations dj ralises afin de laisser la base de donnes dans un tat cohrent.
Pour annuler toutes les actualisations dj fates, il suffit de lier les commandes une
transaction (regroupement de commande) car lobjet transaction possde les mthodes
commit et rollback qui permettent respectivement de valider et dannuler toutes les
commandes dune transaction.
Lexemple suivant effectue les mises jour et annule lensemble des commandes si une
erreur survient.
'connexion
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\Support\vbnet\bd2.mdb;"
'dataset, dataadapter
Dim ds As New DataSet
da = New OleDb.OleDbDataAdapter("select * from Client", cn)
da.Fill(ds, "Client")
'creation des commandes et rattachement la transaction
Dim cmdbuilder As New OleDb.OleDbCommandBuilder(da)
da.InsertCommand = cmdbuilder.GetInsertCommand
da.DeleteCommand = cmdbuilder.GetDeleteCommand
da.UpdateCommand = cmdbuilder.GetUpdateCommand
'transaction & initialisation
Dim transac As OleDb.OleDbTransaction
cn.Open()
transac = cn.BeginTransaction
da.InsertCommand.Transaction = transac
da.DeleteCommand.Transaction = transac
da.UpdateCommand.Transaction = transac
'modification des donnes
ds.Tables("Client").Rows(0).Delete()
ds.Tables("Client").Rows(1).Item(1) = "tutu"
'effectue la mise jour
da.ContinueUpdateOnError = True
da.Update(ds, "Client")
'si erreur, on annnule tout

Microsoft Visual Basic . Net - 2005

127/135

If ds.HasChanges Then
MsgBox("Erreur(s) lors de la mise jour. Toutes les oprations
sont annules.")
transac.Rollback()
Else
MsgBox("Mise jour russie !")
transac.Commit()
End If
'fermeture de la connexion
cn.Close()

7.8 Liaison de donnes aux contrles


La liaison de donnes permet de lier un contrle de formulaire 1 ou plusieurs champs
dune source de donnes.
Deux types de liaison de donnes existent :
-

Liaison de donnes simple : une seule proprit du contrle est lie une colonne de
la source de donnes (exemple : champs texte)

Liaison de donnes complexe : plusieurs proprits du contrle sont lies une ou


plusieurs colonnes de la source de donnes (exemple : liste droulante)

De manire gnrale, le fonctionnement est le suivant


-

Crer un objet connexion


Crer un objet DataAdapter
Crer lobjet DataSet et le remplir laide du DataAdapter
Lier les proprits des contrles aux champs du DataSet
Manipuler et naviguer entre les enregistrements avec lobjet BindingManagerBase

7.8.1 Objets utiliss


Lors de la mise en place de contrles lis, les objets suivants sont mis contribution :
7.8.1.1 DataBinding
Cet objet permet de lier une proprit dun contrle un champs de la source de donnes.
Au niveau dun contrle, la collection DataBindings contient lensemble des liens
source de donnes vers proprit du contrle. Ainsi, lorsque vous souhaitez lier par le
code un contrle un champs, utilisez la mthode Add.
Le code suivant lie la proprit text du contrle textbox1 au champs nom de la
table Client du DataSet11 :
Me.TextBox4.DataBindings.Add("text", Me.DataSet11, "Client.nom")

Microsoft Visual Basic . Net - 2005

128/135

7.8.1.2 ControlBindingCollection
Cet objet contient lensemble des objets Binding pour un contrle (par exemple dans le
cas dun TextBox dont le contenu serait dfinit par le champs nom et la couleur de fond
par le champs color ).
7.8.1.3 BindingManagerBase
Cet objet contient lensemble des objets Binding lis la mme source de donnes. Cest
grce lui que vous pourrez par exemple parcourir les donnes (suivant, prcdent), ajouter
ou supprimer des enregistrements etc
Proprit
Count
Position

Description
Nombre de ligne gres par le BMB
Indice de la ligne en cours

Mthode
AddNew
CancelCurrentEdit
RemoveAt(indice)

Description
Ajoute un nouvel enregistrement
Annule ldition ou lajout en cours
Supprime lenregistrement la position Indice
7.8.1.4 BindingContext

Contient lensemble des objets BindingManagerBase pour les contrles dun formulaire
par exemple.

7.8.2 Liaison de donnes par Interface Graphique


Lenvironnement de dveloppement Visual Studio offre un ensemble doutils
permettant de gnrer la liaison entre contrle et champs de la source de donnes.
7.8.2.1 Dfinir la connexion
Pour dfinir la connexion, ouvrir lexplorateur de serveur, clic droit sur Connexions de
donnes , Ajouter une connexion :

Microsoft Visual Basic . Net - 2005

129/135

Les paramtres de votre connexion dpendent de la source de donnes laquelle vous


souhaitez vous connecter. Pour plus de renseignement, consulter la partie Connexion de ce
chapitre.
7.8.2.2 Cration des objets connexion et DataAdapter
Une fois la connexion dfinie, vous devez gnrer les objets Connexion et
DataAdapter qui seront utiliss pour lier vos contrles a la source de donnes : pour cela,
fates glisser la table voulue sur le formulaire : les objets connexion et DataAdapter sont alors
crs.

7.8.2.3 Gnrer le groupe de donnes


Afin de pouvoir faire rfrences aux donnes de la table slectionne dans les
diffrents contrles, vous devez gnrer le groupe de donnes. Cette opration permet de
gnrer un DataSet contenant les informations des diffrentes tables.
Pour gnrer le groupe de donnes, clic droit sur lobjet DataAdapter prcdemment
cr, Gnrer le groupe de donnes :

Microsoft Visual Basic . Net - 2005

130/135

Une fois les informations de la boite de dialogue paramtre, un nouvel objet DataSet
est cr :

7.8.2.4 Lier les contrles


Une fois toutes ces opration ralises, vous tes en mesure de lier les diffrents
contrle aux donnes du DataSet. Cette opration est diffrente suivant les contrles utiliss :

Pour un TextBox

Pour un ListBox

Microsoft Visual Basic . Net - 2005

131/135

7.8.2.5 Finalisation par le code


La dernire tape consiste placer dans lvnement Form_load le code permettant
dune part de remplir le DataSet gnr et dautre part rcuprer une rfrence lobjet
BindingManagerBase afin de naviguer dans la source de donnes :
Dim WithEvents bmb As BindingManagerBase
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
'remplissage du dataset
Me.OleDbDataAdapter1.Fill(Me.DataSet11, "Client")
'recuperation de la rfrence au BindingManagerBase
bmb = Me.BindingContext(Me.DataSet11, "Client")
End Sub

7.8.3 Exemple dapplication


Le code suivant permet dimplmenter lapplication suivante :

Public Class Form3


Inherits System.Windows.Forms.Form
'declaration globale des objets
Public cn As New OleDb.OleDbConnection
Public WithEvents da As OleDb.OleDbDataAdapter
Public ds As New DataSet
Public bmb As BindingManagerBase
#Region " Code gnr par le Concepteur Windows Form "

Microsoft Visual Basic . Net - 2005

132/135

Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles MyBase.Load
'initialisation des objets
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\Support\vbnet\bd2.mdb;"
da = New OleDb.OleDbDataAdapter("select * from Client", cn)
da.Fill(ds, "Client")
'liaison des proprits des controles aux champs de la base
Me.lbl_num.DataBindings.Add("text", ds, "Client.num")
Me.txt_daten.DataBindings.Add("text", ds, "Client.daten")
Me.txt_nom.DataBindings.Add("text", ds, "Client.nom")
Me.txt_prenom.DataBindings.Add("text", ds, "Client.prenom")
bmb = Me.BindingContext(Me.ds, "Client")
End Sub
Private Sub btn_premier_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_premier.Click
Me.bmb.Position = 0
End Sub
Private Sub btn_precedent_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_precedent.Click
Me.bmb.Position -= 1
End Sub
Private Sub btn_suivant_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_suivant.Click
Me.bmb.Position += 1
End Sub
Private Sub btn_dernier_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_dernier.Click
Me.bmb.Position = Me.bmb.Count - 1
End Sub
Private Sub btn_ajouter_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_ajouter.Click
Me.bmb.AddNew()
End Sub
Private Sub btn_supprimer_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles btn_supprimer.Click
If MsgBox("Supprimer ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
Try
Me.bmb.RemoveAt(Me.bmb.Position)
MsgBox("Element supprim")
Catch ex As Exception
MsgBox("Erreur de suppression :" & vbCr & ex.Message)
End Try
End If
End Sub
Private Sub btn_valider_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btn_valider.Click
Me.bmb.EndCurrentEdit()
End Sub

Microsoft Visual Basic . Net - 2005

133/135

Private Sub btn_annuler_Click(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btn_annuler.Click
Me.bmb.CancelCurrentEdit()
End Sub
End Class

7.8.4 Formulaires de donnes Maitre / Dtail


Les formulaires de donnes permettent dafficher en mme temps le contenu de deux
tables lies par une relation : par exemple, si vous affichez une fiche client avec en dessous la
liste de toutes les commandes passes, la liste des commandes doit tre mise jour lors de la
slection dun autre client.
Pour cela, il suffit de crer dans le mme DataSet deux tables lies par une relation et
de modifier la proprit DataMember en lui passant en paramtre le nom de la table matre
et le nom de la relation.
Lexemple suivant reprend lapplication de gestion de client prcdente en ajoutant
laffichage des commandes pour le client affich :

Les seules modifications appliquer au code prcdent se situe dans le


Form_Load . Voici la version modifie :
'initialisation des objets
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=E:\Support\vbnet\bd2.mdb;"
da = New OleDb.OleDbDataAdapter("select * from Client", cn)
da.FillSchema(ds, SchemaType.Source, "Client")
da.Fill(ds, "Client")
da2 = New OleDb.OleDbDataAdapter("select * from Commande", cn)
da2.FillSchema(ds, SchemaType.Source, "Commande")
da2.Fill(ds, "Commande")
'creation de la relation entre les tables commande et client

Microsoft Visual Basic . Net - 2005

134/135

Dim r As New DataRelation("client_commande",


ds.Tables("Client").Columns("num"),
ds.Tables("Commande").Columns("cli_num"))
ds.Relations.Add(r)
'liaison des proprits des controles aux champs de la base
Me.lbl_num.DataBindings.Add("text", ds, "Client.num")
Me.txt_daten.DataBindings.Add("text", ds, "Client.daten")
Me.txt_nom.DataBindings.Add("text", ds, "Client.nom")
Me.txt_prenom.DataBindings.Add("text", ds, "Client.prenom")
'liaison du DataGrid
Me.DataGrid1.CaptionText = "Liste des commandes"
Me.DataGrid1.DataSource = Me.ds
Me.DataGrid1.DataMember = "Client.client_commande"
'recupere le context
bmb = Me.BindingContext(Me.ds, "Client")

Microsoft Visual Basic . Net - 2005

135/135