Vous êtes sur la page 1sur 600

Cours Vb Net

Cours VB.net
Introduction.
Qui est l'auteur
Il s'agit d'un

Visitez le Site LDF:


et tlchargez Ldf logiciel shareware de compta, un dictionnaire mdical gratuit pour Word, la page de Mdiwin...

Visiteurs

cours de Visual Basic.Net de Microsoft, pour dbutants ou anciens voulant passer la version .net . Cest la somme des connaissances que jaurais aimes trouver mes dbuts et la manire dont jaurais aime quon mexplique les choses (Au dpart c'tait mes notes puis petit petit...). Visual Basic.Net apporte une puissance ingale et ncessite une rigueur importante mais il devient vite complexe et technique. La documentation et les livres sont totalement hermtiques pour les novices et rebutent totalement les dbutants. Les articles sur le Web sont trs techniques et traitent d'emble de problmes complexes, ils sont ncessaires mais pas pour le dbutant. Jexplique donc dans ce cours, ma manire, trs simplement, comment crer un programme afin de permettre un bon dmarrage mme celui qui n'a jamais fait d'informatique.(Je traite des programmes Windows:Windows Forms et pas ASP Web).
Jencourage

par ce cours sans prtention, lamateur dvelopper ses propres programmes.


Soyez un utilisateur actif :

Retournez les bugs et erreurs, et mme les fautes d'orthographe. Envoyez moi vos critiques et remarques. Adressez moi vos ides, du code original, des infos mettre sur le site. Ou simplement indiquez moi que vous avez lu mon cours, cela fait toujours plaisir et m'incite poursuivre.
Merci ceux qui m'envoient un petit mot, et ceux qui me donnent un coup de main.

Chargez la version PDF contenant la totalit du cours.


http://plasserre.developpez.com/vbintro.htm (1 sur 2) [01/03/2005 14:38:19]

Cours Vb Net

3.3Mo V1 du 06/12/2004 334 pages (ncessite Acrobat Reader). Merci Alexandre Freire pour son aide

ou Allez au 'Sommaire' de la version On line


Questions l'auteur: Avant de poser une question, cherchez s'il n'y a pas la rponse sur le site. Si je connais la rponse et qu'elle est didactique, je la mets sur le site et je l'indique l'auteur. Je ne peux pas rpondre des questions trs particulires et spcifiques car je n'ai pas d'exprience pousse dans tous les aspects de VB et les questions sont nombreuses. Ne pas hsiter chercher la rponse vos problmes sur le site http://developpez.com qui est trs srieux, complet et didactique.(nombreux didacticiels)

Voir les nouvelles pages ou modifications qui ne sont pas dans le pdf:
Variables 'object' Soyons Strict

Dmarrez le Cours.

ou

Allez au Sommaire

Envoyer un mail P. LASSERRE

http://plasserre.developpez.com/vbintro.htm (2 sur 2) [01/03/2005 14:38:19]

Qui suis-je?

Accueil Site

Qui est l'auteur du site.


Le Dr LASSERRE Philippe est mdecin gnraliste exerant en groupe dans le Rhne ( Toussieu), il dveloppe des logiciels depuis des annes..: Il a travaill avec des ordinateurs: ZX81, New-Brain, Vic20, Apple II, puis PC avec l'aide de Bill. Il utilise le Visual Basic de Microsoft VB6 et VB.Net, a fait un peu d'assembleur Z80 il y a longtemps. Il a fait partie de MEDITRA, association de mdecins informatiss du Rhne pionnire en la matire l'poque, il a t co-fondateur d'un club d'informatique local (Microzon) ou on programmait dur!!. Ensuite il a crit des logiciels, pour cela outre le cot technique informatique , il a beaucoup travaill sur le dossier mdical informatis, les plans de soins. Plein d'ides et de projets, un seul problme: il n'y a que 24h dans une journe.

Auteur de:
CREEMED, Il y a quelques annes.. C'tait un utilitaire pour Medigest Dos. MEDIWIN distribu par Polytel , logiciel de gestion complte de cabinet mdical dont il est le coauteur. Logiciel agr Sesam-Vitale, trs complet, innovant, incluant les notions de "dossier vivant", "procdures de soins" (contenu mdical valid par des thses), travaillant avec la base de mdicament BCB de Rsip, contenant le dictionnaire de la SFMG. LDF logiciel de comptabilit en ShareWare
http://plasserre.developpez.com/QUISUISJE.htm (1 sur 2) [01/03/2005 14:38:29]

Qui suis-je?

Vous pouvez Envoyer un mail au Dr LASSERRE

http://plasserre.developpez.com/QUISUISJE.htm (2 sur 2) [01/03/2005 14:38:29]

Site

Site

Cours : VB.net

Qu'allons 0.0 nous faire ?


Qu'allons nous tudier? Quel plan de cours suivrons nous? Quels logiciels utiliser? Quelle configuration est ncessaire?

Qu'allons-nous tudier? Ce cours est un cours de VisualBasic.Net Nous tudierons principalement: LES APPLICATIONS WINDOWS.

Les applications Windows utilisent les WindowsForms. Les applications Windows sont des programmes directement

http://plasserre.developpez.com/v0-0.htm (1 sur 6) [01/03/2005 14:39:44]

Site

excutables qui utilisent des fentres Windows: des programmes de traitement de texte, d'image, de musique, des jeux, de petits utilitaires, des logiciels mtiers (mdicaux)... Nous laisserons de ct les applications 'Web' (en ASP qui utilisent les WebForms) et qui permettent de crer des sites Internet, les applications 'console'..

PLAN DU COURS:
Nous tudierons Windows: donc comment crer une application

On tudiera la notion d'objet, d'vnement.(Section 0.)

On tudiera le langage Visual Basic

. (Section 1.)

On utilisera les objets 'fentre' et les 'divers contrles' pour crer l'interface utilisateur (Section 3.). On dcouvrira la manire de crer une application.(Section 4.) On apprendra crer une classe (Section 5.) On verra comment utiliser les bases de donnes. (Section 6.) voir le Sommaire du cours. On peut s'aider de l'Index pour rechercher un mot cl.

Conseil de lecture :Lire la succession de pages en cliquant sur le bouton Suivant en bas de page. Ne pas hsiter relire plusieurs fois les chapitres.

Quels logiciels utiliser?

http://plasserre.developpez.com/v0-0.htm (2 sur 6) [01/03/2005 14:39:44]

Site

Il y a plusieurs manires de faire du VB.NET:

Acheter

Visual Studio.Net 2003

de Microsoft, il contient une interface de dveloppement (IDE) (programme permettant d'crire un logiciel et de crer un programme excutable) Il comporte: VB.Net mais aussi C#.Net. Il existe des versions d'initiation', 'professionnelle', 'entreprise', 'architect'.

Ce cours utilise Visual Studio.Net 2003 Nous allons apprendre utiliser

Visual Basic

.NET version 7.1 2002 avec le Framework 1.1


de 2002.
C'est trs cher. Il est possible de faire un essai gratuit de 60 jours de VisualStudio.Net 2003.

Visual Studio Express 2005 de Microsoft, Bta gratuite base sur la


Tester bta du Framework 2.0 Dans Visual Studio il y a Visual Basic 2005 qui est la futur version VB. La version Express est une version allge pour dbutant. Gratuite?, La Bta est gratuite elle. Nouveau Framework, avec nouvelle Class. Elle ne contient que le VB .(il existe VisualWeb Express

http://plasserre.developpez.com/v0-0.htm (3 sur 6) [01/03/2005 14:39:44]

Site

par ailleurs). Dans Visual Studio il y a aussi Visual C#.. Tlchargement gratuit

L'alternative gratuite:

SharpEditor

Installer un logiciel de dveloppement gratuit:

SharpEditor par exemple,SharpDevelop le configurer pour qu'il marche en VB (il supporte VB et C#). voir l'"IDE #develop" ou la tlcharger? comment l'installer et l'utiliser?

Utiliser

C#Builder de

Borland.

C# Builder est l'IDE .NET de Borland.L'dition personnelle de C# builder est entirement gratuite mais limite des dveloppements non commerciaux en VB ou C#. Il existe des versions payantes plus puissantes.

http://plasserre.developpez.com/v0-0.htm (4 sur 6) [01/03/2005 14:39:44]

Site

Tlcharger la version personnelle gratuite (usage non profesionnel)

Un produit part: de Microsoft, il est gratuit:

WebMatrix

Cet outil permet de dvelopper des

applications WEB (des pages


Internet) en ASP.NET, en C# et VB.NET. Vous trouverez des informations supplmentaires ici. Si j'ai bien compris: dans une page HTML, l'ASP gre les contrles, le code des procdures peut tre en VB. Il ne permet pas d'utiliser des WebForms et d'crire des applications Windows. ASP.NET Web Matrix ncessite le Microsoft .NET Framework, 1.1 et

http://plasserre.developpez.com/v0-0.htm (5 sur 6) [01/03/2005 14:39:44]

Site

tourne sur Windows Server 2003, Windows 2000, et Windows XP operating systems.

Tlcharger et installer WebMatrix

Help : Avez-vous utilis WebMatrix C#Builder ? de votre exprience.

Merci

Quel logiciel choisir? Lire le comparatif C#Builder versus VisualStudio

Que faut-il pour dvelopper avec Visual Basic.net?


Pour dvelopper avec Visual Studio 2003 il faut Windows XP ou 2000 avec au minimum 256 Mo de mmoire vive. Un grand cran (vu le nombre de fentres) est conseill. Les excutables fonctionnent sous Windows 98, XP, 2000.

http://plasserre.developpez.com/v0-0.htm (6 sur 6) [01/03/2005 14:39:44]

Cours VB.Net

Cours VB.NET
Dmarrer le cours Home Page Qui est l'auteur ? Lui envoyer un mail

Sommaire.

Introduction , page de prsentation.

Introduction: dbutez ici


0-0 Qu'allons nous tudier? Avec quoi dvelopper en VB.Net? Configuration ncessaire? 0-1

Les 'Objets.'

Principe et structure des programmes.


1-1 Programmation vnementielle: le premier programme. 1-2 Les instructions, les procdures . Les 'Sub' , les 'Function' 1-2-2 Les modules

Environnement de dveloppement de Visual Studio 1d bis Environnement de dveloppement de SharpDevelop (alternative gratuite)
1-d

Le langage Visual Basic


1-3 Introduction 1-4 Les 'Algorithmes'. 1-5 L'affectation. 1-6 Les variables. 1-6.1 Variables 'String' et 'Char' 1-6.2 Variables Numriques 1-6.3 Conversion 1-6.4 Les 'Tableaux' 1-6.5 Les 'Collections'

http://plasserre.developpez.com/vsommair.htm (1 sur 4) [01/03/2005 14:39:56]

Cours VB.Net

1-6.6 Les 'Structures' 1-6.7 Attention au type valeur ou rfrence 1-6.8 Variable 'Object' et autre

1-7 Soyons strict et explicite. 1-8 Les constantes. 1-9 Surcharge. 1-10 Les oprateurs. 1-11 Les structures de contrle. 1-12 Revenons sur les procdures et leurs paramtres. 1-13 Porte des variables. 1-14 Les nombres alatoires 1-15 La 'Rcursivit' 1-19 Faut-il oublier le GOTO 1-20 Espace de noms, Classes, Objet

Exemple de petites routines.


E 1-1 Petites routines d'exemples trs simple E 1-2 Petits programmes mathmatiques E 1-3 Tri et recherche dichotomique E 1-4 Calculs financiers simples

L'interface utilisateur.
3-1 Introduction. 3-2 Les feuilles ou 'Formulaires'. 3-3 Les 'Boutons'. 3-4 Les 'TextBox' 3-5 Les 'Labels' 3-6 Les cases cocher. 3-7 Les 'Listes'. 3-8 Boites toutes faites. 3-9 Regroupement de contrles. (comment crer des groupes de contrles). 3-10 Dimensions, position des contrles. 3-11 Main Menu, ContextMenu 3-12 Avoir le Focus 3-13 Barre de bouton , barre de status. 3-14 Les images

Rsumons, rvision pour y voir plus clair:


3-30 Structuration des programmes+++ Exemple dtaill: Calcul de l'IMC++

http://plasserre.developpez.com/vsommair.htm (2 sur 4) [01/03/2005 14:39:56]

Cours VB.Net

3-31 Ordre des instructions dans un module: rsum.

Exemple de petits programmes.


E 3-1 Conversion F/ (Une fentre) E 3-2 Calcul mensualits d'un prt.(les fonctions financires de VB)

Pour faire un vrai programme il faut savoir:


4-1 4-2 4-3 4-4 Dmarrer ou arrter un programme. Procdure Main(). Ouvrir une autre fentre. Traiter les erreurs. Crer une fentre 'multi document'.

4-5 Travailler sur les dates, les heures, sur le temps. 4-6 Lire et crire dans les fichiers (squentiels ou alatoires) 4-7 Travailler sur les rpertoires 4-8 Afficher correctement du texte 4-9 Modifier le curseur 4-10 Lancer une autre application, afficher une page Web 4-11 Imprimer 4-12 Dessiner 4-13 Faire une aide pour l'utilisateur 4-14 Appeler un API 4-15 Faire du glisser-dplacer (Drag&Drop)

4-20 Dboguage ( ou comment rechercher les 'Bugs')

Pour diffuser le programme, il faut:


D-1 Comprendre le FrameWork D-2 Distribuer l' application

Autres exemples
E 4-1 Horloge numrique E 4-2

Cration de Classes, composant, Programmation objet


5-1 Programmation oriente objet 5-2 Crer une Classe 5-3 Crer un composant (Bibliothque de Classe et de Contrles) 5-4 Les interfaces

5-10 Programation 'fonctionnelle' ou 'objet'? Un gros morceau: les bases de donnes

http://plasserre.developpez.com/vsommair.htm (3 sur 4) [01/03/2005 14:39:56]

Cours VB.Net

6-1 6-2 6-3 6-4 6-5 6-6

Notion sur les bases de donnes Gnralits sur ADO.NET Syntaxe SQL Lire rapidement en lecture seule: le DataReader Travailler sur un groupe de donnes: le DataSet Contrles (DataGrid, ListBox..) et base de donnes.

Migration VB6=>VB.NET
7-1 Diffrences entre VB6 et VB.net; Migration.

Rgles de bonne programmation Optimisation.


7-2 Rgles de bonne programmation. 7-3 VB.net est-il rapide? Optimiser le code en vitesse. 7-4 Chronomtrer du code

Allons plus loin (Mais pas de problmes, vous tes des bons!!!)
8-1 Porte des procdures 8-2 Comprendre le code gnr par VB 8-3 Crer des contrles par code.

Dmarrer le Cours.

Envoyer un mail P. LASSERRE

http://plasserre.developpez.com/vsommair.htm (4 sur 4) [01/03/2005 14:39:56]

Page d'accueil site LDF

Site

:.

Site du Dr Lasserre Philippe: Programmation pour tous et informatique du mdecin.

Cours de

Visual logiciel de Basic.Net comptabilit LDF distribu en


Apprenez programmer. Shareware.

Dcouvrir et tlcharger le

Dictionnaire mdical gratuit pour


correcteur d'orthographe Word. plus de 15 000 mots.

La page de

Mdiwin : Trucs,
astuces pour les utilisateurs de ce logiciel de cabinet mdical.

Qui est l'auteur de ce site ?

http://plasserre.developpez.com/index.htm [01/03/2005 14:40:05]

vbintro

Site

Cours : VB.net
Les objets

0.1

VB utilise la notion d''OBJET'.

Pour bien comprendre ce quest un objet, nous allons prendre des exemples dans la vie courante puis nous passerons des exemples dans Visual Basic. voiture est un objet, cet objet existe, on peut l'utiliser.
Ma

fait partie des voitures, du type, du genre 'voiture'. Les 'voitures' cest une classe dobjet (Class) qui a ses caractristiques : cest en mtal, a roule en transportant des passagers mais je ne peux pas utiliser 'les voitures'.
Ma voiture De manire gnrale, une classe est une reprsentation abstraite de quelque chose, tandis qu'un objet est un exemple utilisable de ce que reprsente la classe.

Pour fabriquer ma voiture, je prends les caractristiques de la class voitures (cest comme un moule) et je fabrique (jinstance) une voiture, je la nomme MaVoiture.
Dim MaVoiture As New voitures

http://plasserre.developpez.com/v0-1.htm (1 sur 9) [01/03/2005 14:40:44]

vbintro

Dclare MaVoiture comme un nouvel objet de type 'voitures'

Class

-->

Objet

Type 'voitures'--> Objet 'Mavoiture'

Proprits (Attributs):
Prenons MaVoiture. Elle a des proprits : une marque, une couleur, une puissance Pour indiquer la couleur de ma voiture on utilise la notation : MaVoiture.couleur
Syntaxe : Objet.Proprit (Il y a un point entre les 2 mots)

Pour modifier la couleur et avoir une voiture verte on crit : MaVoiture.couleur= "Vert"

Et la voiture devient verte !!


http://plasserre.developpez.com/v0-1.htm (2 sur 9) [01/03/2005 14:40:44]

vbintro

MaVoiture.Phares.Avant indique les phares avant de la voiture. MaVoiture.Phares.Avant.Allum indique ltat des phares (Allum ou non) Si je fais : MaVoiture.Phares.Avant.Allum=True (Vrai) cela allume les phares.

Mthodes :
MaVoiture fait des choses : elle roule par exemple. Pour faire rouler la voiture jappelle la mthode Roule MaVoiture.Roule Si cest possible pour cette mthode je peux indiquer quelle vitesse la voiture doit rouler : MaVoiture.Roule(100) jai ajout un paramtre. Le paramtre est un renseignement envoy avec la mthode. Il est possible parfois dindiquer en plus si la voiture doit rouler en marche avant ou en marche arrire. MaVoiture.Roule(10, Arriere)

http://plasserre.developpez.com/v0-1.htm (3 sur 9) [01/03/2005 14:40:44]

vbintro

Il y a donc 2 manires dappeler la mthode Roule : avec 1 ou 2 paramtres, on dit que la mthode est surcharge; chaque manire d'appeler la mthode s'appelle 'signature'.

Evnement:
Des vnements peuvent survenir sur un objet. MaVoiture_dmarre est un vnement, quand la voiture se met en route (si par exemple j'ai fait MaVoiture.Roule(10, Arriere)), cet vnement dmarre se dclenche automatiquement.

Tous cela ce sont des images, mais voila, vous avez compris ce quest un objet !

Et dans Visual Basic.net:


Une application Windows se compose de fentres (nommes aussi formulaires) dans lesquelles se trouvent des contrles (bouton, liste, texte)
Exemple de fentre avec 2 boutons, une zone de texte (un label) et une icne:

Dans une application Windows, il y a aussi des lignes de code utilisant des variables pour faire des calculs.

http://plasserre.developpez.com/v0-1.htm (4 sur 9) [01/03/2005 14:40:44]

vbintro

En Visual Basic.net tout est objet : les fentres (on dit les formulaires), les variables, les contrles (les boutons, liste, image, case cocher..)
...

Il faut un moule pour faire un objet. Le moule cest une classe. Le moule va servir crer un objet,on dit une instance. On peut crer, instancer une multitude dobjets avec le mme moule. Pour crer, dmouler un objet, on utilise les mots cl Dim et As New. Dim objet As New Classe New est un constructeur. Exemple : crer une fentre (un formulaire) : Je dessine une fentre FormDmarrage (c'est la Classe, le moule) puis Dim F As New FormDmarrage
Cre

une fentre qui se nomme 'F' partir du moule, du modle (FormDmarrage) que jai dessin.

http://plasserre.developpez.com/v0-1.htm (5 sur 9) [01/03/2005 14:40:44]

vbintro

Autre exemple : Dim B as New Buttons Crer un bouton avec les attributs habituels des boutons (Class Button)

Troisime exemple:
Comment crer une variable nomme Mavariable pouvant contenir un entier (Integer) Dim MaVariable As New Integer Dim MaVariable As Integer 'est correct aussi

Ici, pour une variable, on remarque que New peut tre omis

Tout objet a des proprits.


On utilise la syntaxe : Objet.Proprit (Il y a un point entre les 2 mots)

F.BackColor de la fentre.

indique la couleur de fond

Sil y a un bouton, la couleur de fond du bouton sera : Bouton.BackColor Ou F.Bouton.BackColor

Noter la syntaxe : La couleur du bouton qui est dans la fentre F


http://plasserre.developpez.com/v0-1.htm (6 sur 9) [01/03/2005 14:40:44]

vbintro

Comment modifier cette proprit? Bouton.BackColor=Red bouton 'modifie la couleur de fond du

Autre exemple:
La proprit Visible: si elle a la valeur True (Vraie) l'objet est visible si elle est False l'objet n'est pas visible. Bouton.Visible=False 'fait disparatre le bouton <==Ici il y a un bouton invisible!! oui, oui!!

Les

objets ont des mthodes parfois.

Prenons un exemple simplifi. Les Listes ( liste droulante) ont une mthode Clear qui permet de les vider. Si je veux vider toutes les lignes d'une liste nomm Liste1, je fais: Liste1.Clear 'Le concept est exact mais l'exemple est un peu simplifi!

Les proprits et mthodes se nomment les membres

http://plasserre.developpez.com/v0-1.htm (7 sur 9) [01/03/2005 14:40:44]

vbintro

d'un objet.

Certains objets ont des vnements:


Reprenons notre bouton. Quand l'utilisateur click dessus, l'vnement Bouton_Click survient. Ce sont les objets contrles (bouton, case cocher..)et les formulaires qui ont des vnements.

Interface et implmentation: Ce que je vois de l'objet, c'est son interface (le nom des proprits, mthodes..) exemple: la mthode Clear fait partie de l'interface d'une ListBox. Par contre le code qui effectue la mthode (celui qui efface physiquement toutes les lignes de la listeBox),ce code se nomme implmentation, lui n'est ni visible ni accessible.

Visibilit: Quand un objet est cr, il est visible et utilisable, uniquement dans la partie du programme o il a t dfini. Par exemple habituellement, je peux voir et modifier la couleur d'un bouton uniquement dans le code de la fentre ou il est situ. Pour les variables on parle de porte: la variable peut tre locale (Private) ou de porte gnrale ('Public') visible partout.

En rsum :
En Visual Basic.net tout est objet.

http://plasserre.developpez.com/v0-1.htm (8 sur 9) [01/03/2005 14:40:44]

vbintro

Les Classes sont des types d'objet. Pour crer un objet partir d'une Classe, il faut utiliser les mots cl Dim ..As New: Dim Objet As New Class

Un objet a : Des proprits. Des mthodes.


Des vnements.

http://plasserre.developpez.com/v0-1.htm (9 sur 9) [01/03/2005 14:40:44]

Cours VB

Cours VB.net
Index.
Home Page

A. Affectation Abs Ado Add (collections) Addhadler Anchor AppActivate Arrt programme Array ArrayList Asc AscW Assignation Attributes B. BackColor BinarySearch Bottom Button_Click By Val By Ref C. Catch CBool

http://plasserre.developpez.com/vindex.htm (1 sur 8) [01/03/2005 14:45:47]

Cours VB

CByte CChar CDate CDbl CDec Check CheckBox CheckChanged CheckedListBox Ceiling Chane de longueur fixe Chane de longueur fixe(fichier) Char ChDir ChrW CInt

Clear Clone Close


CLng

Code manag
CObj

Configuration ncessaire pour faire du VB


Combo Compare

Concat
Configuration minimale pour faire du VB.Net

Const
Constructeur (structures)

Constructeur(Classe)
ContainsKey ControleBox Copy Copy(fichier) Cos Couleurs (constantes) Collections

CultureInfo (classe) Create CreateDirectory


CreateInstance CShort CSng CStr

CType Cursor (classe) CurrentDirectory

http://plasserre.developpez.com/vindex.htm (2 sur 8) [01/03/2005 14:45:47]

Cours VB

D. DataReader DataSet DateTime Debug (classe)


Dlgu Dequeue DialogResult Dir Directory Directory (classe) DirectoryInfo (classe) DirectoryName Dispose Dock Do Loop E. Enabled Encapsulation EndTrim EnQueue Enum EOF Espace de nom Evnement Events Environment (classe) Exceptions Exist F. Fentre de dmarrage Fentre MDI Fentre Splash File FileClose FileCopy FileGet FileInfo FileLen FileOpen FilePut Finally Fix Flag FlatStyle

http://plasserre.developpez.com/vindex.htm (3 sur 8) [01/03/2005 14:45:47]

Cours VB

Floor Flush Focus For Each ForeColor Form_Activate Format Form_Load FormBorderStyle For Next Font Fonctions financires Framework Friend Function G. Get(classe) GetChar GetCurrentDirectory GetDirectories GetFile GetParent GetProcessByName GetProcesses GetType GetValue GetUpperBound GroupBox Groupe de contrle (comment remplacer le groupes de contrle de VB6) H. Handles HashTable Height Hritage Heure I. Icon If Then Iif IndexOf IndexOf (tableau) ImageList Imports Implementation InputBox
http://plasserre.developpez.com/vindex.htm (4 sur 8) [01/03/2005 14:45:47]

Cours VB

Int Interface Instr InstRev Is IsNumeric IsReference Item Items

L. Label LCase Len Left Left(contrle) like LineInput LinkArea LinkClicked Linklabel ListBox ListView Location LOF Ltrim Length LSet M. Main() Sub MainMenu Math Espace de noms Max MaxLenght MaximizeBox MaxValue MDI MessageBox Mthodes Mid Min MinimizeBox MinValue MkDir Mod Modale (fentre)

http://plasserre.developpez.com/vindex.htm (5 sur 8) [01/03/2005 14:45:47]

Cours VB

Module Standard Move(fichier) MsgBox Multiline N. Name Now O. On error OpenFileDialog Open Option Compare Option Explicit Option Strict Overloads Overrides Overrides Owner P. Panel ParamArray Par Valeur Par Rfrence By Val Parse Path (classe) Peek PictureBox PictureBox Poke Polymorphisme Pow Private Print Property Proprits Process(classe) Protected Public Push Q. Queue R. RadioButton Read Recherche dichotomique Rcurssivit
http://plasserre.developpez.com/vindex.htm (6 sur 8) [01/03/2005 14:45:47]

By Ref

Cours VB

Refrences Refresh Rename Replace Return Reverse Round Right Right(contrle) RSet RichTextBox RTF Rtrim S SaveFileDialog StartPosition ScrollBars Select Select Case Sender Set(classe) SetValue Shell Signature Sin Sign Sort Sorted (ListBox) SortedList Space Split Spliter Sqrt Stack StartTrim Statique(classes) StatusBar StrCom StrDup Stream StreamReader StringCollection StrRevers Str Structure Sub Sub Main() SubString

http://plasserre.developpez.com/vindex.htm (7 sur 8) [01/03/2005 14:45:47]

Cours VB

Surcharge Switch T. TabControl TabStop Ticks TimeSpan ToDay ToolBar Tag Text TextAlign ToLower Top TopMost ToString ToString ToUpper Trace (classe) TransparentColor TreeState Tri (routine de) Try Type primitif Trim U. Ubound Unicode Ucase V. Val View Visible W. Width WindowState With WithEvents Write WriteLine

Dmarrer le Cours.
http://plasserre.developpez.com/vindex.htm (8 sur 8) [01/03/2005 14:45:47]

vbintro

Site

Cours : VB.net

Les 1.1 vnements


Nous allons comprendre la programmation

vnementielle: Comment fonctionne Visual Basic:


- Ce que voit l'utilisateur. - Ce qu'a fait le dveloppeur pour arriver ce rsultat.

Principes de la programmation VB
Le programmeur va dessiner linterface utilisateur (fentre, bouton, liste..), il va ensuite uniquement crire les actions effectuer quand certains vnements se produisent sur cette interface. Cest Visual Basic qui va entirement soccuper de la gestion des vnements.

Exemple :le premier programme: Il affiche 'Bonjour' quand on clique sur un bouton.

http://plasserre.developpez.com/v1-1.htm (1 sur 8) [01/03/2005 14:46:09]

vbintro

C'est pas original: le premier programme, dans tous les cours d'informatique, permet d'afficher 'Bonjour' (ou 'Hello Word').
q

Que voit l'utilisateur du programme?

Lutilisateur final, celui qui utilise le logiciel, voit une fentre avec un bouton, Si il appuie sur ce bouton il voit safficher Bonjour .

Que se passe t-il dans le programme?

clique sur le bouton cela dclenche automatiquement un vnement. (Button1_Click), cet vnement contient du code qui affiche Bonjour .
q

Quand l'utilisateur

Que doit faire le programmeur pour arriver ce rsultat?

Pour atteindre ce rsultat, le programmeur va dessiner la fentre, le bouton, la zone d'affichage du texte (un label) puis il va simplement indiquer dans l'vnement Button_Click d' afficher Bonjour .

Le fait de dterminer la procdure appeler ou de raliser lappel est entirement pris en charge par VB.

En pratique, que fait le programmeur:

http://plasserre.developpez.com/v1-1.htm (2 sur 8) [01/03/2005 14:46:09]

vbintro

Le programmeur est en mode 'conception' (ou mode Design):Il crit le programme :

A- Il dessine linterface utilisateur


(Ce que verra lutilisateur final, c'est l'interface utilisateur : une fentre avec des boutons, des listes, du texte..) :

Il cre

une fentre :

Menu Projet, Ajouter un formulaire Windows, cliquer sur Windows Form, une fentre Form1 apparat.
Il ajoute

un bouton :

Pour cela il utilise la Boite outils:

http://plasserre.developpez.com/v1-1.htm (3 sur 8) [01/03/2005 14:46:09]

vbintro

Il clique

bouton clique lcher souris

sur Boite Outils gauche , Windows Forms, puis bouton Button, il dans Form2, dplace le curseur sans le bouton, puis lche le bouton de la : le dessin d'un bouton apparat.

Pour lexemple,Il ajoute un label. Un label est un contrle qui permet dafficher un texte. Comme pour le bouton il clique sur Boite Outils gauche, bouton Windows Forms, bouton Label et met un contrle label sur la fentre.

B- Il va crire le code aux vnements :

correspondant

Il double-clique sur le bouton qu'il a dessin : Une fentre de conception de code souvre et il apparat :

http://plasserre.developpez.com/v1-1.htm (4 sur 8) [01/03/2005 14:46:09]

vbintro

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End Sub Cela correspond la procdure (entre Sub et End Sub) vnement qui, quand le programme fonctionne, est automatiquement dclenche quand lutilisateur du logiciel clique sur le bouton1.
Une procdure est un ensemble de lignes de code qui commence par Sub et se termine par End Sub (ou Function..End Function).

Comment indiquer dans cette procdure d'afficher "Bonjour"?


Le label possde une proprit nomm '.text' qui contient le texte afficher.

le code qui modifie cette proprit '.text' , qui y met la chane de caractre "Bonjour": Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "Bonjour" End Sub
Cela

Il faut taper

donne:

http://plasserre.developpez.com/v1-1.htm (5 sur 8) [01/03/2005 14:46:09]

vbintro

Voila votre premier programme est crit.

Comment excuter ce programme? Il est possible de tester immdiatement le programme en mode dboguage, sans quitter l'environnement de dveloppement:

Utiliser le menu Dboguer puis Dmarrer qui lance lexcution du programme.


On peut aussi taper sur

F5 pour lancer le

programme.
Ou plus simplement cliquer sur la flche:

C'est plus rapide, lancer l'excution avec le premier bouton, le second servant arrter temporairement l'excution, le troisime terminer l'excution.

Quand le programme est totalement crit, termin, test, il est possible de le compiler et ainsi de crer un fichier excutable (possdant une extension '.exe') qui fonctionne de manire autonome en dehors de l'environnement de dveloppement.

http://plasserre.developpez.com/v1-1.htm (6 sur 8) [01/03/2005 14:46:09]

vbintro

C'est ce fichier excutable qui est fourni l'utilisateur. Par opposition le code crit par le programmeur, compos d'instructions Visual Basic, se nomme le code source.

En mode excution : Lutilisateur voit bien une fentre avec un bouton, sil clique dessus, Bonjour saffiche.

En rsum :
Le programmeur utilise des outils de dessin pour construire une interface utilisateur : des fentres avec des contrles dessus: menus, boutons, case cocher.. VB, pour chaque fentre ou pour chaque contrle, gnre une liste dvnements, (Evnement li au chargement d'une fentre, vnement li au fait de cliquer sur un bouton, vnement survenant quand on modifie un texte...) Il suffit, dans la procdure vnement qui nous intresse, dcrire le code qui doit tre effectu lorsque cet vnement survient.

Comme nous lavons vu le code sert agir sur linterface (Afficher un texte, ouvrir une fentre, remplir une liste, un tableau), mais il peut aussi effectuer des calculs, valuer des conditions et prendre des dcisions, travailler en boucle de manire rptitive et ainsi effectuer les taches ncessaires .

http://plasserre.developpez.com/v1-1.htm (7 sur 8) [01/03/2005 14:46:09]

vbintro

http://plasserre.developpez.com/v1-1.htm (8 sur 8) [01/03/2005 14:46:09]

Cours Vb Net

Site

Cours : VB.net

Les 1.2 instructions,les procdures


Qu'est ce qu'une instruction , une procdure? Quelle diffrences entre les procdures: lies aux vnement? Les procdures non lies? Les 'Sub', les 'Functions'.

Les instructions:
Une instruction est le texte permettant d'effectuer une opration, une dclaration, une dfinition. Dim A As Integer A=1 opration. est une instruction (de dclaration) est aussi une instruction qui effectue une

C'est habituellement une 'ligne de code' 'excutable'. Une instruction est excute lorsque le programme marche. Plusieurs instructions peuvent se suivre sur une mme ligne, spares par ':' Dim B As String : B="Bonjour" Quand un programme tourne, les instructions sont effectues ligne par ligne. Pour mettre des commentaires dans un programme, on le fait prcder de ':

http://plasserre.developpez.com/v1-2.htm (1 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

'Ceci est un commentaire, ce n'est pas une instruction. Le commentaire ne sera pas excut.

Les procdures:
Une procdure est un ensemble d'instructions, de lignes de code, un groupement d'instructions bien dfinies effectuant une tache prcise. Les procdures sont bien dlimites: Il y en a de 2 sortes: Les procdures Sub: Elles dbutent par le mot Sub et se terminent par End Sub. Les procdures Function: Elles dbutent par Exemple: Sub Maprocdure A=1 End Sub Exemple concret d'une procdure: la procdure Button_Click du premier programme.(Celui qui affiche 'Bonjour'; elle ne contient qu'une ligne de code. Le mot Sub est prcd de Private, on verra plus loin ce que cela signifie. Function et se terminent par End Function.

Vous avez vu que lon peut dessiner l'interface, une fentre Form1 par exemple. En mode conception, aprs avoir dessin linterface, on doit avoir accs aux procdures.

http://plasserre.developpez.com/v1-2.htm (2 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Si on procdures clique sur apparatre

double-clique sur la fentre, on a accs aux vnement lies cette fentre, si on doubleun objet (bouton, case cocher on voit les procdures vnement de ce contrle.

Quand on voit ces procdures, on peut y

inclure du code.

Nous allons voir qu'il y a 2 types de procdures: les procdures lies aux vnements et celles qui ne sont pas lies.

Procdures lies aux vnements.


Si on double clique sur le fond dune fentre,(Celle du programme 'Bonjour') on voit apparatre les procdures lies cette fentre et aux contrles contenus dans cette fentre : Public Class Form1 Inherits System.Windows.Forms.Form Dim a As String #Region " Code gnr par le Concepteur Windows Form " Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Label1.Text = End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Label1.Text = "Bonjour" End Sub End Class

Dtaillons:

On voit 3 parties:
q

Public Class Form1

http://plasserre.developpez.com/v1-2.htm (3 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Ce nest pas une procdure mais la dfinition de la fentre.


La fentre fait partie des Windows.Forms.Form.. Ces lignes sont gnres automatiquement par VB. Si vous droulez cette partie, en cliquant sur le petit +, vous pouvez lire le code permettant de crer la fentre, les contrles.. C'est gnr automatiquement par VB. (le chapitre 8-2 explique en dtails le code gnr par VB, mais c'est complexe pour les dbutants pour le moment!!)
q

Private Sub Form1_Load Chaque fentre a une procdure Form_Load qui est excute lorsque la fentre est charge, on y met gnralement le code initialisant la feuille. Il y a bien dautres procdures lies la fentre : Drouler la liste box en haut gauche de la fentre de code, cliquer sur (Form1 events), si vous droulez maintenant la liste droite vous aurez tous les vnements qui gnrent une procdure : Load de la fentre Unload de la fentre Activated devient active GotFocus prend le focus Lors du chargement

Lors du dchargement

Lorsque la fentre

Lorsque la fentre

Resize Lorsque la fentre est redimensionne

http://plasserre.developpez.com/v1-2.htm (4 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Private Sub Button1_Click Cest la procdure lie au bouton et qui contient le code effectuer quand lutilisateur clique sur le bouton. Cest l que lon crit le code qui doit seffectuer lorsque lutilisateur clique sur le bouton. De la mme manire que pour la fentre, vous pouvez voir dans la liste en haut, tous les vnements lis aux boutons qui gnrent une procdure : Click Lorsque l'utilisateur clique sur le bouton. DoubleClick Lorsque l'utilisateur double-clique sur le bouton. MouseDown se dclenche si appui du bouton de la souris MouseUp se dclenche si relchement du bouton de la souris

On voit donc que le formulaire (la fentre) et tous les contrles d'une application ont chacun des procdures pour chaque vnement qui peut survenir.

Procdures non lies:


Parfois on a besoin de code qui fait une tche particulire, qui est utilis plusieurs endroits et qui nest pas lie un vnement. On cre dans ce cas une procdure indpendante des vnements.

http://plasserre.developpez.com/v1-2.htm (5 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Le systme des procdures permet aussi de dcouper un problme complexe en quelques fonctions moins complexes et indpendantes les unes des autres. Ces procdures sont en fait des sous-programmes : si une ligne appelle une procdure, le programme saute au dbut de la procdure, il effectue le code de la procdure puis revient juste aprs la ligne qui avait appel la procdure et continue les lignes suivantes. Exemple : plusieurs fois dans le programme jai besoin de calculer la surface dun cercle partir de son rayon et de lafficher sur un label. Plutt que de retaper dans chaque procdure le code, je peux crer une procdure 'Sub' nomme AfficheSurfaceCercle. Il suffit ensuite si ncessaire dappeler la procdure qui effectue le calcul et affiche le rsultat puis revient effectuer le code situ aprs lappel. Comment appeler une procdure?
Par Call NomdeProcedure() NomdeProcedure() Call est facultatif. Noter les parenthses aprs le nom de la procdure. ou par

Procdures Sub :
Comment crer cette procdure Sub? Dans la fentre de code, tapez : Sub AfficheSurfaceCercle Sub AfficheSurfaceCercle() End sub Le code de la procdure est compris entre le Sub et le End Sub. Pour que le calcul se fasse, il faut fournir, (transmettre de la procdure qui appelle la procdure Sub) la valeur du rayon.
http://plasserre.developpez.com/v1-2.htm (6 sur 10) [01/03/2005 14:46:18]

puis validez. Vous obtenez :

Cours Vb Net

Pour indiquer que la Sub doit recevoir un paramtre (un argument en VB) ajouter entre les parenthses : Sub AfficheSurfaceCercle( Rayon as Single) Cela signifie quil existe une procdure qui reoit comme paramtre une variable de type Single (Rel simple prcision) contenant le Rayon.

Ajouter le code : Label.text =(3.14*Rayon*Rayon).ToString

Que fait cette ligne ?


Elle fait le calcul: '3.14*Rayon*Rayon' ('*' signifie multiplier), on transforme le rsultat en chane de caractres (grce '.ToString') que lon met dans la proprit .text du label : Cela affiche le rsultat. (On verra toute cette syntaxe en dtail ultrieurement)

On obtient: Sub AfficheSurfaceCercle( Rayon as Single) Label.text =(3.14*Rayon*Rayon).ToString End sub

Comment appeler cette Sub?

Nimporte quelle procdure pourra appeler la Sub AfficheSurfaceCercle en envoyant la valeur du rayon afin d'afficher la surface du cercle dans un label. Exemple dappel pour un rayon de 12 : AfficheSurfaceCercle(12) Affiche dans le label: 452.16

http://plasserre.developpez.com/v1-2.htm (7 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Procdures 'Function' :
Parfois on a besoin que la procdure retourne un rsultat, qu'elle donne en retour un rsultat la procdure appelante. . Dans ce cas on utilise une Fonction. Exemple: je veux crer une fonction qui je fournis un rayon et avoir en retour la surface d'un cercle.
Comment crer cette Function?

Tapez Function SurfaceCercle puis validez, ajouter (Rayon As Single) Tapez Return 3.14*Rayon*Rayon Ce que la fonction doit retourner est aprs Return (ce que la procdure doit renvoyer la procdure appelante.) On obtient la fonction complte: Function SurfaceCercle( Rayon as Single) Return 3.14*Rayon*Rayon End Function
Comment appeler cette Function? Dans la procdure qui appelle, il faut une variable pour rcuprer la valeur retourner par la Fonction: S= NomdelaFonction()

Nimporte quelle procdure pourra appeler la fonction et obtenir le rsultat dans la variable S par exemple pour un rayon de 12 :
Dim S As Single

S=SurfaceCercle(12)
On appelle la fonction SurfaceCercle en envoyant le paramtre '12', ce qui fait que l'entre de la fonction, Rayon=12, le calcul est effectu et le rsultat du calcul (452.16) est retourn grce Return. S rcupre ce rsultat.

Aprs l'appel de cette fonction, S est gal 452.16

http://plasserre.developpez.com/v1-2.htm (8 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Il est possible de spcifier le type retourn par la fonction: Function SurfaceCercle( Rayon as Single) As Single que la fonction retourne un Single. Il faut donc que la variable qui reoit la valeur retourne (S dans notre exemple) soit aussi un Single.
As Single en fin de ligne aprs () indique Il existe une autre manire de retourner le rsultat d'une fonction, reprenons l'exemple prcdent, on peut crire:

Function SurfaceCercle( Rayon as Single) SurfaceCercle= 3.14*Rayon*Rayon


Exit Function

End Function
Ici on utilise le nom de la fonction pour retourner le rsultat , avec un signe '='. Utilisez plutt la mthode Return.

Exit Function permet aussi de sortir de la fonction, cela a le mme effet que Return sauf que Return peut tre suivi d'un argument de retour (et pas Exit Function).

Module standard :
La sub AfficheSurfaceCercle affiche le rsultat dans le formulaire o elle est situe. Par contre la fonction SurfaceCercle est dintrt gnral, nimporte quelle procdure doit pouvoir lappeler, de plus elle nintervient pas sur les contrles des formulaires et nest donc pas lie aux formulaires. On la placera donc dans un module standard qui est un module du programme qui ne contient que du code. (Pas dinterface utilisateur)

http://plasserre.developpez.com/v1-2.htm (9 sur 10) [01/03/2005 14:46:18]

Cours Vb Net

Pour crer un module standard Menu Projet>Ajouter un module. Y mettre les procdures.

Private Public :
Avant le mot Sub ou Function on peut ajouter : Private indiquant que la procdure est accessible uniquement dans le module. Cest donc une procdure prive. Les procdures lies aux vnements dune feuille sont prives par dfaut.

Public indiquant que la procdure est accessible partir de toute lapplication. Sil ny a rien devant sub la procdure est publique

Remarques :
Pour sortir dune procdure Sub avant la fin utiliser Exit Sub (Exit Function pour une fonction).
12-Quand vous appelez une procdure, il faut toujours mettre des parenthses mme s'il n'y a pas de paramtres. FrmSplash.ShowDialog () Eventuellement on peut faire prcder l'appel du mot cl Call, mais ce n'est pas obligatoire. Call FrmSplash.ShowDialog ()

http://plasserre.developpez.com/v1-2.htm (10 sur 10) [01/03/2005 14:46:18]

vbintro

Site

Cours : VB.net
Les modules

1.2.2

Qu'est ce qu'un module? On a vu qu'un programme est dcompos en modules, chaque module contenant des procdures. Chaque module correspond physiquement un fichier '.vb'. Il existe les modules des formulaires. les modules standards. les modules de 'Classe'.

Un programme Visual Basic comporte donc :


q

Les 'Modules de Formulaires':


contenant: Le dessin des fentres de linterface utilisateur (ou

formulaire)contenant les contrles (boutons, listes, zones de texte, cases cocher) Le code qui comprend :

http://plasserre.developpez.com/v1-2-2.htm (1 sur 6) [01/03/2005 14:46:20]

vbintro

Les procdures lies aux vnements de la feuille (Button_Click..) Les procdures indpendantes des vnements mais qui interviennent sur linterface. Ce sont des Sub() ou des Function().

Les modules standards.

Ils servent de stockage de procdures. Procdures "dintrt gnral". Ces procdures sont des Sub() ou des Function() qui peuvent tre appeles partir de nimporte quel endroit (pourvu qu'elles soient 'Public'). Ils peuvent aussi servir dclarer les objets ou dclarer les variables 'Public' qui seront utilises donc accessibles par la totalit du programme.

les modules de Classe

Ils ont vocation fabriquer des objets, on verra cela plus loin (chapitre 5).

Il y a deux manires de travailler en VB.NET:


http://plasserre.developpez.com/v1-2-2.htm (2 sur 6) [01/03/2005 14:46:20]

vbintro

En programmation 'Fonctionnelle': Chaque problme est dcompos en 'Fonctions'(Les Subs et Fonctions). Ces fonctions sont stockes dans des modules standards (ou dans les modules de formulaire). C'est cette approche qui est privilgie jusqu'aux chapitres 4-.. Voir l'exemple ci-dessous. En programmation 'Objet': On le verra dans les chapitres 5-..: on cre ses propres objets dans des modules de Classe, on utilise les membres de ces objets pour programmer.

La mode est la programmation Objet!! Voir le chapitre 5-10 pour approfondir ces notions.

Comment crer un module standard:


Faire Menu Projet>Ajouter un module. Donner un nom au module. C'est Module1.vb par dfaut.
On remarque que le module est bien enregistr dans un fichier .vb Un module standard ne contient que du code. Comment ajouter une Sub dans un module Standard? Taper Sub Calcul puis valider, cela donne: Sub Calcul End Sub

Exemple d'utilisation de procdures et de modules:

http://plasserre.developpez.com/v1-2-2.htm (3 sur 6) [01/03/2005 14:46:20]

vbintro

Crons un petit programme exemple: L'utilisateur saisit un nombre puis il clique sur un bouton; cela affiche le carr de ce nombre:

Il faut crer l'interface utilisateur: crer une fentre (Form1), y mettre un bouton (nomm Button1), une zone de texte (Text1) permettant de saisir un nombre, un label (label1) permettant l'affichage du rsultat. Crer un module standard (Module1) pour y mettre les procdures communes.

On observera uniquement l'agencement des procdures et non leur contenu. Pour un programme d'une telle complexit , la structure aurait pu tre plus simple, mais l'intrt de ce qui suit est didactique.

On dcompose le programme en taches plus simples: En particulier une procdure sert au calcul, une sert l'affichage.

La procdure CalculCarr calcule le carr. La procdure AfficheCarre affiche le rsultat dans le label. La procdure Button1_Click (qui est dclenche par le Click de l'utilisateur): Lit le chiffre tap par l'utilisateur dans la zone texte. Appelle la procdure CalculCarr pour calculer le carr. Appelle la procdure AfficheCarr pour afficher le rsultat.

Ou sont places les procdures? La procdure Button1_Click est automatiquement dans le module du formulaire, Form1 (elle est lie au contrle Bouton1) elle est cre automatiquement quand on cre le bouton. La procdure AfficheCarr est cre dans le module du formulaire (Form1) car elle agit sur le contrle Label1 de ce formulaire. La procdure CalculCarr est cre dans le module Standard (Module1) car elle doit tre appelable de n'importe o; elle est d'ailleurs 'Public' pour cette raison. Elle n'agit sur aucune fentre, aucun contrle, elle est 'd'intrt gnral', c'est pour cela qu'on la met dans un module standard.

http://plasserre.developpez.com/v1-2-2.htm (4 sur 6) [01/03/2005 14:46:20]

vbintro

Voyons le cheminement du programme:

Quand l'utilisateur clique sur le bouton la Sub Button1_Click dmarre. Elle appelle CalculCarre. CalculCarre calcule le carr et renvoie la valeur de ce carr. La Sub Button1_Click appelle ensuite AfficheCarre qui affiche le rsultat.

On remarque: On appelle la Function CalculCarre par

http://plasserre.developpez.com/v1-2-2.htm (5 sur 6) [01/03/2005 14:46:20]

vbintro

Carre= CalculCarre(Valeur) On envoie un paramtre Single , la fonction retourne dans la variable Carre, la valeur du carr. Par contre la Sub AfficheCarre reoit un paramtre, et ne retourne rien puisque c'est une Sub!!

http://plasserre.developpez.com/v1-2-2.htm (6 sur 6) [01/03/2005 14:46:20]

Site

Site

Cours VB.net
L'environnement

1.D

de dveloppement. de Visual Basic.net

C'est l'IDE: Environnement de dveloppement intgr de Visual Studio de Microsoft.

Fentre Projet.
Quand on lance VB.net, le logiciel prsente une fentre Projets qui permet: d'ouvrir un projet existant ou
http://plasserre.developpez.com/v1-d.htm (1 sur 14) [01/03/2005 14:46:24]

Site

de crer un nouveau projet:

Pour un projet Visual Basic normal, il faudra choisir dans les projets Visual Basic 'Application Windows'.

Puis il faut donner un nom au projet, modifier si ncessaire le chemin de l'emplacement du projet qui est par dfaut ' C:\Documents and Settings\Nom Utilisateur\Mes documents\Visual Studio Projects' enfin valider sur 'Ok'.

http://plasserre.developpez.com/v1-d.htm (2 sur 14) [01/03/2005 14:46:24]

Site

Dans un nouveau projet, crer une fentre :


Pour ajouter un fentre (un formulaire) Menu Projet, Ajouter un formulaire Windows, cliquer sur Windows Form, une fentre Form1 apparat ('Form2' pour la seconde feuille).
La zone de travail se trouve au centre de l'cran: C'est l'onglet Form1.vb[Design] ci-dessous qui donne donc accs au dessin de la feuille (du formulaire); on peut ajouter des contrles, modifier la taille de ces contrles..

Voir les procdures:


L'onglet Form1.vb donne accs aux procdures lies Form1.

http://plasserre.developpez.com/v1-d.htm (3 sur 14) [01/03/2005 14:46:24]

Site

La liste droulante de gauche donne la liste des objets, celle de droite, les vnements correspondants. Il est possible en double-cliquant dans le formulaire ou un contrle de se retrouver directement dans le code de la procdure correspondant cet objet.

Ajouter des contrles la feuille


Ajouter un

bouton par exemple:

http://plasserre.developpez.com/v1-d.htm (4 sur 14) [01/03/2005 14:46:24]

Site

Cliquer sur Boite Outils gauche , bouton Windows Forms, puis sur Button,cliquer dans la Form, dplacer le curseur sans lcher le bouton, puis lcher le bouton :

Un bouton apparat.

Modifier les proprits d'un contrle ou du formulaire.

http://plasserre.developpez.com/v1-d.htm (5 sur 14) [01/03/2005 14:46:24]

Site

Quand un formulaire ou un contrle est slectionn dans la fentre Design, ses proprits sont accessibles dans la fentre de proprits droite en bas: Ici ce sont les proprits du contrle 'Button1' (BackColor, Image, Texte..) (on peut les modifier directement.)

Voir tous les composants d'un projet:

http://plasserre.developpez.com/v1-d.htm (6 sur 14) [01/03/2005 14:46:24]

Site

Pour cela il faut utiliser L'explorateur de solution en haut droite, il permet de voir et d'avoir accs au contenu du projet: Form2.vb qui est un formulaire (une fentre). Module1.vb qui est un module standard. Rfrences qui contient les espaces de nom. AssemblyInfo: info ncessaire pour crer un installateur.

Il suffit de cliquer sur la ligne module1.vb dans l'explorateur de solution pour apparatre le module et son code dans la fentre principale.

voir

Si on clique sur un espace de noms dans la liste Rfrences, cela ouvre la fentre Explorateur d'objet qui montre l'arborescence des Classes et une description sommaire en bas de la fentre.

Tester son logiciel:


On peut tester le projet grce : lancer l'excution avec le premier bouton (mode 'Run', le

second servant arrter temporairement l'excution (mode 'Debug'), le troisime terminer l'excution (Retour au mode 'Design' ou 'Conception'). Quand on est en arrt temporaire en mode 'Debug', la ligne courante, celle qui va tre effectue, est en jaune: For i=0 To 100 Label1.Text=i.ToString Next i

http://plasserre.developpez.com/v1-d.htm (7 sur 14) [01/03/2005 14:46:25]

Site

Si on tape la touche F10 (excution pas pas), la ligne 'Label1.Text=i.ToString' est traite et la position courante passe la ligne en dessous. For i=0 To 100 Label1.Text=i.ToString Next i

La sauvegarde du projet se fait comme dans tous les logiciels en cliquant sur l'icne du paquet de disquettes.

Projet et solutions.
Dans la terminologie VB, un projet est une application en cours de dveloppement. Une solution regroupe un ou plusieurs projets (C'est un groupe de projets).

Fichiers, Chemins des sources.


Si vous regardez les fichiers correspondant un projet VB, les extensions sont: .vbproj est le fichier de projet.

.sln est le fichier solution. .vb sont tous les fichiers Visual Basic (Feuille module...)

http://plasserre.developpez.com/v1-d.htm (8 sur 14) [01/03/2005 14:46:25]

Site

Les sources sont par dfaut dans ' C:\Documents and Settings\NomUtilisateur\Mes documents\Visual Studio Projects\nom projet' Si on compile le projet l'excutable est dans un sous rpertoire \Bin

VB propose des AIDES.


Quand on tape du code, VB affiche, quand il le peut, des aides:
q

-VB permet de choisir dans une liste une des proprits d'un objet.

Exemple: Si je cre une variable chane de caractres (Dim Chaine As String , on verra cela plus loin), et que je tape le nom de la variable suivi d'un point: 'Chane.' la liste des mthodes possibles s'affiche. Chaine.

Quand je pointe dans la liste un des membres (proprit ou mthode) un carr jaune affiche la dfinition de la fonction avec ses paramtres et une explication.

http://plasserre.developpez.com/v1-d.htm (9 sur 14) [01/03/2005 14:46:25]

Site

-VB aide retrouver les paramtres d'une fonction: , VB affiche les paramtres possibles dans un cadre.

Si on tape le nom d'une fonction et (

En plus il affiche les diffrentes manires d'utiliser les paramtres (les diffrentes signatures), on peut les faire dfiler avec les petites flches du cadre jaune.
q

-VB aide complter des mots. Si je tape App puis sur le bouton commenant pas App Anchor AnchorStyle AppActivate AppDomain 'A->', Vb affiche la liste des mots

Il existe une abondante documentation:


q

-VB donne accs l'aide sur un mot Cl. Si le curseur passe sur un mot cl, un carr affiche la dfinition de la fonction. Si je clique sur un mot et que je tape F1 l'aide s'ouvre et un long texte donne toutes les explications. -VB donne accs l'aide sur les contrles. Si le curseur est sur un contrle et que je tape F1 l'aide s'ouvre pour donner accs la description des diffrents membres de cet

http://plasserre.developpez.com/v1-d.htm (10 sur 14) [01/03/2005 14:46:25]

Site

objet.
q

-L'aide dynamique est constamment mise jour. Pour la voir, il faut cliquer sur l'onglet 'Aide Dynamique' en bas droite (mme fentre que la fentre proprit). Elle donne une liste de liens en rapport avec le contexte en cours. Enfin il est toujours possible de rechercher des informations en passant de la fentre en haut droite. par les 3 onglets

1. Sommaire (plan , arbre de l'aide) 2. Index (liste des mots) 3. Recherche (rechercher un mot)
(Ici on vient de dcrire l'aide interne; on peut paramtrer le logiciel pour avoir l'aide externe c'est dire que l'aide s'affiche dans une fentre externe l'ide, cela allge les fentres et onglets de l'IDE.)

Erreur.
S'il existe une erreur dans le code au cours de la conception, celle-ci est souligne en bleu ondul. Un carr donne la cause de l'erreur si le curseur passe sur la zone ou se trouve l'erreur.

Ici la proprit 'Text' a t mal orthographie. Si je lance le programme en mode 'Run' et qu'il y a des erreurs, Vb me le signale et rpertorie les erreurs dans la liste des taches en bas.

http://plasserre.developpez.com/v1-d.htm (11 sur 14) [01/03/2005 14:46:25]

Site

Mode dboguage (mode BREAK):


Une fois lance l'excution (F5), puis stoppe (Ctrl +Alt +Pause), on peut: Voir la valeur d'une proprit d'un objet en la slectionnant avec la souris:

Il s'affiche un petit cadre donnant la valeur de la proprit d'un objet. Voir la valeur d'une variable, simplement en positionnant le curseur sur cette variable. Par dfaut on ne peut pas modifier le code en mode Break. On peut l'autoriser en passant par les menus Outils/Options/Dboguage/Modifier&continuer, activer 'M'autoriser modifier des fichiers vb durant le dboguage' mais la modification n'est pas prise en compte sauf si on relance le programme!!! F11 permet l'excution pas pas (y compris des procdures appeles) F10 permet le pas pas (sans dtailler les procdures appeles) Maj+F11 excute jusqu' la fin de la procdure en cours.

En cliquant sur le bouton droit de la souris, on peut afficher ou dfinir l'instruction suivante, excuter jusqu'au curseur, voir la dfinition de ce qui est sous le curseur (La dfinition, c'est l'instruction ou une variable t dclare par exemple).
http://plasserre.developpez.com/v1-d.htm (12 sur 14) [01/03/2005 14:46:25]

Site

On peut grce au menu dboguage puis Fentre ouvrir les fentres: Automatique, qui affiche les valeurs des variables de l'instruction en cours instructions voisines. et des

Immdiat o il est possible de taper des instructions ou expressions pour les excuter ou voir des valeurs. Espions permettant d'afficher le contenu de variables ou d'expressions. Espions Express permet d'afficher la valeur de l'expression slectionne. Points d'arrts permet de modifier les proprits des points d'arrts. on peut mettre un point d'arrt en cliquant dans la marge grise gauche: l'instruction correspondante s'affiche en marron et l'excution s'arrtera sur cette ligne.
http://plasserre.developpez.com/v1-d.htm (13 sur 14) [01/03/2005 14:46:25]

Site

Me affiche les donnes du module en cours. Variables locales affiche les variables locales. Modules affiche les dll ou .exe utiliss. Mmoire, Pile d'appels, Thread, Registres, Code Machine permettent d'tudier le fonctionnement du programme un niveau plus spcialis et technique. Il est possible de mettre des points d'arrt, des espions pour arrter l'excution et suivre la valeur de certaines expressions. (voir traiter les erreurs) voir dboguage pour plus d'information.

http://plasserre.developpez.com/v1-d.htm (14 sur 14) [01/03/2005 14:46:25]

Cours Vb.net #develop

SiteVB

Cours VB.net
L'environnement

1.D Bis

de dveloppement: SHARPDEVELOP

C'est l'IDE: Environnement de dveloppement intgr GRATUIT, alternative la version payante VisualStudio.

Oui, vous pouvez faire du Visual Basic.Net (ou du C#) gratuitement et lgalement.
C'est un logiciel libre en Open Source officiellement sous ME et 98) (GPL), fonctionne officiellement sous Windows XP et 2000 (Pas

Il parait que SharpDevelop fonctionne sous Windows 98 (non test, si vous avez essay, m'en faire part), Millenium (test), NT 4, Windows 2000 (test) , XP (test). Alors que Visual Studio ne fonctionne pas sur un PC non NT (exit Windows 98 et Millenium).

http://plasserre.developpez.com/v1-dbis.htm (1 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

O le trouver? Comment l'installer?.


Respecter l'ordre d'installation.

1/ Tlcharger et installer le FrameWork. (imprativement en premier)


Installer Microsoft .NET version 1.1 Redistibutable package. C'est le Framework (la couche logiciel entre l'application et le systme), il est tlchargeable sur le Net . Tlcharger le FrameWork 1.1 franais puis l'installer. (Gratuit)

2/ Tlcharger et installez le SDK .


C'est le Kit de Dveloppement Microsoft .NET Framework: SDK version 1.1 en franais.

Tlcharger le SDK

(Gratuit) Attention, changer la langue et charger la version franaise.

3/ Tlcharger et installez SharpDevelop 1.0.


Tlcharger SharpDevelop 1.0 (Gratuit) L'installer en excutant le fichier 'SharpDevelop_1.0.0.1550_Setup.exe'.

4/ Configurer SharpDevelop
Au premier dmarrage, crer une nouvelle base de compltion de code (option par dfaut) Aller dans le menu 'Outils' - 'Options'

Choisir : Style visuel : Choisir VBNET dans la liste. Type de Fichier : cocher 'Fichier source VB.NET '(.vb) en plus.
http://plasserre.developpez.com/v1-dbis.htm (2 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Le Framework, le SDK et
On peut aussi installer:

#develop suffisent pour faire des programmes.

Framework .NET v2.0 Beta (gratuit) SDK .NET v2.0 Beta (gratuit)

MSDE, SQL SERVER version light (gratuit) SDK Direct X, pour faire du graphisme ou du multimdia (gratuit)

Quelques liens Petit didacticiel en anglais WikiSharpDevelop (en anglais) WikiDeboguage (en anglais)

Fentre Projet.
Lancer SharpDevelop:

http://plasserre.developpez.com/v1-dbis.htm (3 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Au lancement de lapplication, on peut : o o ouvrir une solution existante: Bouton 'Ouvrir une solution' crer un nouveau projet (une nouvelle solution) : Bouton 'Nouvelle solution' ou Menu 'fichier'-'Nouveau'-'Solution'
http://plasserre.developpez.com/v1-dbis.htm (4 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Slectionner la catgorie 'VBNET' et choisir le type d'application crer.(Dans le cas d'une cration d'un projet Visual Basic, il faudra choisir dans les 'Modles': Application Windows.) On remarque que #Develop permet aussi d'crire du C#, du C++. Puis il faut donner un nom au projet (il n'y a pas de nom par dfaut), modifier si ncessaire le chemin de l'emplacement du projet qui est par dfaut ' C:\Documents and Settings\NomUtilisateur\Mes documents\SharpDevelop Projects' ( cocher si ncessaire 'Crer le rpertoire source') enfin valider sur le bouton 'Crer'. Une fentre
http://plasserre.developpez.com/v1-dbis.htm (5 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

'MainForm' apparait.

importer / exporter un projet de Visual studio. En passant par le menu 'Fichier'.

Si l'on veut rajouter des fichiers notre projet faire : 'Fichier'-'Nouveau'-'Fichier' et catgorie VB.

Quand on ouvre une solution (un projet), le logiciel se prsente ainsi:

http://plasserre.developpez.com/v1-dbis.htm (6 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Noter que le logiciel est francis (Si cela n'a pas t fait, le faire par le menu Tools, Options).

Dans un nouveau projet, crer une fentre :


http://plasserre.developpez.com/v1-dbis.htm (7 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Pour ajouter un fentre (un formulaire) Cliquer sur le premier bouton gauche Nouveau Fichier (le toolTip dit 'Ouvrir un nouveau Buffer', ou utiliser le menu 'Fichier', 'Nouveau', 'Fichier'. Dans la fentre qui s'ouvre , gauche, choisir 'VB.NET' , droite 'formulaire' puis 'Ok' , une fentre Form1 apparat. La premire fentre qui s'ouvre quand on cre un projet se nomme 'MainForm', si on en ajoute une, elle se nomme 'Form1'.
La zone de travail se trouve au centre de l'cran: On voit les onglets MainForm, Form1.vb pour chaque formulaire (fentre)

En bas les onglets 'Source' et 'Design' permettent de passer de l'affichage du code('Source') la conception de l'interface utilisateur ('Design'): affichage de la fentre et de ses contrles permettant de dessiner l'interface.
http://plasserre.developpez.com/v1-dbis.htm (8 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Voir les procdures:


L'onglet 'Source' en bas donne accs aux procdures (au code) lies Form1.

La liste droulante de droite donne la liste des objets. Si on en choisit un, le pointeur va sur les procdures lies cet objet. Il est possible en double-cliquant dans le formulaire ou sur un contrle de se retrouver directement dans le code de la procdure correspondant cet objet. Si la procdure n'existe pas (ButtomClick par exemple),le fait de double-cliquer sur le bouton la cre.

qui est sur la fentre des proprits Pour crer les autres procdures vnements, utiliser le bouton droite, il fait apparatre la liste des vnements et permet de crer les procdures.

Ajouter des contrles la feuille


Ajoutons un

bouton par exemple:

http://plasserre.developpez.com/v1-dbis.htm (9 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Cliquer sur l'onglet Outils gauche en bas , bouton 'Windows Forms', puis sur Button,cliquer dans la MainForm, dplacer le curseur sans lcher le bouton, puis lcher le bouton :

Un bouton apparat.

Modifier les proprits d'un contrle ou du formulaire.

http://plasserre.developpez.com/v1-dbis.htm (10 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Quand une feuille ou un contrle est slectionn dans la fentre Design, ses proprits sont accessibles dans la fentre de proprits droite en bas: Ici ce sont les proprits du contrle 'Button1' (BackColor, Image, Texte..) Un petit texte d'aide concernant la proprit en cours apparat en bas. (on peut modifier les proprits directement.)

Voir tous les composants d'un projet:


Pour cela il faut utiliser La fentre Projet et la fentre Class gauche, elles permettent de voir et d'avoir accs au contenu du projet: Au Rfrences qui contient les espaces de nom. Assembly: info ncessaire pour crer un installateur..

Remarque relative aux fentres de l'IDE:


http://plasserre.developpez.com/v1-dbis.htm (11 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Pour faire apparatre une fentre qui a disparu (fentre projet par exemple) utiliser le menu 'Affichage' puis 'projet'. Quand le fentre est ancre (accroche aux bords), le fait de la dplacer et elle devient autonome. Pour la 'r ancrer', il faut double-cliquer dans sa barre de titre. avec sa barre de titre la 'd ancre',

Tester son logiciel:


On peut compiler le projet avec le premier bouton ci-dessous. Lancer l'excution avec le bouton flche verte, le rond droite (qui devient rouge pendant l'excution) sert terminer l'excution.

La sauvegarde du projet se fait comme dans tous les logiciels en cliquant sur l'icne du paquet de disquettes.

Projet et solutions.
Dans la terminologie VB, un projet est une application en cours de dveloppement. Une solution regroupe un ou plusieurs projets (C'est un groupe de projets). #Sharp permet de crer, ouvrir: des fichiers des projets/solutions.

Fichiers, Chemins des sources.


http://plasserre.developpez.com/v1-dbis.htm (12 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Si vous regardez les fichiers correspondant un projet VB, les extensions sont: .prjx est le fichier de projet.

.cmbw est le fichier solution. .vb sont tous les fichiers Visual Basic (Feuille module...) .ressources pour les ressources.

Les sources sont par dfaut dans ' C:\Documents and Settings\NomUtilisateur\Mes documents\SharpDevelop Projects' Si on compile le projet l'excutable est dans un sous rpertoire \Bin\Debug ou \Bin\Reales Si vous avez plusieurs versions du framework sur votre machine (version 1.0, version 1.1 voire version 2.0 Beta), il vous est possible de choisir le compilateur dans les options du projet. Visual Studio 2003 version 1.1 du framework. Visual Studio 2005 version 2.0 du framework Il est possible d'importer ou d'exporter au format VisualBasic de Microsoft.

#Develop propose des AIDES.


La fentre d'aide droite donne accs des aides: De #develop Du Framework De zipLib Si vous avez install le SDK (SDK Framework .Net et/ou SDK Direct X) , vous avez accs laide (partie en haut droite de lcran) , et donc galement lintellisense, qui affiche les proprits, les mthodes des objets, les paramtres des fonctions, des types, , des diffrents objets. en anglais, non jour!!

http://plasserre.developpez.com/v1-dbis.htm (13 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Ici par exemple on a tap MessageBox.

, la liste des membres (Equals, Show...) est affiche.

Dboguage avec le dbogueur du SDK de Microsoft:


Ce qui est nomm point d'arrt dans #develop est en fait un signet dans le texte. Pour dboguer il faut installer le dbogueur fourni gratuitement avec le SDK que vous avez install. Le dbogueur est un programme autonome, indpendant de #develop. Si vous avez install le Framework, le SDK et #develop , Il est dans le rpertoire: C:\Program Files\Microsoft.NET\SDK\v1.1\GuiDebug

Si vous avez install Visual Studio.Net, Il est dans le rpertoire: C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\GuiDebug

et le dbogueur en lui mme se nomme : DbgCLR.exe

Pour lancer l'ouvrir rapidement partir de #develop, il faut ajouter une ligne 'Debug' dans le menu 'Outils': Menu 'Outils', sous menu 'Option', et cliquer la ligne outils (outils externes) de la liste droite.

http://plasserre.developpez.com/v1-dbis.htm (14 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Cliquer sur le bouton 'Ajouter' Titre:debug Commande: C:\Program Files\Microsoft.NET\SDK\v1.1\GuiDebug\DbgCLR.exe ou C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\GuiDebug\DbgCLR.exe

http://plasserre.developpez.com/v1-dbis.htm (15 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

puis cliquer sur "OK" Maintenant vous avez une ligne 'Debug' dans le menu 'Outils': Cliquer dessus, cela ouvre le Dbogueur 'Microsoft' Pour charger le programme dboguer: Il faut 'charger' le fichier excutable .EXE Menu "Dbuguer", sous menu "Programmes dbuguer", slectionner le programme ".Exe" (rpertoire 'bin') Il faut 'charger' les sources: Menu "Fichier", charger tous les fichiers .VB du projet Enregistrer le fichier debugger solution (.dln) en passant par le menu 'fichiers' puis 'Fermer la solution'. Cela permet, la fois suivante, d'ouvrir le fichier solution (.dln) (et non plus la totalit des fichiers sources et exe , ce qui est plus long). Pour lancer le dboguage: touche F5 ou la flche droite.

http://plasserre.developpez.com/v1-dbis.htm (16 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Une fois l'excution lance: On peut la stopper (Ctrl +Alt +Pause).

http://plasserre.developpez.com/v1-dbis.htm (17 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Ajouter des points d'arrt. grce des points d'arrt (pour dfinir un point d'arrt en mode de conception, cliquez en face d'une ligne dans la marge grise, cela fait apparatre un rond marron. Quand le code est excut, il s'arrte sur cette ligne). For i= 1 To 6 q Tableau(i)=i*i Next i

Voir la valeur d'une proprit d'un objet en la slectionnant avec la souris:

Il s'affiche un petit cadre donnant la valeur de la proprit d'un objet. Voir la valeur d'une variable, simplement en positionnant le curseur sur cette variable.

F11 permet l'excution pas pas (y compris des procdures appeles) F10 permet le pas pas (sans dtailler les procdures appeles) Maj+F11 excute jusqu' la fin de la procdure en cours.

En cliquant sur le bouton droit de la souris, on peut Excuter jusqu'au curseur Insrer un point d'arrt.

http://plasserre.developpez.com/v1-dbis.htm (18 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

On peut grce au menu 'Dboguage' puis 'Fentre' ouvrir les fentres: Automatique, qui affiche les valeurs des variables de l'instruction en cours et des instructions voisines.

Immdiat o il est possible de taper des instructions ou expressions pour les excuter ou voir des valeurs. Taper "?I" (c'est l'quivalent de "Print I" qui veut dire: crire la valeur de la variable I) puis valider, cela affiche la valeur de la variable I. Autre exemple, pour voir le contenu d'un tableau A(), taper sur une seule ligne: "For i=0 to 10: ?i: Next i" Enfin, il est possible de modifier la valeur d'une variable: Taper" I=10" puis valider, cela modifie la valeur de la variable.

En bas gauche on a aussi les fentres: Espions permettant d'afficher le contenu de variables ou d'expressions. Espions Express permet d'afficher la valeur de l'expression slectionne. Variables locales affiche les variables locales.

Attention, comme dans Visual Studio, il n'est pas possible de modifier les fichiers sources partir du moment o vous avez dmarr le dboguage.

Conclusion:
Programme permettant de faire du VB.net gratuitement (rapport qualit/prix infiniment lev).

CONCLUSION D'UN UTILISATEUR:


SharpDevelop est un IDE agrable utiliser, pour le dveloppement des programmes .NET, en mode WYSIWYG.
http://plasserre.developpez.com/v1-dbis.htm (19 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

Il est possible datteindre un niveau de qualit quivalent Visual Studio ou Borland C# Builder en faisant une installation complte. Trs ouvert, on peut lui rajouter des plugins. Certains programmes externes peuvent tre utiliss galement avec Visual Studio ou Borland C# Builder. SharpDevelop est en perptuelle volution. Un forum permet de dposer le descriptif des erreurs rencontres mais galement de vos demandes de modifications, si vous pensez une volution qu'il serait bien que SharpDevelop possde. En plus vous pouvez rcuprer le code source et pouvez donc modifier loisir lIDE. Ancien utilisateur de Visual basic 5.0 Pro, Visual Studio 6.0 enterprise (Visual Basic, Visual InterDev et Visual C++) et de Visual Studio 2003 .Net architecte, je ne me sens pas ltroit avec SharpDevelop. Bien sur, pour les dbutants, il manque les assistants de Visual Studio (Crystal report, ADO .NET, ). Le problme avec les assistants est quune fois quon pratique un peu, ils deviennent vite un gne, et souvent, il faut repasser derrire eux, pour enlever le superflu de code quils ont crit (souvent ils noptimisent pas le code). Il manque galement la partie UML de Visual Studio Architecte, mais l on attaque le haut du panier des dveloppeurs. Par contre SharpDevelop apporte en plus: Aide la gnration automatique des MessageBox

Aide la conversion C# vers VB.NET et de VB.NET vers C# Aide la gnration dexpression rgulire. Importer / exporter un projet de Visual studio. Support du multi langage.

Il fournit les logiciels: NDoc : permet de faire des fichiers daide compile au format MSDN, partir de lignes commentes dans le code. NUnits : permet de faire des tests unitaires (!).
http://plasserre.developpez.com/v1-dbis.htm (20 sur 21) [01/03/2005 14:46:32]

Cours Vb.net #develop

SharpQuery : Permet de se connecter aux bases de donnes .

Installateur:
Comment crer un installateur avec #develop? Merci de votre exprience.

Merci Fabrice SAGE pour son aide. Merci Hubert WENNEKES, CNRS Institut de Biologie de Lille pour son aide.

http://plasserre.developpez.com/v1-dbis.htm (21 sur 21) [01/03/2005 14:46:32]

Site

Site

Cours : VB.net

Introduction 1.3 au langage.


Nous allons tudier: Le langage Visual Basic.Net

qui est utilis dans les

procdures.

Comme nous lavons vu, le langage Visual Basic sert - agir sur linterface (Afficher un texte, ouvrir une fentre, remplir une liste, un tableau, poser une question).
Button1.Text="Bonjour"

- effectuer des calculs, des affectations en utilisant des variables.


B=A+1

- Faire des tests avec des structures de dcision: valuer des conditions des comparaisons et prendre des dcisions.
If A=1 Then...End If

- travailler en boucle pour effectuer une tache rptitive.


For I=0 To 100... Next I

http://plasserre.developpez.com/v1-3.htm (1 sur 3) [01/03/2005 14:46:36]

Site

Tout le travail du programmeur est l.

Dans VB.Net nous avons notre disposition:


q

Les Classes venant du FrameWork, on travaille sur des objets en utilisant leurs proprits, leurs mthodes. Il existe des centaines de 'Classes': les plus utilises sont les classes String (permettant de travailler sur des chanes de caractres), Maths (permettant d'utiliser des fonctions mathmatiques), Forms (permettant l'usage de formulaire, de fentre), Controls (donnant accs aux contrles: bouton, case cocher, liste..) Elles sont communes tous les langages utilisant le FrameWork. Exemple d'utilisation de la Class TextBox (contrle contenant du texte): TextBox1.Text="Hello"

Affiche "Hello" dans le textbox.

Les instructions du Common Langage Runtime (Un autre constituant de Visual Studio). Il s'agit d'instruction, de mot cl. Exemple: A = Mid(MaString, 1, 3) 'Mid retourne une partie de la chane de caractres.

Les Classes de compatibilit VB6. Elles ne dpayseront pas ceux qui viennent des versions antrieures de VB car elles reprennent la syntaxe utilise dans VB6. Ajoute VB.Net des fonctions VB6 L'outils d'import automatique de VB6

http://plasserre.developpez.com/v1-3.htm (2 sur 3) [01/03/2005 14:46:36]

Site

vers VB.Net en met beaucoup dans le code. Il faut mon avis viter de les utiliser. Ce cours 'pur' VB.Net n'en contient pas.

Pour le moment cela peut paratre un peu compliqu, mais ne vous inquitez pas, cela va devenir clair.

http://plasserre.developpez.com/v1-3.htm (3 sur 3) [01/03/2005 14:46:36]

vbintro

Site

Cours : VB.net

Les 1.4 Algorithmes


Pour crire un programme, aller du problme rsoudre un programme excutable, il faut passer par les phases suivantes:
q

Analyse du cahier des charges. Il doit tre clair, exhaustif, structur.

Analyse gnrale du problme. Il existe des mthodes pour professionnels (MERISE, JACKSON..), nous utiliserons plutt l'analyse fonctionnelle: Le problme global est dcoup en sous problmes nomms fonctions. Chaque fonction ne contient plus qu'une partie du problme. Si une fonction est encore trop complexe, on itre le processus par de nouvelles fonctions un niveau plus bas.

Analyse dtaille. Chaque fonction est mise en forme, la logique de la fonction est crite dans un pseudo langage (ou pseudo code) dtaillant le fonctionnement de la fonction. Ce pseudo code est universel , il comporte des mots du langage courant ainsi que des mots relatifs aux structures de contrle retrouves dans tous les langages de programmation.

Codage.

http://plasserre.developpez.com/v1-4.htm (1 sur 16) [01/03/2005 14:46:40]

vbintro

Traduction du pseudo code dans le langage que vous utilisez.


q

Test Car il faut que le programme soit valide.

Exemple simpliste:
q

Analyse du cahier des charges. Cration d'un programme affichant les tables de multiplication, d'addition, de soustraction.

Analyse gnrale du problme. Dcoupons le programme en diverses fonctions: Il faut crer une fonction 'Choix de l'opration', une fonction 'Choix de la table', une fonction 'TabledeMultiplication', une fonction 'TabledAddition', une fonction Affiche'...

Analyse dtaille. Dtaillons la fonction 'TabledeMultiplication' Elle devra traiter successivement (pour la table des 7 par exemple) 1X7 2X7 3X7.. Voici l'algorithme en pseudo code. Dbut Pour i allant de 1 10 Ecrire (i*7) Fin Pour Fin

http://plasserre.developpez.com/v1-4.htm (2 sur 16) [01/03/2005 14:46:40]

vbintro
q

Codage. Traduction du pseudo code en Visual Basic. Sub MultiplicationPar7 Dim i As Integer For i=1 to 10 Call Affiche(i*7) next i. End Sub

Test Ici il suffit de lancer le programme pour voir si il marche bien..

L'algorithme dtaille , en pseudo code, le fonctionnement d'une fonction et en dcrit la logique.


Il faut avouer que dans la pratique, la phase d'analyse dtaille avec criture du pseudo code se passe dans la tte et que bien souvent le code VB est crit directement, mais ce qui suit est DIDACTIQUE et comme on l'a dit, commun tous les langages. Etudions cette logique valable pour tous les langages de programmation:

Structure squentielle d'un programme:


structure dun programme est gnralement squentielle. Le code dune procdure est fait dune succession de lignes (ou instructions) qui seront lues et traites les unes aprs les autres. Instruction 1
Au sein d'une procdure, la

http://plasserre.developpez.com/v1-4.htm (3 sur 16) [01/03/2005 14:46:40]

vbintro

Instruction 2 Instruction 3 ..
En VB on peut mettre plusieurs instructions sur la mme ligne spares par ":" Instruction1 : Instruction2

Les variables:
Elle contiennent les informations ncessaires au droulement du programme (C'est le mme sens qu'en mathmatique) Chaque variable a un nom (identifiant) et un type. Ce dernier indique la nature de l'information que l'on souhaite mettre dans la variable: Entier, rel, boolen, caractre, chane de caractres, objet.

Exemple: la variable 'Total' contiendra un rel dans un programme de comptabilit.

Affectation ( ou Assignation):
C'est une instruction consistant donner une valeur une variable. En langage algorithmique on l'indique par '<-' X <- 2 veut dire: donner la valeur X la valeur 2

Z <- X+1 veut dire: donner la variable Z la valeur de la variable X laquelle on ajoute 1 (Z prendra la valeur 2+1 =3. Cela revient valuer l'expression de droite et en mettre la valeur dans la variable de gauche. En VB le signe d'affectation est '='
http://plasserre.developpez.com/v1-4.htm (4 sur 16) [01/03/2005 14:46:40]

on crit donc:

vbintro

Z=X+1 Attention ce n'est pas une galit mais une affectation.

Les choix:
Le programme doit pouvoir choisir parmi deux ou plusieurs possibilits en fonction dune condition : Si Condition Alors Action 1 Sinon Action 2 Fin Si Si Condition est vraie Action 1 est effectue, sinon Action 2 est effectu.

Parfois il ny a pas de seconde branche : Si Condition Alors Action 1 Fin Si ou sur une seule ligne: Si Condition Alors Action 1

Il peut y avoir plusieurs conditions imbriques : Si Condition 1 Alors Si Condition 2 Alors Action 1 Sinon Action 2
http://plasserre.developpez.com/v1-4.htm (5 sur 16) [01/03/2005 14:46:40]

vbintro

Fin Si Sinon Action 3 Fin Si Noter bien le retrait des lignes de la seconde condition afin de bien visualiser la logique du programme : Action 2 est effectue si la Condition 1 est remplie et la Condition 2 nest pas remplie.

En VB cela correspond linstruction IF THEN If Condition 1 Then Action 1 Else Action 2 End If

Dcider entre :
Il est parfois ncessaire deffectuer un choix parmi plusieurs solutions : Dcider Entre Quand Condition 1 Alors Action 1 FinQuand Quand Condition 2 Alors Action 2 FinQuand .. .. Autrement Action 4 FinAutrement

http://plasserre.developpez.com/v1-4.htm (6 sur 16) [01/03/2005 14:46:40]

vbintro

FinDcider

Si la condition 1 est remplie Action 1 est effectue puis le programme saute aprs FinDcider. Si la condition 1 nest pas remplie, on teste la condition 2.. Si aucune condition nest remplie on saute Autrement, on effectue Action 4.

On pourrait aussi parler de slection : Slectionner. Le cas : condition 1 Action 1 Le cas : condition 2 Action 2 .. Les autres cas FinSlectionner

En VB cela correspond Select Case Valeur Case condition 1 Action 1 Case condition 2 Action 2 .. Case Else Action 4 End Select Si Valeur=Condition 1 Action 1 est effectue,si Valeur=Condition 2 Action 2 est effectue...

http://plasserre.developpez.com/v1-4.htm (7 sur 16) [01/03/2005 14:46:40]

vbintro

Pour :
Permet de rpter une squence un nombre de fois dtermin : Le cas le plus classique est : Pour I variant de 0 N Rpter Action FinRpter

I prend la valeur 0, 'Action' est effectue, puis I prend la valeur 1, Action est effectue, puis I prend la valeur 2.. cela jusqu' N La boucle tourne N+1 fois commence 0 ) (car ici on

Cela se nomme une itration. Intrts?


Au lieu de faire Afficher (1*7) Afficher (2*7) Afficher (3*7) Afficher (4*7) ...
http://plasserre.developpez.com/v1-4.htm (8 sur 16) [01/03/2005 14:46:40]

vbintro

on remarque qu'un lment prend successivement la valeur 1, 2, 3, .. Une boucle peut faire l'itration: Pour i allant de 1 10 Rpter Affiche (i*7) Fin rpter La variable dite 'de boucle' prend bien les valeurs 1 puis 2 puis 3.. ; elle est utilise dans le corps de la boucle.

En VB For i=0 To N .. Next i

On peut aussi boucler en parcourant tous les lments dune collection.


(Une collection est une liste d'objets, liste de taille variable en fonction de ce qu'on ajoute ou enlve.)

Pour Chaque lment de la liste Action Fin Pour

En VB : For each In Next

Tant que :

http://plasserre.developpez.com/v1-4.htm (9 sur 16) [01/03/2005 14:46:40]

vbintro

Permet de faire une boucle sans connatre le nombre ditrations lavance. Tant Que Condition Action Fin Tant Que Laction qui est dans la boucle doit modifier la condition afin qu un moment Tant que ne soit pas vrifi et que lon sorte de la boucle. Sinon la boucle tourne sans fin. Pour plus cadrer avec la ralit : Faire tant que condition Action Boucler En VB : Do while Condition Action Loop

Il existe une boucle quivalente : Rpter Action Jusqu Condition

En VB : Do Action Loop Until Condition

'Sous-programme' ou 'procdure':
On a dj vu cette notion.
http://plasserre.developpez.com/v1-4.htm (10 sur 16) [01/03/2005 14:46:40]

vbintro

Quand on appelle une procdure, le logiciel saute la procdure, il effectue celle-ci puis revient effectuer ce qui suit lappel. Et VB les sous-programmes (ou procdures) sont des Sub ou des Function. Pour appeler une procdure on utilise Call NomProcedure() ou NomProcedure()
Instruction 1 Instruction 2 Call MaProcdure()3 Instruction 4 Instruction 5 Sub MaProcdure Instruction 10 Instruction 11 End Sub

Le programme effectuera les instructions 1, 2, 3, 10, 11, 4, 5. Une opration complexe peut tre dcoupe en plusieurs procdures ou sous-programmes plus petits et plus simples qui seront appels.

On peut fournir aux procdures des paramtres, ce sont des variables qui seront transmisses la procdure.
Exemple: Cration d'une Procdure 'MaProcdure' recevant 2 paramtres: Sub MaProcdure(paramtre1, paramtre2) .. End Sub

Exemple d'appel de la procdure 'Maprocdure' en envoyant 2 paramtres:

http://plasserre.developpez.com/v1-4.htm (11 sur 16) [01/03/2005 14:46:40]

vbintro

Call MaProcdure(premierparamtre, secondparamtre) Exemple : si j'cris Call MaProcdure(2,3) dans la procdure MaProcdure paramtre1=2 et paramtre2=3.

Il est ncessaire de dfinir le type des paramtres: Sub MaProcdure(paramtre1 As Integer, paramtre2 As Integer) indique que la procdure attend 2 entiers.

Il y a 2 manires denvoyer des paramtres : Par valeur : (By Val)cest la valeur, le contenu de la variable qui est envoy. Par rfrence :(By Ref) cest ladresse (le lieu physique o se trouve la variable) qui est envoye. Si la Sub modifie la variable, cette modification sera visible dans la procdure appelante aprs le retour.
Parfois on a besoin que la procdure appele retourne une valeur dans ce cas il faut crer une fonction: Function MaFonction .. End Function As Integer

Pour appeler la fonction: ValeurRetourne=MaFonction()

Les tableaux:
Un tableau de variables permet de stocker plusieurs variables de mme type sous un mme nom de variable, chaque lment tant repr par un index ou indice.

http://plasserre.developpez.com/v1-4.htm (12 sur 16) [01/03/2005 14:46:40]

vbintro

C'est une suite finie d'lments. Soit un tableau A de 4 lments

3 12 4 0

Pour accder un lment il faut utiliser l'indice de cet lment. L'lment d'index 0 se nomme A[0] 3. et contient la valeur

On remarque que le premier lment est l'lment d'index 0 (ZERO). L'lment d'index 1 se nomme A[1] 12. et contient la valeur

Quand on cre un tableau, il a un nombre d'lments bien dfini: 4 dans notre exemple d'index 0 3. Pour donner une valeur un des lments , on affecte la valeur l'lment. A[2] <- 4 Pour lire une valeur dans un tableau et l'affecter une variable x: x <- A[2] Traduction en VB A(2)=4 x = A(2) Pour parcourir tous les lments d'un tableau on utilise une boucle: Exemple: afficher tous les lments du tableau tab qui contient n lments.

http://plasserre.developpez.com/v1-4.htm (13 sur 16) [01/03/2005 14:46:40]

vbintro

dbut Pour i de 0 n-1 Rpter crire(tab[i]) Fin Rpter fin

Il existe des tableaux multidimensionnels avec plusieurs index: Voyons les index de chaque lment:

B(0,0) B(0,1) B(0,2) B(1,0) B(1,1) B(1,2) B(2,0) B(2,1) B(2,2) B[1,0] dsigne l'lment rouge (ligne 2, colonne 1).
Voyons par exemple,le contenu de chaque lment:

3 12 18 4 2 2

0 5 8

Ici B[1,0] =18

Notion de Collections:
Une collection permet de stocker plusieurs variables ou objets, chaque lment tant repr par un index ou indice. Soit la collection Col, au dpart elle est vide. J'ajoute des lments (ou items) cette collection. Col.Ajouter ("Toto") Voici la collection: Toto

http://plasserre.developpez.com/v1-4.htm (14 sur 16) [01/03/2005 14:46:40]

vbintro

La collection a maintenant 1 lment. Col.Ajouter("Lulu") Col.Ajouter("Titi") Toto Lulu Titi La collection a 3 lments maintenant. Col.Retirer(2) enlve l'lment numro 2 Toto Titi La collection n'a plus que 2 lments maintenant.

On voit que le nombre d'lments n'est pas connu l'avance, il varie en fonction des lments ajouts (ou retirs) Un lment est repr par un indice. En VB Col.Add 'Ajoute un lment

Col.Remove 'Enlve une lment

Utilisation de Flag:
Un Flag (ou drapeau) est une variable utilise pour enregistrer un tat, la valeur de cet tat servant dclencher ou non des actions. C'est une manire de retenir qu'un vnement s'est produit. Si le drapeau est abaiss, les voitures roulent.. Exemple: Utiliser un Flag pour sortir d'une boucle: On utilise FlagSortir.

http://plasserre.developpez.com/v1-4.htm (15 sur 16) [01/03/2005 14:46:40]

vbintro

FlagSortir=Faux Tant que

FlagSortir =Faux

Si on doit sortir de la boucle, on met la valeur de FlagSortir Vrai


Boucler

En VB: FlagSortir=Faux

Do while FlagSortir =Vrai Si on doit sortir de la boucle, on met la valeur de FlagSortir Vrai Loop
Tant que FlagSortir =Faux la boucle tourne.

http://plasserre.developpez.com/v1-4.htm (16 sur 16) [01/03/2005 14:46:40]

vbintro

Site

Cours : VB.net

1.5L'Affectation.

C'est l'instruction la plus utilise en programmation.


On peut aussi utiliser le terme 'Assignation' la place de l'affectation. NomdeVariable=Expression est une affectation.

Elle transfre le rsultat de l'expression situe droite du signe 'gal' dans la variable (ou la proprit) gauche du signe gal. Exemple:

A=B

est une affectation (ou assignation.)

A=B affecte la valeur de la variable B la variable A, la valeur de B est mise dans A.

Si A=0 B=12 A=B entrane que A=12

http://plasserre.developpez.com/v1-5.htm (1 sur 4) [01/03/2005 14:46:41]

vbintro

Si ncessaire l'expression, (l'lment) droite du signe = est value, calcule avant d'tre affecte la premire variable.

Si A=0 B=12 A=B+2 entrane que A=14

Laffectation permet donc de faire des calculs : Si NombrdHeure=100 et TauxHoraire=8 Paye= NombredHeure * Tauxhoraire Paye prend la valeur 800 (notez que '*' , l'toile veut dire : multiplication.)

Attention dans le cas de l'affectation "=" ne veut donc pas dire gal. A=A+1 Si A=1 A=A+1 entrane que A=2 est possible

On verra qu'il existe des variables numriques ('Integer' 'Single') et alphanumriques(chane de caractres ou 'String'), l'affectation peut tre utilise sur tous les types de variables.

Le second membre de l'affectation peut contenir des constantes, des variables, des calculs dans le cas de variables numriques.

http://plasserre.developpez.com/v1-5.htm (2 sur 4) [01/03/2005 14:46:41]

vbintro

A=B+2+C+D On ne peut pas affecter une variable d'un type une variable d'un autre type: si A est numrique et B est alphanumrique (chane de caractres) A=B n'est pas accept. Ecriture compacte:

A=A+1 peut scrire de manire plus compacte : 1 A=A*2 peut scrire de manire plus compacte : 2 A=A&"Lulu" pour une variable chane de caractre peut scrire de manire plus compacte : A &= "Lulu"
L'affection marche pour les objets, leurs proprits.. Bouton1.BackColor= Bouton2.BackColor

A +=

A *=

Signifie que l'on donne au Bouton1 la mme couleur de fond que celle du bouton2: on affecte la valeur BackColor du Bouton2 au Bouton1.

Attention le signe '=' signifie par contre 'gal' quand il s'agit d'valuer une condition, par exemple dans une instruction If Then (Si Alors): If A=B then 'signifie: Si A gal B alors...

Permutation de variables: C'est un petit exercice: J'ai 2 variables A et B contenant chacune une valeur. Je voudrais mettre dans A ce qui est dans B et dans B ce qui est dans A. Si je fais A=B

http://plasserre.developpez.com/v1-5.htm (3 sur 4) [01/03/2005 14:46:41]

vbintro

B=A Les 2 variables prennent la valeur de B!! Comment faire pour permuter? Et bien il faut utiliser une variable intermdiaire C qui servira temporairement conserver le contenu de la variable A: C=A A=B B=C Voila, on a bien permut.

http://plasserre.developpez.com/v1-5.htm (4 sur 4) [01/03/2005 14:46:41]

vbintro

Site

Cours : VB.net

Les 1.6 Variables


Cest le mme sens quen mathmatique. Sauf quen VB la variable est un objet. Une variable sert stocker un nombre, du texte (chane de caractres), une date, un objet..
Une variable est un objet qui contient donc un nombre,

du texte.. Une variable a un nom et un type qui indique ce que lon peut y mettre. est une variable de type chane de caractre (ou String) : je peux y mettre une chane de caractre ( TOTO par exemple)
Si STR

STR="TOTO" Si Age est une variable de type numrique ; je peux y stocker un nombre (45,2 par exemple). Age=45,2

http://plasserre.developpez.com/v1-6.htm (1 sur 13) [01/03/2005 14:46:44]

vbintro

Nom des variables :


On peut utiliser dans les noms de variable des majuscules ou des minuscules mais pour VB il ny a pas de diffrence. Exemple : On ne peut pas dclarer une variable VB et une variable vb. Si on dclare une variable nomme 'VB' et si ultrieurement on tape 'Vb', le logiciel le transforme automatiquement en 'VB'.
q

On peut mettre des chiffres et des lettres dans les noms de variable mais pas de chiffres en premier caractre. 2A nest pas un nom valide Nom2 lest.

Certains caractres de ponctuation ( ..) ne peuvent pas tre utiliss, d'autres "_" et "" sont permis : Nom_Utilisateur est valide.

L'espace n'est pas permis.


q

Bien sur, les mots cl de VB ne peuvent pas tre utiliss : On ne peut pas nommer une variable Form ou BackColor

Il est conseill de donner des noms explicites qui rappelle ce que contient la variable: Nom_Utilisateur est explicite, pas NU.

http://plasserre.developpez.com/v1-6.htm (2 sur 13) [01/03/2005 14:46:44]

vbintro

Parfois on indique en dbut de nom, par une lettre, le type de variable ou sa porte (la zone de code o la variable existe). s_Nom 'Le s indique qu'il s'agit d'une variable String (Chane de caractres)
iIndex 'Le i indique qu'il s'agit d'une variable Integer (Entier) gNomUtilisateur globale 'g indique que la variable est

Il est possible de 'forcer' le type de la variable en ajoutant un caractre spcial la fin du nom de la variable. Dim c$ = "aa" ' $ force c a tre une variable String.

De mme % force les Integer, & les long.. Cette notation est moins utilise. Voir en annexe, en bas de page des recommandations supplmentaires.

Dclaration:
Avant d'utiliser une variable, il faut la dclarer, la crer, pour cela on utilise l'instruction Dim: Dim A As Integer type Entier 'Dclare une variable nomme 'A' de

Avant la ligne, A n'existait pas, aprs le DIM, A existe et contient 0. Il faut aussi parfois l'initialiser, c'est dire lui donner une valeur de dpart : A=3 On peut dclarer et initialiser en mme temps:

http://plasserre.developpez.com/v1-6.htm (3 sur 13) [01/03/2005 14:46:44]

vbintro

Dim A As Integer =3

En pratique:
Les variables aprs avoir t dclares, vont servir stocker des valeurs, effectuer des calculs, on peut afficher ensuite leur valeur. Exemple simpliste d'utilisation de variables: Dim A As Integer Dim B As Integer Dim Total As Integer A=3 B=2 'Cration d'une variable A 'Cration d'une variable B 'Cration d'une variable total

'Mettre '3' dans A 'Mettre '2' dans B

Total=A+B 'Mettre dans la variable 'Total' la valeur de A et de B LabelTotal.Text= Total.ToString 'Afficher le total dans un label (un label est une zone permettant d'afficher du texte), pour cela transformer 'Total' qui est un entier en chane de caractres puis le mettre dans un label.

Noter bien la diffrence entre : Dim Total As Integer Total= 123 'Total est une variable numrique (Integer ou Entier) contenant le nombre 123 et Dim Total2 As String Total2= "123" 'Total2 est une variable string contenant la chane de caractre "123" c'est dire les caractres "1" , "2" et "3"

http://plasserre.developpez.com/v1-6.htm (4 sur 13) [01/03/2005 14:46:44]

vbintro

On peut afficher les chanes de caractres ( ou String), pas les variables numriques. On fait des calculs avec les variables numriques. Il faudra donc parfois convertir le contenu d'une variable d'un type dans un autre type.( convertir une variable numrique en String pour l'afficher par exemple ou convertir une variable String en numrique pour faire un calcul) on apprendra cela plus loin. L'exemple simpliste juste au dessus en montre un exemple: il faut convertir Total qui est un entier en string pour l'afficher. Concernant les variables numriques: En mathmatique, les entiers ou les rels peuvent tre infiniment grands, en informatique les entiers ou les rels sont stocks sur un certains nombre d'octets. Ce qui fait qu'il existe une limite suprieure dans les nombres que l'on peut stocker. Exemple un Entier 'Integer' est stock sur 32 bits soit 4 octets, on conoit donc qu'il y a une valeur maximum (c'est 2147483647) Si on dpasse cette valeur VB le signale en dclenche une erreur. Les variables numriques peuvent tre signes (accepter les valeurs ngatives ou positives) ou non signes ( Comme le Type 'Byte' qui ne contient que des valeurs positives)

Il existe diffrents types de variable:

Nom :

Contient :

Boolean Contient une valeur Boolenne : True ou False.

http://plasserre.developpez.com/v1-6.htm (5 sur 13) [01/03/2005 14:46:44]

vbintro

Byte Contient les nombres entiers de 0 255 (sans signe) Short Entier sur 16 bits (-32768 32768) (-2147483648

Integer Entier sur 32 bits 2147483647)

Long Entier sur 64 bits (9223372036854775808 9223372036854775807) Single Nombre rel en virgule flottante (1,401298 *10^-45 1,401298 10^45) Double Nombre rel en virgule flottante double prcision. (..puissance 324) Decimal prcision Char Nombre rel en virgule fixe grande

1 caractre alphanumrique

String Chane de caractre de longueur variable (jusqu'a 2 milliard de caractres) DateTime Date plus heure

Object Peut contenir tous les types de variables mais aussi des contrles, des fentres.. Structure Ensemble de diffrentes variables dfinies par lutilisateur.

Dtaillons

Variable Boolenne.

Contient une valeur Boolenne : True ou False


Exemple:
http://plasserre.developpez.com/v1-6.htm (6 sur 13) [01/03/2005 14:46:44]

vbintro

Dim B As Boolean B=True

Variable entire:
Byte, Short, Integer, Long

Byte Contient les nombres entiers de 0 255 (sans signe) Short Entier sur 16 bits (-32768 32768) (-2147483648

Integer Entier sur 32 bits 2147483647)

Long Entier sur 64 bits (9223372036854775808 9223372036854775807)

Pour une variable entire il n'y a pas de possibilit de virgule!! attention, une division de 2 entiers donne un entier. Attention ,les variables numriques ne peuvent pas contenir de nombre infiniment grand: Il y a une limite maximum : un Integer est par exemple cod sur 32 bits ce

qui fait qu'il peut varier de -2147483648 2147483647. Si on utilise une valeur trop grande, une erreur se produit. Les entiers peuvent tre positifs ou ngatifs (Sauf les Bytes).
Plus on augmente le type (Long au lieu de Integer) plus on peut y mettre des grands nombres. Mais cela prend aussi plus de place et le traitement des oprations est plus long.

Les processeurs travaillant sur 32 bits, travailler plutt sur les Integer (qui sont cods sur 32 bits aussi), cest plus rapide,

http://plasserre.developpez.com/v1-6.htm (7 sur 13) [01/03/2005 14:46:44]

vbintro

que sur les short.


On utilise largement les 'Integer' comme variable de boucle, Flag, l ou il y a besoin d'entier...(Les calculs sur les rels en virgule flottante sont beaucoup plus lent.) Exemple: Dim I As Integer I=12

Le type de donnes Byte est utilis pour contenir des donnes binaires (octet codant de 0 255) non sign.

Variable rel avec virgule:


Un rel peut avoir une partie fractionnaire: 1,454 est un rel. Single, Double, Decimal.

Single Nombre rel en virgule flottante (1,401298 *10^-45 1,401298 10^45) Double Nombre rel en virgule flottante double prcision. (..puissance 324) Decimal prcision Nombre rel en virgule fixe grande

Les variables en virgule flottante ou notation scientifique:


(Single, Double) La variable peut tre positive ou ngative. Le 'Double' est, bien sur, plus prcis et peut atteindre des nombres plus grand que le 'Single'.

http://plasserre.developpez.com/v1-6.htm (8 sur 13) [01/03/2005 14:46:44]

vbintro

Le 'Single' comporte 7 chiffres significatifs maximum. Le nombre est cod en interne sous forme scientifique, exemple:1,234568E+008. Mais en pratique, on travaille et on les affiche de manire habituelle, en notation normale avec un point comme sparateur dcimal: Dim Poids As Single Poids=45.45 Format Scientifique, Mantisse et exposant: Voici 3 nombres: 14500000 0,145 0,0000145 Ils comportent tous les 3, deux informations: -le nombre entier 145 -la localisation du premier chiffre par rapport la virgule 8 -1 -5

dans nos exemples.

Donc un rel peut tre stock sous la forme d'un couple: -Partie entire -Localisation de la virgule Il est cod en interne avec une mantisse (la partie entire) et un exposant (position de la virgule), sous la forme mmmEeee, dans laquelle mmm correspond la mantisse (chiffres significatifs: partie entires) et eee l'exposant (puissance de 10). En fait, en notation scientifique (en codage interne) un chiffre prcde toujours la virgule: 1,234568E+008.

Attention ,les variables numriques relles ne peuvent pas contenir de nombre infiniment grand: Il y a une limite maximum comme pour les entiers. La valeur positive la plus leve d'un type de donnes Single est 3,4028235E+38 et celle d'un type de donnes Double est 1,79769313486231570E+308.

http://plasserre.developpez.com/v1-6.htm (9 sur 13) [01/03/2005 14:46:44]

vbintro

Quand on travaille avec des nombres ayant beaucoup de chiffres significatifs, il peut y avoir des erreurs d'arrondi. Le type 'Single' comporte par exemple une mantisse de 7 chiffres significatifs seulement. Si on utilise des nombres (mme petit: avec un exposant ngatif par exemple)avec 8 chiffres significatifs il peut y avoir des erreurs arrondi. Le type de donnes en Virgule fixe (Decimal) prend en charge jusqu' 29 chiffres significatifs et peut reprsenter des valeurs jusqu' 7,9228 x 10^28. Ce type de donnes est particulirement adapt aux calculs (par exemple, financiers) qui exigent un grand nombre de chiffres, mais qui ne peuvent pas tolrer les erreurs d'arrondi. Pour les calculs financiers ont utilisera les 'Decimal' ou les 'Double' Pour les petits calculs du genre rsultats d'examen biologique ont utilisera les 'Single' ou les 'Double' qui sont les plus rapides.

String, Char:
Le type 'String' peut contenir une 'chane de caractres' (alphanumrique) comme du texte. La longueur de la chane n'est pas fixe et une String peut avoir un nombre de caractre allant jusqu' environ 2 milliards de caractres.

Les chanes de longueur fixe nexistent pas (plus).


Le Type 'Char' contient un seul caractre. On utilise souvent des tableaux de 'Char'. Pour information Char et String contiennent des caractres au format Unicode (dans la variable,chaque caractre est cod sur 2 octets) et pas de l'ASCII ou de l'ANSI..(ancien codage ou chaque caractre tait cod sur un octet). Les premiers caractres ont le mme code Unicode et Ascii. Exemple: Caractre Code

http://plasserre.developpez.com/v1-6.htm (10 sur 13) [01/03/2005 14:46:44]

vbintro

"a" "b" " "

65 66 32

Il y a aussi des caractres non affichable: RC LF 13 10 09 retour chariot Line Feed Tabulation

Pour passer la ligne , on utilise les codes 13 puis 10. Il y a une constante toute faites pour cela:

ControlChars.CrLf

Chr$(13)+Chr$(10)

Annexe 1:Place occupe en mmoire:


Exemple de place occupe par une variable (et le nom de sa Classe dans le Common Langage Runtime). Boolean Byte Short Integer Long Single Double Decimal Date Char 2 octets de System.Boolean 1 octet de System.Byte 2 octets de System.Int16 4 octets de System.Int32 8 octets de System.Int64 4 octets de System.Single 8 octets de System.Double 16 octets de System.Decimal 8 octets de System.DateTime 2 octets de System.Char

http://plasserre.developpez.com/v1-6.htm (11 sur 13) [01/03/2005 14:46:44]

vbintro

Objet String

4 octets de System.Objet dpend de la chane , de System.String

La mthode GetType permet de savoir de quel type, de quelle Classe est une variable. Dim x As String MessageBox.Show(x.GetType.ToString) Systeme.String 'Affiche:

Prend le type de x, le transforme en String, l'affiche dans une MessageBox.

Annexe 2: Type primitif


Mise part Objet, Structure, Class tous les autres types sont dit 'Primitif'( Byte, Boolean, Shot, Integer, Long, Single, Double, Decimal, Date, Char, String)
q

Tous les types primitifs permettent la cration de valeurs par l'criture de littraux. Par exemple, i=123 ou i=123I (le I force 123 a tre entier) est un littral de type Integer. Il est possible de dclarer des constantes des types primitifs. Lorsque qu'une expression est constitue de constantes de type primitif, le compilateur value l'expression au moment de la compilation. C'est plus rapide.

Annexe 3: Choix des noms de variable


q

La plupart des noms sont une concatnation de plusieurs mots, utilisez des minuscules et des majuscules pour en faciliter la lecture. Pour distinguer les variables et les routines (procdures), utilisez la casse Pascal (CalculTotal) pour les noms de routine (la premire lettre de chaque mot est une majuscule). Pour les variables,la premire lettre des mots est une majuscule, sauf pour le premier mot (documentFormatType). Les noms de variables boolenne doivent contenir Is qui implique les valeurs Yes/No ou True/False,

http://plasserre.developpez.com/v1-6.htm (12 sur 13) [01/03/2005 14:46:44]

vbintro

Exemple fileIsFound. Mme pour une variable courte dure de vie qui peut apparatre uniquement dans quelques lignes de code, utilisez un nom significatif. Utilisez des noms courts d'une seule lettre, par exemple i ou j, pour les index de petite boucle uniquement. N'utilisez pas des nombres ou des chanes littrales telles que For i = 1 To 7. Utilisez plutt des constantes nommes, par exemple For i = 1 To Nombre_jour_dans _semaine, pour simplifier la maintenance et la comprhension. Utilisez des paires complmentaires dans les noms de variables telles que min/max, begin/end et open/close ou des expressions min max si ncessaire en fin de nom.

http://plasserre.developpez.com/v1-6.htm (13 sur 13) [01/03/2005 14:46:44]

vbintro

Site

Cours VB.net

1.6.1

Les string et Char

Une variable String peut contenir une chane de caractres, des donnes alphanumriques.
Une variable Char peut contenir un caractre. Pour travailler avec les 'String', on peut: Utiliser les mthodes de la Classe String. Utiliser les mthodes du Basic (les anciens reconnatrons)

STRING.
Il faut dclarer une variable avant de lutiliser, pour cela on utilise linstruction DIM DIM Str As String Dclare une variable nomme Str et qui peut contenir une chane de caractre. Cette variable peut tre utilise pour conserver une chane de caractre.

Str= "TOTO"

'On met la chane de caractres "TOTO" dans la variable Str On peut afficher le contenu de la chane dans un label (zone prsente dans une fentre et ou on peut afficher du texte) par exemple : Label.text = Str

http://plasserre.developpez.com/v1-6string.htm (1 sur 14) [01/03/2005 14:46:48]

vbintro

Cela affiche 'TOTO' Remarquons que pour dfinir une chane de caractres il faut utiliser des " " : Ce qui est entre " et " est la chane de caractres. On parle de chane littrale: (une reprsentation
textuelle d'une valeur particulire)

Aprs avoir t cre une String contient NOTHING ( pas une chane vide: ""), il faudra l'initialiser pour qu'elle contienne quelque chose.

DIM Str As String 'Str contient Nothing (pas le texte "Nothing" mais 'Rien') Str= "" Str= "TOTO" 'Str contient "" : chane vide 'Str contient "TOTO"

Notez bien l'importance des guillemets:

A est la variable A
"A"

est une chane de caractres contenant le caractre "A"

Exemple: Dim A As string= "Visual" Dim B As string= "Basic" Label.text = "A+B" Label.text = variables. A+B affiche btement la chane A+B

affiche Visual Basic on affiche les

Notez enfin que "

",

lespace est un caractre part entire.

Si je veux inclure un caractre " dans la chane il faut le doubler pour qu'il ne soit pas considrer comme caractre de fin de chane:
A=" Bonjour ""Monsieur"" " 'Afficher cela donne : Bonjour "Monsieur"

On peut initialiser la variable en mme temps quon la dclare. Dim Chane as string = "Toto"

http://plasserre.developpez.com/v1-6string.htm (2 sur 14) [01/03/2005 14:46:48]

vbintro

On peut dclarer plusieurs variables d'un mme type sur une mme ligne. Dim x, y, z As String 'Dclare 3 variables 'String'

ListBox1.Items.Add(x.GetType.ToString) ListBox1.Items.Add(y.GetType.ToString) ListBox1.Items.Add(z.GetType.ToString) Affiche dans une liste box System.String System.String System.String Ce qui prouve que les 3 variables sont bien des Strings. (ce qui n'tait pas le cas en VB6)

Les Variables 'chane de caractres' sont des objets 'STRING':


Le type String (Chane de caractres) est une Classe qui a des mthodes.

Pas besoin de connatre toutes les mthodes, il suffit (Aprs dclaration de la String par DIM Str AS String) de taper Str. .Et vous voyez apparatre toutes les proprits et mthodes : .Split .StarsWith .. .ToUpper .Trim

Par exemple la mthode .ToUpper Mettre en majuscules une chane de caractre Str=Str.ToUpper() Si Str contenait "abc" il contiendra "ABC"

.ToLower

transforme par contre

la chane en minuscule.

Quel intrt ? Exemple Je dois comparer 2 string pour savoir si elle sont gales, la premire a t saisie par lutilisateur et je ne sais pas si lutilisateur a tap en majuscule ou en minuscules.

http://plasserre.developpez.com/v1-6string.htm (3 sur 14) [01/03/2005 14:46:48]

vbintro

Si je compare A = "Vb" et B= "vb" elles sont diffrentes. Si je compare A.ToLower et B.ToLower elles sont gales.

.Trim Permet de supprimer des caractres en dbut et fin de chane. Dim A As String = "#@Informatique@#" Dim B As Char() = {"#", "@"} A=A.Trim(B) Donne A= "Informatique"

Attention : Bien utiliser Char() qui est un tableau de caractres pour dfinir les caractres supprimer. Dim B As string= "#@" est dconseill car produisant des rsultats curieux. On peut la rigueur utiliser les String pour un seul caractre. Pour enlever les espaces avant et aprs la chane (Cas le plus frquent) : A=A.Trim(" ") Il existe aussi StartTrim et EndTrim pour agir seulement sur le dbut ou la fin de la chane.

Length : Taille dune chane en nombre de caractre. Afficher la taille de la chane VB Dim S as String= "VB" MsgBox(S.Length.ToString) Affiche 2

Concat : Concatnation de plusieurs chanes : mise bout bout : S=String.Concat(A,B) Il est plus rapide de faire : S=A&B (S=A+B marche mais est dconseill)

http://plasserre.developpez.com/v1-6string.htm (4 sur 14) [01/03/2005 14:46:48]

vbintro

Insert : Insre une chane dans une autre. Dim S as string= "VisualBasic" S= A.Insert(6," " ) Donne S= "Visual Basic"

Replace : Remplace partout dans une chane de dpart, une chane par une autre. Resultat=ChaineDpart.Replace(ChaneARemplacer,ChaneQuiRemplace) Dim S as string= "Visual_Basic" S= S.Replace("_"," " ) Donne S= "Visual
Autre exemple: L'utilisateur a tap une date, mais avec comme sparateur des ".", comme on le verra plus loin, il est ncessaire d'utiliser plutt les "/", pour cela on utilise Replace

Basic"

Dim LaDate as string= "12.02.1990"


LaDate=

LaDate.Replace(".","/" ) Donne S= "12/02/1990"

Split : Dcoupe en plusieurs sous Chanes une chane de dpart, cela par rapport un sparateur. Exemple : Je rcupre dans un fichier une chane de mots ayant pour sparateur ; , je veux mettre chaque mot dans un tableau. Chane contenant les mots spars par ; Dim S as string= "Philippe;Jean ;Toto" Dim Separateur as Char = ";" Dim Nom() as String Nom=S.Split(Separateur) Donne :

http://plasserre.developpez.com/v1-6string.htm (5 sur 14) [01/03/2005 14:46:48]

vbintro

Nom(0)= "Philippe" Nom(1)= "Jean" Nom(2)= "Toto" Remarque: Quand on dclare le tableau Nom(), on ne donne pas le nombre d'lment, c'est Split qui cre autant d'lment qu'il faut. .IndexOf .LastIndexOf Indique le numro du caractre, la position (la premire occurrence) ou une chane chercher est trouve dans une autre. Dim A as String= "LDF.EXE" Dim R as Char()={"."} A.IndexOf(R) retourne 3

Se souvenir : le premier caractre est en position 0. .LastIndexOf retourne la dernire occurrence.

.Compare Compare 2 chanes : String.Compare(a,b) Retourne un entier Ngatif si a<b 0 si a=b Positif si a>b

.Substring Extrait une partie dune chane Dim A as string= "Informatique" MessageBox.show(A.Substring(2,3)) Affiche for

Le premier paramtre indique la position du caractre o doit commencer la souschane, en commenant la position 0. (les caractres sont compts 0, 1, 2,

http://plasserre.developpez.com/v1-6string.htm (6 sur 14) [01/03/2005 14:46:48]

vbintro

3...; on verra qu'avec mid la sous-chane, commence la position 1. Le second paramtre la longueur de la sous-chane.

.Chars Une chane peut tre perue comme un tableau de caractres (instances Char) ; vous pouvez extraire un caractre particulier en faisant rfrence l'index de ce caractre par l'intermdiaire de la proprit Chars. Par exemple : Dim maString As String = "ABCDE" Dim monChar As Char monChar = maString.Chars(3) ' monChar = "D"

On peut crer des chanes

avec la Classe String: 'Crer une chane de 15 espaces

MyString = New String(" ", 15)

.PadRight Aligne les caractres de cette chane gauche et remplit droite en ajoutant un caractre Unicode spcifi pour une longueur totale spcifie.

Dim str As String Dim pad As Char str = "Nom" pad = Convert.ToChar(".") Console.WriteLine(str.PadRight(15, pad)) ' Affiche Nom............ PadLeft fait l'inverse.

On peut aussi utiliser les mthodes Visual Basic:


Elles sont bien connues des 'anciens' et font partie intgrante du langage vb (Common Langage RunTime) et sont parfois plus simples. Elle font partie de l'espace de nom Microsoft.VisualBasic mais il est 'charg' par dfaut et il n'y a pas lieu de l'importer. Par contre quand certaines proprits sont communes plusieurs classes, il peut y a avoir ambigut et il faut utiliser dans ce cas la syntaxe complte. Cela semble le cas pour left qui est un mot cl Vb mais aussi une proprit des contrles. Pour lever l'ambigut il faut crire Microsoft.VisualBasic.left(C,i) par exemple. Ces mthodes font souvent double emploi avec les mthodes de la classe String: Mid: Permet de rcuprer une sous-chane. MaString = "Mid Demonstration" A = Mid(MaString, 1, 3) ' Retourne "Mid". Retourne 3 caractres partir du premier

http://plasserre.developpez.com/v1-6string.htm (7 sur 14) [01/03/2005 14:46:48]

vbintro

Le premier paramtre indique la position du caractre o doit commencer la souschane, en commenant la position 1. (les caractres sont compts 1, 2, 3...; on rappelle qu'avec SubString la sous-chane, commence la position 0. A = Mid(MaString, 14) ' Retourne "tion": du 14me la fin (pas de 3me argument) Mid permet aussi de remplacer une string dans une string Mid(MaString, 1, 3) = "Fin" => MaString="Fin Demonstration"

Left, Right Retourne x caractres de gauche ou de droite: A=Right(MaString,2) 'A="on" 'A="Mi"

A=Microsoft.VisualBasic.Left(MaString,2)

Notez bien que, pour lever toute ambigut avec les mthodes left d'autres classes, il faut indiquer Microsoft.VisualBasic.Left. Len. Retourne la longueur de la chane: MyLen = Len(MaString) ' Retourne 17.

LTrim, RTrim Enlve les espaces gauche ou droite d'une chane. A=LTrim(" InStr Retourne un entier spcifiant la position de dbut de la premire chane l'intrieur d'une autre. N=InStr(1,"aaaaRaa","R") 'retourne 5 RRRR") ' A="RRR"

Rechercher partir du premier caractre, quelque position se trouve 'R' dans la chane "aaaaRaa" Si la chane n'est pas trouve , retourne 0 InStrRev Recherche aussi une chane mais de droite gauche. la position de dpart est le 3me argument. InStrRev (Ch1, Ch2 , PosDpart) StrComp Compare 2 chanes. Space Retourne une chane d'espace: Space(10) retourne " "

http://plasserre.developpez.com/v1-6string.htm (8 sur 14) [01/03/2005 14:46:48]

vbintro

StrDup Retourne une chane de caractres par duplication d'un caractre dont on a spcifi le nombre. maString = StrDup(5, "P") ' Retourne "PPPPP"

Asc Retourne le code de caractre du caractre entr. Il peut tre compris entre 0 et 255 pour les valeurs du jeu de caractres cod sur un octet (SBCS) et entre 32 768 et 32 767 pour les valeurs du jeu de caractres cod sur deux octets (DBCS). La valeur retourne dpend de la page de codes AscW retourne le code Unicode du caractre entr. Il peut tre compris entre 0 et 65 535. x=Asc("A") 'retourne 65

x=Asc("ABCD") 'retourne 65 : Seul le premier caractre est pris en compte Chr et ChrW Retourne le caractre associ au code de caractre. Chr(65) ChrW retourne "A" 'cela dpend de la page de code.

retourne le caractre correspondant l'Unicode

GetChar Retourne le caractre d'une chane une position donne. Dim maString As String = "AIDE" Dim monChar As Char monChar = GetChar(maString, 3) ' monChar = "D"

LCase Ucase Retourne la chane en minuscule ou majuscule: Lowercase = LCase(UpperCase) Lset Rset Retourne une chane aligne gauche avec un nombre de caractre. Dim maString As String = "gauche" Dim R As String R = LSet(maString, 2) ' Retourne "ga" Si la chane de dpart est plus courte que la longueur spcifie, des espaces sont ajouts. R = LSet(maString, 8) ' Retourne "gauche " StrRevers Retourne une chane ou les caractres ont t inverss: Dim maString As String = "STRESSED"

http://plasserre.developpez.com/v1-6string.htm (9 sur 14) [01/03/2005 14:46:48]

vbintro

Dim revString As String revString = StrReverse(myString) Marrant l'exemple!! ' Retourne "DESSERTS"

Combinaison de chanes de caractres, des variables..


Souvent, on a besoin d'afficher une combinaison de chanes littrales, le contenu de variables, des rsultats de calcul; c'est possible

Exemple : Pour afficher dans un label le carr de X est X2, avec x variable ayant une valeur : Label1.text= "Le carr de " & X & " est " & X * X

Ce qui est entre guillemets est affich tel quel. C'est le cas de "Le carr de " et de " est " Ce qui nest pas entre guillemets est valu, le rsultat est affich. C'est le cas de X et X*X
Pour ne faire qu'une chane on ajoute les bouts de chanes avec l'oprateur '&'.

Notez lusage despace en fin de chane pour ne pas que les mots et les chiffres se touchent.
Dim X As Integer X=2

Label1.text= "Le carr de " & X & "


Affiche

est " & X * X

dans le label :

Le carr de 2 est 4

Exemple simple:
Une string 'Nom' contient un nom , mettre si ncessaire la premire lettre en majuscule. En utilisant les Classes String et Char: Dim Nom As String = "philippe" ' Si le premier caractre est minuscule If Char.IsLower(Nom.Chars(0)) Then ' Le transformer en majuscule et afficher

http://plasserre.developpez.com/v1-6string.htm (10 sur 14) [01/03/2005 14:46:48]

vbintro

MessageBox.Show(Char.ToUpper(Nom.Chars(0)) + x.Substring(1, Nom.Length - 1)) End If On regarde si le premier caractre de la chane Nom.Chars(0) est minuscule (.IsLower). Si oui on transforme ce premier caractre en majuscule (.ToUpper) et on ajoute la sous chane allant du second au dernier caractre. En utilisant les instructions VB: Dim Nom As String = "philippe" Nom = UCase(Microsoft.VisualBasic.Left(Nom, 1)) & Mid(Nom, 2) On prend le premier caractre de gauche : Left(Nom,1), on le transforme en majuscule (Ucase) , on ajoute la chane commenant par le second caractre et allant jusqu' la fin.

Like:
Instruction hyper puissante: Like, elle compare une chane String avec un modle (Pattern), elle permet de voir si la chane contient ou ne contient pas un ou des caractres, ou une plage de caractres. result = String Like Pattern Si string correspond pattern, la valeur de result est True ; s'il n'y a aucune correspondance, la valeur de result est False. Si string et pattern sont une chane vide, le rsultat est True. Sinon, si string ou pattern est une chane vide, le rsultat est False. L'intrt de Like est que l'on peut y mettre des caractres gnriques: ? veut dire tout caractre unique * veut dire * ou plusieurs caractres. # veut dire tout chiffre. [caractres] veut dire tout caractres prsent dans la liste. [!caractres] veut dire tout caractres NON prsent dans la liste.

- trait d'union permet de spcifier un dbut et une fin de plage. Exemple: Dim R As Boolean R = "D" Like "D" ' Est ce que "D" est gal "D"? => True.

R = "F" Like "f" ' Est ce que "F" est gal "f"? => False.

R = "F" Like "FFF" ' Est ce que "F" est gal "FFF"? => False.

http://plasserre.developpez.com/v1-6string.htm (11 sur 14) [01/03/2005 14:46:48]

vbintro

R = "cBBBc" Like "c*c" ' Est ce que "cBBBc" rpond au pattern (avoir un "c" au 'dbut, un "c" la fin, et des caractres au milieu? Retourne True.

R = "J" Like "[A-Z]" ' Est ce que "J" est contenu dans les caractres allant de ' A Z? Retourne True.

R = "I" Like "[!A-Z]" ' Est ce que "I" n'est PAS dans les caractres allant de ' A Z? Retourne False.

R = "a4a" Like "a#a" ' Est ce que "a4a" commence et finie par un ' "a" et un nombre entre les 2? Retourne True.

R = "bM6f" Like "b[L-P]#[!c-e]" ' Est ce que "bM6f" 'commence par "b", 'a des caractres entre L et P 'un nombre 'se termine par un caractre non compris entre c et e 'retourne True Option Compare L'ordre des caractres est dfini par Option Compare et les paramtres rgionaux du systme sur lequel s'excute le code. En utilisant Option Compare Binary, la plage [AE] correspond A, B, C, D et E. Avec Option Compare Text, [AE] correspond A, a, , , B, b, C, c, D, d, E et e. La plage ne correspond pas ou parce que les caractres accentus viennent aprs les caractres non accentus dans l'ordre de tri.

Unicode:
Les variables string sont stockes sous la forme de squences de 16 bits (2 octets) non signs dont les valeurs sont comprises entre 0 et 65 535. Chaque nombre reprsente un caractre Unicode. Une chane peut contenir jusqu' 2 milliards de caractres. Les premiers 128 codes (0127) Unicode correspondent aux lettres et aux symboles du clavier amricain standard. Ce sont les mmes que ceux dfinis par le jeu de caractres ASCII. Les 128 codes suivants (128255) reprsentent les caractres spciaux, tels que les lettres de l'alphabet latin, les accents, les symboles montaires et les fractions. Les codes restants sont utiliss pour des symboles, y compris les caractres textuels mondiaux, les signes diacritiques, ainsi que les symboles mathmatiques et techniques.

CHAR.
Les variables Char sont stockes sous la forme de nombres 16 bits (2 octets) non signs dont les valeurs sont comprises entre 0 et 65 535. Chaque nombre reprsente un seul caractre Unicode. Les conversions entre le type Char et les types numriques sont impossibles, mais il y a les fonctions AscW et ChrW peuvent tre utilises.. L'ajout du caractre de type littral C un littral de chane force ce dernier a tre un type Char. A utiliser surtout si Option Strict (qui force tre strict..) est activ. Exemple:

http://plasserre.developpez.com/v1-6string.htm (12 sur 14) [01/03/2005 14:46:48]

vbintro

Option Strict On ' ... Dim C As Char C = "A"C ToCharArray: Permet de passer une string dans un tableau de Char: Dim maString As String = "abcdefghijklmnop" Dim maArray As Char() = maString.ToCharArray
La variable maArray contient prsent un tableau compos de Char, chacune reprsentant un caractre issu de maString.

Chars:
vous pouvez extraire un caractre particulier en faisant rfrence l'index de ce caractre par l'intermdiaire de la proprit Chars. Par exemple : Dim maString As String = "ABCDE" Dim monChar As Char monChar = maString.Chars(3) ' monChar = "D"

Un caractre est-il numrique? un chiffre? une lettre? un sparateur? un espace?.... Dim chA Dim ch1 Dim str chA As Char = "A"c ch1 As Char = "1"c str As String = "test string"

Console.WriteLine(chA.CompareTo("B"c)) ' Output: "-1" ' A est plus petit que B Console.WriteLine(chA.Equals("A"c)) ' Output: "True" ' Egal? Console.WriteLine(Char.GetNumericValue(ch1)) ' Output: "1" 'Convertir en valeur numrique (double) Console.WriteLine(Char.IsControl(Chr(9))) ' Output: "True"' Est une caractre de contrle? Console.WriteLine(Char.IsDigit(ch1)) ' Output: "True"' Est un chiffre Console.WriteLine(Char.IsLetter(","c)) ' Output: "False"' Est une lettre Console.WriteLine(Char.IsLower("u"c)) ' Output: "True" ' Est en minuscule Console.WriteLine(Char.IsNumber(ch1)) ' Output: "True" ' Est un nombre Console.WriteLine(Char.IsPunctuation("."c)) ' Output: "True" ' Est un caractre de ponctuation Console.WriteLine(Char.IsSeparator(str, 4)) ' Output: "True" ' Est un sparateur Console.WriteLine(Char.IsSymbol("+"c)) ' Output: "True" ' Est un symbole Console.WriteLine(Char.IsWhiteSpace(str, 4)) '

http://plasserre.developpez.com/v1-6string.htm (13 sur 14) [01/03/2005 14:46:48]

vbintro

Output: "True" ' Est un espace Console.WriteLine(Char.ToLower("M"c)) Output: "m" ' Passe en minuscule Existe aussi IsLetterOrDigit, IsUpper. Bien sur si on est en 'Option Strict' il faut ajouter .ToString chaque ligne.

'

On note que l'on peut tester un caractre dans une chane: Char.IsWhiteSpace(str, 4)

Allons plus loin avec les Chanes de longueur fixe: On a vu que les chanes de longueur fixe n'existent pas en VB.NET (compatibilit avec les autres langages oblige), mais il y a moyen de contourner le problme: On peut utiliser la Classe de compatibilit VB6: (Il faut charger dans les rfrences du projet Microsoft.VisualBasic.Compatibility et Compatibility Data) Dim MaChaineFixe As New VB6.FixedLengthString(100)

Pour afficher la chane fixe utilisez MaChaineFixe.Tostring Mais pour mettre une chane dans cette chane de longueur fixe!! galre!!! MaChaineFixe="ghg" n'est pas accept: on ne peut pas mettre une String dans une chane fixe MaChaineFixe = CType("hg", Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString) 'pas accept non plus!! Enfin ce type de chane fixe ne peut pas tre utilise dans les structures, mais il y a un autre moyen pour les structures. On verra cela plus loin. Donc priori, les chanes fixes sont viter.

http://plasserre.developpez.com/v1-6string.htm (14 sur 14) [01/03/2005 14:46:48]

vbintro

Site

Cours : VB.net

Variables 1.6.2 numriques.


Une variable numrique peut contenir des donnes numriques.
On a vu qu'une variable numrique peut tre entire:
q

Integer

(entier)

Short (entier court) Long (Entier long) Byte (entier de 0 255)

mais aussi
q

Single (virgule flottante simple prcision) Double (virgule flottante double prcision) Decimal (virgule fixe haute prcision)

On dclare une variable numrique avec DIM, on peut linitialiser en mme temps : Dim i As Integer= 3

Si la variable est numrique, il faut la transformer en String avant de lafficher :

http://plasserre.developpez.com/v1-6-num.htm (1 sur 4) [01/03/2005 14:46:50]

vbintro

Dim I As Integer=12 Label.text = I.ToString

.ToString fait partie des mthodes. Il y en a d'autres: .GetType retourne le type de la variable Dim i As Integer Label1.Text = i.GetType.ToString 'Affiche: System.Int32

.MaxValue .MinValue donne le plus grand et le plus petit nombre possible dans le type de la variable.

On verra quon peut utiliser des oprateurs / . Dim I As Integer=2 Dim J As Integer J=I+3 J est gal 5 car on affecte J la valeur I+3

+ - *

On rappelle que le sparateur est le point : J=1.2 veut dire J=1,2 en bon franais !!

Il existe des fonctions mathmatiques. Pour qu'elles soient disponibles il faut dabord importer lespace de nom 'Math' : Pour cela il faut taper en haut de la fentre (au dessus de public Class) Imports System.Math
http://plasserre.developpez.com/v1-6-num.htm (2 sur 4) [01/03/2005 14:46:50]

vbintro

On verra plus loin ce que cela signifie. Dim N As Single Dim R As Single R=Abs(N) retourne la valeur absolu Si N=-1.2 R=Sign(N) R=1.2

retourne le signe R=-1 (ngatif) ; retourne

Si N=-1.2 1 si nombre positif

R=Round(N) proche

retourne le nombre entier le plus

N=1.7 N=1.2 N=1.5

R=2 R=1 R=2

On peut donner en second paramtre le nombre de digit: Math.Round(Valeur, 2)donne 2 dcimales aprs la virgule.

R=Floor(N) infrieur.

retourne le plus grand entier gal ou

N=1.7 R=Ceiling(N) ou suprieur

R=1

retourne le plus petit entier gal

N=1.2 R=Max(2,3)

R=2

retourne le plus grand des 2 nombres. retourne 3

R=Min(2,3)

retourne le plus petit des 2 nombres.

http://plasserre.developpez.com/v1-6-num.htm (3 sur 4) [01/03/2005 14:46:50]

vbintro

retourne 2 R=Pow(2,3) retourne retourne 8 R=Sqrt(9) retourne la racine carr. retourne 3


Il existe aussi les instructions du langage VB comme: Int et Fix qui suppriment toutes deux la partie fractionnelle et retournent l'entier . Si le nombre est ngatif, Int retourne le premier entier ngatif infrieur ou gal au nombre, alors que Fix retourne le premier entier ngatif suprieur ou gal au nombre. Par exemple, Int convertit -8,4 en -9 et Fix convertit 8,4 en -8. R=Int(8.4) R=8

2 puissance 3.

Bien sur il y a aussi Sin Cos Tan, Sinh Cosh Tanh (pour hyperbolique) Asin Acos Atan Atan2.
Prenons un exemple: Imports System.Math Dim MonAngle, MaSecant As Double MonAngle = 1.3 ' angle en radians. MaSecant = 1 / Cos(MonAngle) ' Calcul la scante.

On remarque que les angles sont en radians. Rappel:2=360 ; Angle en radians= (2/360)*Angle en degrs

http://plasserre.developpez.com/v1-6-num.htm (4 sur 4) [01/03/2005 14:46:50]

vbintro

Site

Cours : VB.net

1.6.3Conversion.

On a vu qu'on peut afficher les chanes de caractres, par ailleurs, on fait des calculs avec les variables numriques. Est-il possible de convertir une variable d'un type un autre?

Conversion numrique=>String
Quel intrt de convertir? On veut afficher un rsultat numrique. On ne peut afficher que des String (chane de caractres) dans un label ou un TextBox par exemple. Aussi,

il faut transformer cette valeur numrique en chane avant de lafficher, on le fait avec la mthode.ToString: Dim I As Integer=12 'On dclare une variable I qu'on initialise 12 Label.text = I.ToString La valeur de I est transforme en String puis affecte la proprit text du label, ce qui affiche '12'

Conversion String=>numrique

http://plasserre.developpez.com/v1-6conv.htm (1 sur 5) [01/03/2005 14:46:54]

vbintro

A linverse une chane de caractre peut tre transforme en numrique :


Par exemple, l'utilisateur saisie un nombre dans une boite de saisie (InputBox), mais il tape des caractres au clavier et c'est cette chane de caractres qui est retourne, il faut la transformer en numrique.

Dim S as String Dim i as Integer


S= InputBox ("Test", "Taper un nombre") 'Saisie dans une InputBox d'un nombre par l'utilisateur.

'S contient maintenant une chane de caractres, "45" par exemple I=Integer.Parse(S) en Integer 'on transforme la chane S

Bizarre cette syntaxe!! en fait cest le type Integer qui a une mthode (Parse) qui transforme une chane en entier.

On peut aussi utiliser, et cest plus simple, CType pour convertir nimporte quel type en nimporte quel type : Il suffit de donner cette fonction la variable modifier et le type obtenir. I=Ctype(S,Integer)

CType pour toutes les conversions


Ctype peut aussi servir convertir de la mme manire un single en double, un Short en Integer.... Il est donc possible de convertir un type de variable en un autre.

Il suffit de donner cette fonction la variable


http://plasserre.developpez.com/v1-6conv.htm (2 sur 5) [01/03/2005 14:46:54]

vbintro

modifier et le type obtenir. I=Ctype(S,Integer) 'conversion en entier

CType fait toutes les conversions, mais on peut aussi utiliser des fonctions qui sont spcifiques au type de la variable de retour: Le nom de ces fonctions contient le nom du type de la variable de retour.

CBool() CByte() CChar() CDate() CDbl() CDec() CInt() CLng() CObj() CShort() CSng() Pour convertir en Single CStr()
Exemple CDbl retourne un 'Double'.

Dim I As Integer=123 Dim D As Double D=CDbl(I) prcision) 'donnera D=123 D est un Double (rel double

Ces fonctions sont plus rapides car elles sont spcifiques. Remarque: Les fonctions CInt et CLng arrondissent les parties dcimales gales 0,5 au nombre pair le plus proche. Par exemple, 0,5 s'arrondit 0 et 1,5 s'arrondit 2. Bizarre!!

Val et Str existe aussi:


Ouf pour les anciens!! Ces fonctions permettent aussi la conversion String=>Numrique et Numrique=>String Val donne la valeur numrique d'une expression String. Dim i As Integer

http://plasserre.developpez.com/v1-6conv.htm (3 sur 5) [01/03/2005 14:46:54]

vbintro

i=Val("5")

' i=5

Val s'arrte au premier caractre non numrique. Val("12er") retourne 12 Val reconnat le point (et pas la virgule) Dim i As Double i=Val("5.45") i=Val("5,45") ' donnera i=5,45 ' donnera i=5

Str transforme une valeur numrique en String: Dim s As String s=Str(1999) ' s=" 1999"

Noter bien: Str ajoute un espace gauche ou le signe'-' si le nombre est ngatif. Str ne reconnat que le point comme sparateur dcimal. (Pour utiliser les autres sparateurs internationaux, il faut utiliser la fonction CStr() ).

Autre:
La Classe System.Convert permet la conversion d'un type de base vers un autre: .ToString en fait partie Exemple Pour convertir un Single en Byte (entier 8 bits non sign) .ToByte Pour convertir un Byte en Single: .ToSingle singleVal = System.Convert.ToSingle(byteVal)

en Decimal .ToDecimal

http://plasserre.developpez.com/v1-6conv.htm (4 sur 5) [01/03/2005 14:46:54]

vbintro

On a des mthodes pour pratiquement convertir tous les types en tous les types. Chercher!! On verra plus loin, la fonction Format utilise pour convertir les valeurs numriques que vous voulez mettre aux formats dates, heures ou monnaie ou dans d'autres formats dfinis par l'utilisateur.

IsNumeric
On utilise la fonction IsNumeric pour dterminer si le contenu d'une variable peut tre valu comme un nombre. Exemples:

Dim MyVar As Object Dim R As Boolean MyVar = "45" R = IsNumeric(MyVar) ' R= True. ' ... MyVar = "678.92" R = IsNumeric(MyVar) ' R= True. ' ... MyVar = "45 Kg" R = IsNumeric(MyVar) ' R= False.

'Attention le dernier exemple indique que "45 Kg" n'est pas purement numrique, mais Val("45 Kg") retourne 45 sans dclencher d'erreur car Val transforme les caractres numrique partir de la gauche, en s'arrtant ds qu'il y a un caractre non numrique.

http://plasserre.developpez.com/v1-6conv.htm (5 sur 5) [01/03/2005 14:46:54]

vbintro

Site

Cours : VB.net

Les 1.6.4 tableaux


Ils permettent

de regrouper des donnes de mme

type. Les tableaux vous permettent de faire rfrence un ensemble de variables par le mme nom et d'utiliser un numro, appel index ou indice, pour les distinguer. Comment dclarer un tableau : Dim Tableau(3) As Integer tableau de 4 entiers 'dclare un

On remarque que, ds la dclaration du tableau, le nombre d'lments est bien dfini et restera toujours le mme.

Dim Tableau(3) As Integer entrane la cration des variables 'Integer' suivante: Tableau (0) Tableau (1) Tableau (2) Tableau (3)

http://plasserre.developpez.com/v1-6tab.htm (1 sur 12) [01/03/2005 14:46:56]

vbintro

0 0 0 0

soit 4 lments
Noter que comme c'est un tableau d'entier, juste aprs la cration du tableau les lments sont initialiss 0.

Le tableau commence toujours par lindice 0


Le nombre d'lments dans le tableau est toujours gale l'indice de dimension + 1 (ou l'indice du dernier lment+1) Dim a(150) comporte 151 lments (lments d'index 0 150).

Tableau(1)= 12 permet daffecter le nombre 12 au 2eme lment du tableau.


0 12 0 0

S=Tableau(1) permet daffecter la variable S le 2eme lment du tableau.

Un tableau peut avoir plusieurs dimensions : Dim T(2,2) 3 X 3 lments

http://plasserre.developpez.com/v1-6tab.htm (2 sur 12) [01/03/2005 14:46:56]

vbintro

Pour un tableau 2 dimensions le premier argument reprsente les lignes, le second les colonnes.
0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2

Exemple:

La premire ligne comporte les 3 lments: T(0,0) T(0,1) et T(0,2)

Il est possible de crer des tableaux 3, 4 ..dimensions: Dim T(2,2,2) 3X3X3 lments.

On peut crer des tableaux de tableaux: Dim T(2),(2) (2,2) Il a autant d'lment que le tableau T

Il est possible de crer des tableaux avec tous les types de variable (y compris les structures) Dim Mois(12) As String 'tableau de String

Notez que dans ce cas les lments contiennent Nothing car le tableau contient des String et quand on dclare une String, elle contient Nothing au dpart.

On peut initialiser un tableau (Donner une valeur aux lments): Dim Mois(12) As String
Mois(0)="Janvier"

http://plasserre.developpez.com/v1-6tab.htm (3 sur 12) [01/03/2005 14:46:56]

vbintro

Mois(1)="Fvrier" Mois(2)="Mars" ou

lors de sa dclaration :

Dim Mois() As String ={Janvier,Fvrier,Mars} On verra dans un des exemples que l'on peut crer un tableau avec la mthode CreateInstance.

Redim permet de redimensionner un tableau (modifier le nombre d'lments d'un tableau existant), si on ajoute Preserve les anciennes valeurs seront conserves.
Attention , on ne peut pas modifier le nombre de dimension, ni le type des donnes. Un tableau 2 dimensions de 20 fois 20 string pourra tre redimensionn en tableau de String 30 fois 30, mais pas en tableau d'entiers ou 3 dimensions. Dim T(20,20) As String ... Redim Preserve T(30,30)

Il est possible d'crire Dim T( , ) As String Dim T( , ) As String 'Sans donner les dimensions du tableau: il est dclar mais n'existe pas car T(1,1)="toto" dclenche une erreur. Il faut avant de l'utiliser crire Redim T(30,30), (sans remettre As String). Certaines instructions comme Split redimensionne elle-mme le tableau au nombre d'lment ncessaire.

Dim Nom() as String


http://plasserre.developpez.com/v1-6tab.htm (4 sur 12) [01/03/2005 14:46:56]

vbintro

Nom=S.Split(Separateur)

Erase efface le tableau et rcupre lespace.

Comment parcourir un tableau? Pour parcourir un un tous les lments d'un tableau, on utilise une boucle: Exemple: crer un tableau de 11 lments et mettre 0 dans le premier lment, 1 dans le second, 2 dans le troisime... Dim T(10) As Integer Dim i As Integer

For i = 0 To 10 T(i)=i Next i


La variable de boucle i est utilise pour parcourir le tableau: on utilise l'lment T( i ) donc successivement T(1) puis T(2)...et on affecte i donc 1 puis 2 puis 3..

On peut aussi utiliser For Each:( un tableau tant ici considr comme une collection) Dim amis() As String = {"pierre", "jean", "jacques", "toto"} For Each nom As String In amis Console.Out.WriteLine(nom) Next L'exemple affiche sur la console (menu Affichage->Fentre>Sortie) les noms qui sont dans le tableau.

Un tableau est un objet !!


Crons 2 tableaux et examinons les principales mthodes.

http://plasserre.developpez.com/v1-6tab.htm (5 sur 12) [01/03/2005 14:46:56]

vbintro

Dim a(3) As String Dim b(3) As String b=a b=a.copy Copie le tableau a dans b Est quivalent

Attention: il copie les rfrences (ladresse, lendroit ou se trouve la variable) et non pas la valeur de cette variable, ce qui fait que si vous modifiez b(3), a(3) sera aussi modifi. Car lorsque vous assignez une variable tableau une autre, seul le pointeur (ladresse en mmoire) est copi.

Pour obtenir une copie indpendante faire : b=a.clone Dans ce cas si vous modifi a(2), b(2) ne sera pas modifi.

Par contre a(1)=b(1) n'affecte que l'lment a(1)

La Classe Array.
Tous les tableaux viennent de la classe Array; vous pouvez accder aux mthodes et proprits de System.Array de chaque tableau Par exemple, la proprit Rank retourne le nombre de dimension du tableau et la mthode Sort trie ses lments.

Exemple :
Soit un tableau Mois()
http://plasserre.developpez.com/v1-6tab.htm (6 sur 12) [01/03/2005 14:46:56]

vbintro

Clear

Array.Clear(Mois,0,2) Efface 2 lments du tableau Mois partir de llment 0


Reverse

Array.Reverse(Mois, 1, 3) inverse les 3 lments partir de llment 1


Copy

Array.Copy(Mois,1,Mois2,1,20) copie 20 lments de Mois vers Mois2 partir du 2eme lment.


Sort

Array.sort(Mois)

Trie le tableau Mois

Malheureusement cette mthode marche sur des tableaux unidimensionnels uniquement.


Au lieu d'utiliser un tableau 2 dimensions (sur lequel la mthode sort ne marche pas, on peut ruser et

crer 2 tableaux et surcharg la mthode sort pour trier les 2 tableaux (un servant de cl, le second d'items):
Array.Sort(myKeys, myValues) (Voir un exemple plus bas)

Equals

compare 2 tableaux.

Binarysearch recherche un lment dans un tableau tri unidimensionnel.(algorithme de comparaison binaire performant sur tableau tri) Exemple : I=Array.BinarySearch(Mois, "Fvrier")
http://plasserre.developpez.com/v1-6tab.htm (7 sur 12) [01/03/2005 14:46:56]

vbintro

retourne I=1 est Mois(0)


IndexOf

se souvenir le premier lment

Recherche un objet spcifi dans un tableau unidimensionnel (tri ou non), retourne l'index de la premire occurrence. Dim myIndex As Integer = Array.IndexOf(myArray, myString)

Retourne -1 si l'lment n'est pas trouv. LastIndexOf fait une recherche partir de la fin. Ubound Retourne le plus grand indice disponible pour la dimension indique d'un tableau Dim Indice, MonTableau(10, 15, 20) Indice = UBound(MonTableau, 1) ' Retourne 10. (1 indique la premire dimension du tableau)

GetUpperBound mme fonction Indice = MonTableau.GetUpperBound(0) '( 0 pour premire dimension!!) Retourne 10. Lbound existe (plus petit indice) mais est inutile car toujours gal 0. Length retourne un entier qui reprsente le nombre d'lments dans le tableau. GetValue et SetValue permettent de connatre ou de modifier la valeur d'un lment du tableau: Mois.GetValue(0) est quivalent Mois(0)

Dans un tableau 2 dimensions comment modifier l'lment (0,3): myArray.SetValue("fox", 0, 3)

http://plasserre.developpez.com/v1-6tab.htm (8 sur 12) [01/03/2005 14:46:56]

vbintro

Exemple:
Exemple dtaill:
Crer un tableau de 6 lments, mettre dans chaque lment du tableau le carr de son indice, afficher le contenu du tableau.

Cela montre lintrt dutiliser une boucle pour balayer tous les lments dun tableau. Premire boucle pour remplir le tableau, seconde boucle pour afficher.(Une boucle For ..Next est ici utilise, on verra cela plus loin.)

Dim arr(5) As Integer Dim i As Integer For i = 0 To arr.GetUpperBound(0) GetUpperBound(0) retourne 5 arr(i) = i * i Next i For i = 0 To arr.GetUpperBound(0) Console.WriteLine("arr(" & i & ") = " & arr(i)) Next i Faire une boucle allant de 0 au dernier lment du tableau (For i=0 to ..) Dans chaque lment du tableau mettre le carr de son indice (arr(i)=i*i ) Nouvelle boucle pour afficher les noms des diffrents lments et leur contenu. (Console.WriteLine() affiche sur la console le nom de l'lment et son contenu)

http://plasserre.developpez.com/v1-6tab.htm (9 sur 12) [01/03/2005 14:46:56]

vbintro

Le programme gnre la sortie suivante : arr(0) = 0 arr(1) = 1 arr(2) = 4 arr(3) = 9 arr(4) = 16 arr(5) = 25

Exemple de recherche dans un tableau: Dans un tableau de String rechercher dans quel lment et quelle position se trouve la string "MN". Dim Tableau() As String = {"ABCDEFG", "HIJKLMNOP"} Dim AChercher As String = "MN" Dim i As Integer Dim position As Integer For i = 0 To Tableau.Length - 1 position = Tableau(i).IndexOf(AChercher) If position >= 0 Then Exit For Next i

Exemple de tri de 2 tableaux: On cre un tableau de cl et un tableau des valeurs, chaque cl est li une valeur. On trie partir du tableau des cl myKeys , le tableau myValues est modifi pour 'suivre' le tri des cl. La Sub PrintKeysAndValues affiche les rsultats. Public Shared Sub Main() ' ****************Cration des tableaux. Dim myKeys() As String = {"red", "GREEN", "YELLOW", "BLUE", "purple", "black", "orange"} 'Tableau des cl Dim myValues() As String = {"strawberries", "PEARS", "LIMES", "BERRIES", "grapes", "olives", "cantaloupe"}

http://plasserre.developpez.com/v1-6tab.htm (10 sur 12) [01/03/2005 14:46:56]

vbintro

'tableau des lments 'Affichage du tableau non tri Console.WriteLine("Tableau non tri:") PrintKeysAndValues(myKeys, myValues) ' Tri les lments 1 3 puis affichage. Array.Sort(myKeys, myValues, 1, 3) Console.WriteLine("Aprs tri d'une partie du tableau:") PrintKeysAndValues(myKeys, myValues) ' Tri la totalit du tableau. Array.Sort(myKeys, myValues) Console.WriteLine("Aprs tri de la totalit du tableau:") PrintKeysAndValues(myKeys, myValues) End Sub 'Fin de Main ' Routine affichant dans la console les cls et valeurs Public Shared Sub PrintKeysAndValues(ByVal myKeys() As [String], ByVal myValues() As [String]) Dim i As Integer For i = 0 To myKeys.Length - 1 Console.WriteLine(" {0,-10}: {1}", myKeys(i), myValues(i)) Next i Console.WriteLine() End Sub 'PrintKeysAndValues Cration de tableau avec CreatInstance ' Crons un tableau d'entier (Int32) comprenant 5 lments. Dim myArray As Array = Array.CreateInstance(GetType(Int32), 5) Dim i As Integer For i = myArray.GetLowerBound(0) To myArray.GetUpperBound(0) myArray.SetValue(i + 1, i) Next i

Merci Microsoft pour les exemples.

On insiste donc sur le fait d'un tableau est de type 'par rfrence' ( et pas ''par Valeur'), on y reviendra.

http://plasserre.developpez.com/v1-6tab.htm (11 sur 12) [01/03/2005 14:46:56]

vbintro

http://plasserre.developpez.com/v1-6tab.htm (12 sur 12) [01/03/2005 14:46:56]

vbintro

Site

Cours : VB.net

Les 1.6.5 Collections


Une alternative aux tableaux est lusage de Collection.
Fait partie de

System.Collections

Une collection fonctionne plutt comme un groupe d'lments dans laquelle il est possible dajouter ou denlever un lment nimporte quel endroit sans avoir se proccuper de sa taille ni ou se trouve l'lment.
Le nombre d'lment n'est pas dfini au dpart comme dans un tableau. Dans une collection il n'y a que les lments que l'on a ajout.

Les lments sont reprs grce un index ou avec une Cl unique


Les items affiches dans une ListBox donne une ide concrte de ce qu'est une collection.

Exemple simpliste permettant de comprendre la notion de collection:


Soit la collection Col, au dpart elle est vide. J'ajoute des lment (ou items) cette collection. Col.Add ("Toto") Voici la collection:
http://plasserre.developpez.com/v1-6col.htm (1 sur 10) [01/03/2005 14:46:59]

vbintro

Toto La collection a maintenant 1 lment.

Col.Add("Lulu") Col.Add("Titi") Toto Lulu Titi La collection a 3 lments maintenant.

Col.Remove(2) enlve l'lment numro 2 Toto Titi La collection n'a plus que 2 lments maintenant. On voit que le nombre d'lment n'est pas connu l'avance, il varie en fonction des lments ajouts (ou retirs) Un lment est repr par son indice. Col.Item(2) contient "Titi" (le second Item de la collection)

L'objet Collection:
'Collection' existait dj en VB6!! L'objet collection utilise un couple Cl-Valeur, pour chaque lment.

Ici le premier lment pour cl: 69, pour valeur:'Rhne'


http://plasserre.developpez.com/v1-6col.htm (2 sur 10) [01/03/2005 14:46:59]

vbintro

C'est pratique car cela permet de retrouver une valeur partir de la cl. Pour utiliser une collection d'objets, vous devez premirement crer l'objet maCollection. Dim maCollection As New Collection Ds que cet objet est cr, vous pouvez ajouter (avec Add), enlever ou manipuler des lments. On utilise la syntaxe: NomCollection.Add( lment, Cl) maCollection.Add("Bonjour", "30") maCollection.Add("Monsieur", "31") maCollection.Add("Et", "32") maCollection.Add("Madame", "33") Il peut y avoir 2 autres paramtres: maCollection.Add(Element, Cl, Before, After) Before ou After peuvent tre utiliss pour placer l'lment insrer avant ou aprs un lment de la collection. Si Before ou After est un nombre c'est l'index des lments qui est utilis, si c'est une string c'est la cl. Pour rcuprer un objet de la collection, on peut utiliser
q

l'index:

Label1.Text = maCollection.Item(2) 'Affiche le second lment: Monsieur

Attention le premier lment est ici l'lment 1 (l'index va de 1 Count); c'est hrit du VB6!!
q

La

cl

Label1.Text = maCollection.Item("33") 'Affiche Madame

Liste dobjets: ArrayList .


http://plasserre.developpez.com/v1-6col.htm (3 sur 10) [01/03/2005 14:46:59]

vbintro

La ArrayList est une collection particulire: On peut y mettre des objets : chanes, nombre rien nempche que le premier lment soit un entier, le second une chaneIl n'y a pas de cl.

Attention le premier lment est ici l'lment 0 (l'index va de 0 count-1) ; c'est du .NET!!

Dim L As New ArrayList() collection ArrayList

'On cre une

Dim L As ArrayList = ArrayList.Repeat("A", 5) 'On cre une ArrayList de 5 lments contenant chacun rpte "A") "A" (on

L.Add("Bonjour") la collections MsgBox(L(0)) premier lment

'On ajoute un lment

'On affiche le

On affiche le premier lment L(0)


On pourra aussi crire L.Item(0) pour pointer le premier lment.

MsgBox(L.Count.ToString) nombre dlment.

'On affiche le

Attention c'est le nombre d'lments. S'il y a 3 lments dans la ArrayList ce sont les lments d'index 0,1,2.

L.Remove("Bonjour") lment de la liste L.RemoveAt(0) llment 0 de la liste L.Sort() collection L.Clear() lments

'On enlve un

'On enlve

'Trie la

'Efface tous les

http://plasserre.developpez.com/v1-6col.htm (4 sur 10) [01/03/2005 14:46:59]

vbintro

L.Containts (lment) si la liste contient lment.

' Retourne True

Insert permet dinsrer un index spcifi.


L.Insert( position, Ainserrer) InsertRange insre une ArrayList dans une Autre ArrayList.

Pour parcourir une collection, 2 mthodes : Avec lindex de litem For i=0 to L.Count-1 A=L.Item(i) Next i NB: Comme vu plus haut, on utilise Count pour trouver le nombre d'lment, aussi la boucle doit balayer de 0 count-1. Avec For Each Dim o As Objet For Each o in L A=o Next

Autres collections :

StringCollection
Ne

peut contenir que des chanes (cela devrait aller plus vite)

http://plasserre.developpez.com/v1-6col.htm (5 sur 10) [01/03/2005 14:46:59]

vbintro

HashTable
comporte des couples cl-lment, des paires clvaleur.

La cl toujours unique permet de retrouver la valeur H.Add(Cl,Valeur) Ajoute un lment

H.Item(Cl) Retourne llment correspondant une cl. H.ContainsKey(Cl) est dans la table. Retourne True si la Cl

Attention le premier lment est ici l'lment 1 (index allant de 1 count)

SortedList
Cest une HashTable mais avec ordonnancement des paires par tri partir de la cl.

Queue
Collection de type FIFO (First In, First Out) Premier arriv premier servi.
C'est la queue devant un cinma, le premier arriv, prend don billet le premier.

DeQueue supprime et retourne lobjet de dbut de liste


http://plasserre.developpez.com/v1-6col.htm (6 sur 10) [01/03/2005 14:46:59]

vbintro

EnQueue ajoute un objet en fin de liste Peek retourne lobjet de dbut sans le supprimer

Stack
Collection de type pile ( ou stack) LIFO (Last In, First Out)
Dernier entr, premier sortie. Ce type de stack (pile) est trs utilis en interne par les programmes informatiques: on stocke dans une stack les adresses de retour des procdures appeles, au retour on rcupre l'adresse du dessus.

Push insre un objet en haut de la pile Pop enlve et retourne un objet en haut de la pile

On peut utiliser une pile dans un programme pour grer le dplacement de l'utilisateur dans un arbre, les lments en cours sont stocks par Push, pour remonter en chemin inverse, on Pop.

Attention le premier lment est ici l'lment 1 (lment d'index 1 count)

http://plasserre.developpez.com/v1-6col.htm (7 sur 10) [01/03/2005 14:46:59]

vbintro

Exemple: Dim MaPile As New Stack() Dim Str As String 'Ajouter des lments la pile MaPile.Push ("A") MaPile.Push ("B") MaPile.Push ("C") 'Rcuprer un objet de la pile: Srt =MaPile.Pop() Str sera gal "C" Si la pile est vide et que l'on 'Pop', une exception non gre du type 'System.InvalidOperationException' se produit.(une erreur se produit et cela plante!!)

BitArray
Cre une collections de boolens. La valeur de chaque lment est True ou False. Creation de BitArray. Dim myBA As New BitArray(5) Dim myBA As New BitArray(5, False) Dim myBA() As Byte = {1, 2, 3, 4, 5} Dim myBA As New BitArray(myBytes)

Gnralisation de la notion de collection.


Certains objets ont une liste de donne, Vb les organise en Collections. Une collection peut donc faire partie des objet. Exemple: proprits d'un

http://plasserre.developpez.com/v1-6col.htm (8 sur 10) [01/03/2005 14:46:59]

vbintro

On verra plus loin d'un contrle nomm TextBox peut contenir du texte, et bien, ce contrle une collection nomm .lines qui contient chaque ligne du texte (s'il y en a plusieurs) Si le texte contient 3 lignes, elles seront dans la collection .lines Texbox1.lines(0) Textbox1.lines(1) Textbox1.lines(2) L'indice des lments va de 0 count-1 Autres exemple: Les contrles ListBox possde une collection Items dans laquelle est plac tous les lments contenus dans la liste. Pour ajouter un lment on utilisera la mthode Add de la collection Items: ListBox.Items.Add( ) Un tas d'objets possde des collections. Encore plus: chaque formulaire possde une Collections Controls. Il s'agit d'une collection qui contient tous les contrles de ce formulaire. 'remarquer, ici le premier lment est 0!!

Pourquoi le premier lment est 0 ou 1?

Le .NET Framework normalise les collections comme tant des collections de base zro (ArrayList par exemple). La classe Collections de Visual Basic sert principalement assurer une compatibilit avec des versions prcdentes et fourni des collections de base 1.

Exemples sur les collections:


Crer une ArrayList, une queue, ajouter la queue la ArrayList, chercher un lment, insrer un lment. Les collections font partie de l'espace de nom Systeme.Collections

Imports System.Collections ' Crer une ArrayList. Dim myAL As New ArrayList()
http://plasserre.developpez.com/v1-6col.htm (9 sur 10) [01/03/2005 14:46:59]

vbintro

myAL.Insert(0, "un") myAL.Insert(1, "deux") ' Crer une Queue. Dim myQueue As New Queue() myQueue.Enqueue("trois") myQueue.Enqueue("quatre") ' Copies la Queue dans ArrayList l'index 1. myAL.InsertRange(1, myQueue) ' Chercher "deux" et ajouter "moins de deux" avant . myAL.Insert(myAL.IndexOf("deux"), "moins de deux") ' Ajouter "!!!" la fin. myAL.Insert(myAL.Count, "!!!")

http://plasserre.developpez.com/v1-6col.htm (10 sur 10) [01/03/2005 14:46:59]

vbintro

Site

Cours : VB.net
Les Structures

1.6.6

Permet de regrouper des donnes de type diffrent: (En Vb6 il y avait les types dfinis par l'utilisateur, ils sont remplacs par les structures.)

Les structures sont intressantes quand vous voulez utiliser des variables contenant plusieurs informations de diffrent type.

Exemple :
Vous voulez dfinir une variable contenant une adresse compose d'un numro, de la rue,de la ville.

Il faut dabord dfinir la structure (au niveau Module ou Class, pas dans une procdure) Public Structure Adresse Dim Numero As Integer Dim Rue As String Dim Ville As String End Structure

Puis dans une procdure il faut dclarer la variable : Dim MonAdresse As Adresse La variable MonAdresse est dclar comme une adresse, elle contient donc:
un numro 'stock' dans MonAdresse.Numero

http://plasserre.developpez.com/v1-6struct.htm (1 sur 7) [01/03/2005 14:47:00]

vbintro

une nom de rue 'stock' dans MonAdresse.Rue un nom de ville 'stock' dans MonAdresse.Ville

On pourra enfin lutiliser :


MonAdresse.Numero=2

MonAdresse.Rue= "Grande rue" MonAdresse.Ville= "Lyon"

On peut aussi utiliser le mot cl With pour ne pas avoir rpter le nom de la variable (et cela va plus vite).

With MonAdresse .Rue= "Grande rue" .Ville= "Lyon"


End With With est utilisable sur tous les objets.

Il est possible de travailler sur un tableau de structures: Dim Adresses(99) as Adresse 100 adresses 'Permet de travailler sur un tableau de

Adresses(33).Rue="Place de la mairie" On peut utiliser une variable dclare par une structure comme paramtre d'une fonction: Sub AfficheAdresse( ByVal ...Imprimer l'adresse End sub Pour imprimer l'adresse 33 on crira AfficheAdresse ( Adresse(33)) Une Adresse As Adresse)

Attention quand dans une structure il y a un tableau, il faut linitialiser:


http://plasserre.developpez.com/v1-6struct.htm (2 sur 7) [01/03/2005 14:47:00]

vbintro

on veut dfinir une structure dans laquelle il y a 25 donnes DriveNumber. On aurait tendance crire:

Public Type DriveInfo DriveNumber(25) As Integer FAUX DriveType As String End Type

' En Visual Basic .NET il faut faire:


1-Mthode par initialize

Public Structure DriveInfo Dim DriveNumber() As Short ' Noter que le nombre dlment a disparu. Dim DriveType As String maintenant on instance les 25 lments. Public Sub Initialize() ReDim DriveNumber(25) End Sub End Structure

On voit qu'une structure peut comporter une mthode. Ici, on a cre une mthode Initialize.

Exemple de routine utilisant la structure. Function AddDrive(ByRef Number As Short, ByRef DriveLabel As String) As Object Dim Drives As DriveInfo Drives.Initialize() Drives.DriveNumber(0) = 123 Drives.DriveType = "Fixed" End Function 2-Autre manire de faire: Public Structure DriveInfo Dim DriveNumber() As Short Dim DriveType As String End Structure
http://plasserre.developpez.com/v1-6struct.htm (3 sur 7) [01/03/2005 14:47:00]

vbintro

Function AddDrive(ByRef Number As Short, ByRef DriveLabel As String) As Object Dim Drives As DriveInfo Redim Drives.DriveNumber(25) Drives.DriveNumber(3)=12 Drives.DriveType = "Fixed" End Function

Si on utilisait 100 variables Drives, il faudrait 'Redim' le tableau pour chaque variable!!

Allons plus loin:


Une structure hrite de System.ValueType

Les structures sont des types 'valeur'.


Une variable d'un type structure contient directement les donnes de la structure, alors qu'une variable d'un type classe contient une rfrence aux donnes, ces dernires tant connues sous le nom d'objet. Cela a de l'importance: si je cre une variable avec une structure, que je copie cette variable dans une seconde, le fait de modifier la premire variable ne modifie pas la seconde. Prenons l'exemple donn par Microsoft:

Structure Point Public x, y As Integer Public Sub New(x As Integer, y As Integer) Me.x = x Me.y = y End Sub End Structure On dfinie une structure Point et on dfinie une mthode New permettant de saisir les valeurs: Public Sub New est un constructeur.

Pour saisir les valeurs de x et y ont peut utiliser: Dim a As Point

http://plasserre.developpez.com/v1-6struct.htm (4 sur 7) [01/03/2005 14:47:00]

vbintro

a.x=10 a.y=10 ou utiliser le constructeur: Dim a As New Point(10,10)


En partant de la dclaration ci-dessus, le fragment de code suivant affiche la valeur 10 :

Dim a = new Point(10, 10) Dim b = a a.x = 100 Console.WriteLine(b.x) 'b est donc bien diffrent de a
L'assignation de a b cre une copie de la valeur, et b n'est donc pas affect par l'assignation a.x. Si, en revanche, Point avait t dclar comme une classe, la sortie aurait t 100 puisque a et b auraient rfrenc le mme objet. Enfin, les structures n'tant pas des types 'rfrence', il est impossible que les valeurs d'un type structure soient null ( elles sont gales 0 aprs la cration).

Les structures peuvent contenir plein de choses:


On a vu qu'elle peuvent contenir: Des variables de diffrent type. Des tableaux. Des mthodes : on a vu l'exemple de Initialize et de New. Mais aussi Des objets. D'autres Structures. Des procdures. Des proprits. Exemple donn dans l'aide (et modifi par moi) : Dbutant: A relire peut-tre ultrieurement quand vous saurez utiliser les Classes. Cet exemple dfinit une structure Employee CalculBonus et une proprit Eligible. contenant une procdure

http://plasserre.developpez.com/v1-6struct.htm (5 sur 7) [01/03/2005 14:47:00]

vbintro

Public Structure Employee Public FirstName As String Public LastName As String ' Friend members, accessible partout dans le programme. Friend EmployeeNumber As Integer Friend WorkPhone As Long ' Private members, accessible seulement dans la structure. Private HomePhone As Long Private Level As Integer Public Salary As Double Public Bonus As Double ' Procedure . Friend Sub CalculateBonus(ByVal Rate As Single) Bonus = Salary * CDbl(Rate) End Sub ' Property pour retourner l'ligibilit d'un employ. Friend ReadOnly Property Eligible() As Boolean Get Return Level >= 25 End Get End Property End Structure Utilisons cette structure: Dim ep As Employee ep.Salary = 100 'Dclaration d'une variable Employee 'On saisit le salaire

ep.CalculateBonus(20) 'On calcul le bonus TextBox1.Text = ep.Bonus.ToString Cela ressemble aux Classes !! Non? 'On affiche le bonus

Porte:
Vous pouvez spcifier l'accessibilit de la structure l'aide des mots cl: Public, Protected, Friend ou Private ou garder la valeur par dfaut, Public. Vous pouvez dclarer chaque membre en spcifiant une accessibilit. Si vous utilisez l'instruction Dim sans mot cl, l'accessibilit prend la valeur par dfaut, Public. Private Mastructure Public i As Integer ... End Structute En conclusion les structures sont maintenant trs puissantes et peuvent contenir autant de chose que les modules de Classes , on verra cela plus loin. Mais les structures sont rfrences par valeur alors que les Classes le sont par rfrence

http://plasserre.developpez.com/v1-6struct.htm (6 sur 7) [01/03/2005 14:47:00]

vbintro

http://plasserre.developpez.com/v1-6struct.htm (7 sur 7) [01/03/2005 14:47:00]

Site

Site

Cours : VB.net

Les variables 1.6.7 par valeur ou par rfrence.


Rsumons la notion trs importante

de variable

par

valeur ou par rfrence.

La variable 'par Valeur': Contient rellement une valeur. Prenons pour exemple une variable de type 'Long' Dim L As Long L= 1456 L occupe 8 octets ncessaire pour coder un long, ici L a une valeur de 1456, donc dans ces 8 octets est cod 1456. Sont des variables par 'Valeur': Les Integer, les Long les Short Les Single, Double, Decimal

http://plasserre.developpez.com/v1-6val.htm (1 sur 6) [01/03/2005 14:47:03]

Site

Les Booleans, Char, Date Les Structures Les numrations

La variable 'par Rfrence': Elle ne contient pas la valeur de l'objet mais son adresse en mmoire, sa rfrence. Dim O As Object O contient l'adresse de l'objet code sur 4 octets. Sont des variables par rfrence: Les Objets Les Strings Les tableaux Les Classes

Influence sur l''Affectation': Posons le problme: Travaillons sur A et B, 2 variables ayant la mme 'nature'. A existant dj, faisons: Dim B=A Puis modifions la valeur de A, cela modifie t-il B? Les variables par Valeur ou par Rfrence ne ragissent pas de la mme manire: Si le type de variable est par valeur (valable pour les entiers, les Long.. les structures..), chaque variable ayant sa valeur, B n'est pas modifi. Si le type de variable est par rfrence
http://plasserre.developpez.com/v1-6val.htm (2 sur 6) [01/03/2005 14:47:03]

(valable pour les

Site

tableaux, les objets, les string..), chaque variable est dfinie par sa rfrence (son lieu physique); faire A=B entrane que A et B ont mme rfrence. Si on modifie A, B est modifi car il pointe au mme endroit. Voyons des exemples: Mme si on affecte une variable par valeur une autre, les deux variables restent diffrentes: elles conservent leur propre espace de stockage: Dim L As Long Dim P As Long L=0 L=P P=4 'on affecte P L 'on modifie P Modifier P n'a pas modifi L

=> L=0 P=4

Par contre si on affecte une variable par rfrence une autre, elle pointe toutes les 2 sur le mme endroit mmoire: si j'en modifie une, cela modifie l'autre. 'Crons une Classe contenant un entier (Exemple relire quand vous aurez tudi les Classes)

Class Class1 Public Value As Integer = 0 End Class Dim C1 As New Class1() Dim C2 As Class1 =C1 C2 C2.Value = 123

'on cre C2, on affecte C1 'on modifie C2

=> C1.Value=123 C2.Value=123 Modifier C2 a modifi C1 car elles pointent sur le mme endroit mmoire.

On se mfiera donc du type 'rfrence ' ou 'Valeur' des


http://plasserre.developpez.com/v1-6val.htm (3 sur 6) [01/03/2005 14:47:03]

Site

donnes que l'on utilise: exemple des Tableaux Exemple sur les tableaux qui sont 'Par rfrence':

Dim A(3) As String A(1) = "a" Dim B(3) As String B(1) = "b" B = A A(1) = "c" Label1.Text() = B(1)

'Affiche 'c'

En effet un tableau est 'par rfrence' et le fait de faire A=B donne la mme adresse mmoire aux 2 tableaux, aussi , modifier l'un modifie l'autre. B= A.Clone aurait copi le tableau A dans B en conservant 2 tableaux distinct et la dernire instruction aurait affich 'a'. Remarque: A(2)=B(2) affecte un lment d'un tableau un lment d'un autre tableau, cela ne modifie que la valeur d'un lment et n'affecte pas le tableau.

Le cas particulier des 'String' qui sont 'Par rfrence': Attention: par contre : Dim A As String A = "a" Dim B As String B = "b" B = A A = "c" Label1.Text() = B

'Affiche 'a'

Bien que cela soit par rfrence, B=A affecte simplement la valeur de A B, si on modifie ultrieurement A, B n'est pas modifi. (idem pour clone et copy!!) Pour une string il parait donc impossible de la dupliquer, elle se comporte comme une variable par valeur!! Avez -vous des ides pour expliquer cela?

Valeur aprs dclaration:

http://plasserre.developpez.com/v1-6val.htm (4 sur 6) [01/03/2005 14:47:03]

Site

Apres cration (avant initialisation) une variable par Valeur contient 0, Dim L As Long 'L contient 0

Par contre une String (par rfrence) qui a t cre par Dim et non initialise contient Nothing. Dim O As Object aucun objet. 'O contient Nothing: il ne pointe sur

On peut le tester par Nothing..

If IsNothing( O ) then.. ou If O Is

Pour les tableaux, bien que le tableau soit 'par Rfrence', c'est le type de variable utilis dans le tableau qui dcide de la valeur des lments aprs dclaration. Dim T(3) As Long '=>T(0)=0

Comparaison: Une variable par Valeur peut tre compare une autre par "=", Dim L As Long=12 Dim P As Long=24 If L=P Then.. Par contre une variable par rfrence peut tre compare une autre par "Is". Dim O As Object Dim Q As Object If O Is Q then.. NB: pour les String '=' et 'Is' peuvent tre utiliss.

Il existe une instruction permettant de voir si une variable est de type 'Par rfrence'

http://plasserre.developpez.com/v1-6val.htm (5 sur 6) [01/03/2005 14:47:03]

Site

Cet exemple utilise la fonction IsReference pour vrifier si plusieurs variables font rfrence des types rfrence. Dim R as Boolean Dim Dim Dim Dim R = R = R = R = MyArray(3) As Boolean MyString As String MyObject As Object MyNumber As Integer IsReference(MyArray) ' IsReference(MyString) ' IsReference(MyObject) ' IsReference(MyNumber) '

R= R= R= R=

True. Tableau True. String True. Objet False. Entier

http://plasserre.developpez.com/v1-6val.htm (6 sur 6) [01/03/2005 14:47:03]

Site

Site

Cours : VB.net
Les variables 'Objet'et les autres.

1.6.8

Il existe un autre type de variable: le type 'Object'.

La variable 'Objet': Parfois on ne sait pas ce que va contenir une variable: un Integer? une String? un Single? Pour rsoudre ce problme on utilise une variable de type 'Object' Dim V As Object Ensuite: V=12 est accept, et V sera considr comme un type Integer V=12.6 est accept, et V sera considr comme un type Single V="Visual Basic" est accept aussi, et V sera considr comme un type String Les 3 affectations V= peuvent se suivre sans planter, l'objet contenant successivement un type Integer, Single et String. On rappelle qu'une variable objet est une variable 'Par rfrence'.

Comment savoir quel type de variable contient la variable 'Objet'? Si on fait V.GetType.ToString cela retourne 'System.string' indiquant que V contient bien une String. V.GetType.Name retourne 'String'
http://plasserre.developpez.com/v1-6objet.htm (1 sur 3) [01/03/2005 14:47:05]

Site

Pour tester si V est une String, il y a une autre manire: If TypeOf V Is String Then End if

Comment utiliser les membres du type d'une variable objet? Exemple: mettre une string dans une variable Objet, connatre la longueur de la String.
q

Si Option strict=Off (On force VB ne pas tre trop Strict!!! On verra cela plus loin) Dim V As Object V="VB" MessageBox.Show(V.length) affiche 2

Si Option strict=On (On force VB ne rien tolrer) MessageBox.Show(V.length) dclenche une erreur: les liaisons tardives ne sont pas acceptes. MessageBox.Show(V.GetType().GetField(n).GetValue(V).ToString) dclenche une exception. Il faut crire simplement:(Merci le forum de developpez.com) Dim V As Object V="VB" MessageBox.Show(DirectCast(V, String).Length.ToString) ou MessageBox.Show(CType(V, String).Length.ToString) DirectCase et CType transforme un type de variable en un autre, DirectCase est moins 'tolrant' car la variable qui reoit doit tre du bon type. Une autre mthode consiste transformer par Ctype le contenu de l'objet vers une variable String, puis afficher la longueur de cette variable String. Dim V As Object V="VB"

http://plasserre.developpez.com/v1-6objet.htm (2 sur 3) [01/03/2005 14:47:05]

Site

Dim

As String

S = CType(V, String) MessageBox.Show(S.Length.ToString)

Du fait que les membres utiliss avec une variable Objet ne sont pas dfinis l'criture du programme (on ne sait mme pas quel type de variable sera dans l'objet, on n'en connat donc pas les membres), la recherche du membre se fait l'excution, c'est plus long, de plus les contrles et vrifications se font l'excution. Cela se nomme une liaison tardive, viter donc. On vitera donc d'utiliser si possible des variables 'Objet'. Utilisez plutt des variables types (des variables String , Integer..) au dpart, quand on les utilise, les contrles et appels sont vrifis ds le dpart, on appelle cela une liaison anticipe ou prcoce.

Les variables d'autres types: On verra que l'interface utilisateur est compose de contrles, ces contrles tant des objets, et bien, on peut dclarer une variable de type 'contrles': bouton, ou textbox ou formulaire. Dim B As Button 'cre une variable B de type Button

Ensuite on peut utiliser les membres de la classe Button B.BackColor Dim T As TextBox 'cre une variable T de type TextBox

http://plasserre.developpez.com/v1-6objet.htm (3 sur 3) [01/03/2005 14:47:05]

vbintro

Site

Cours : VB.net

Soyons 1.7 Strict et Explicite.


Option Strict
VB est naturellement trs arrangeant (trop sympa !!) car il est configur avec Option Strict On : Par dfaut il transforme, quand cest possible, et si ncessaire un type de variable en un autre type. Si je passe un nombre qui est en double prcision (Double) dans une variable en simple prcision (Single), VB accepte, au risque de perdre de la prcision (sil y a un trs grand nombre de chiffre significatif). Ainsi : Dim D As Double Dim S As Single D=0.123456789

http://plasserre.developpez.com/v1-7.htm (1 sur 6) [01/03/2005 14:47:07]

vbintro

S=D MessageBox.Show(s) ' affiche 0,1234568 est perdu car un single 7 chiffres significatifs. le 9

Cela peut tre ennuyeux si cest des calculs dastronomie !! et le programmeur ne sen rend pas forcment compte !!

Pour viter cela il faut activer lOPTION STRICT ON Menu Projet > Proprits de Nom de projet. Page de proprits de Langage VB. Proprits communes, gnration. En face de Option Strict, mettre On

Maintenant seules les conversions effectues explicitement seront autorises.


S=D est soulign dans le code pour signaler une conversion interdite. (Par contre D=S est accept car on passe d'une variable une variable plus prcise)

Il faudra maintenant, pour notre exemple, crire : S= CType(D,Single) Cela entrane une conversion de la valeur Double en Single ; sil y a perte de

http://plasserre.developpez.com/v1-7.htm (2 sur 6) [01/03/2005 14:47:07]

vbintro

prcision, elle se produit quand mme, MAIS le programmeur SAIT quil y a conversion, il prendra ou pas EN CONNAISSANCE DE CAUSE le risque.

Avec Option Strict le langage VB.Net devient bien moins tolrant: Ecrire un programme avec Option Strict Off, a passe; mettre Option Strict On un tas d'instruction coince!! mme certains exemples Microsoft!! Car sans s'en rendre compte on passe d'un type de variable l'autre sans arrt!!

Autre exemple sur les conversions implicites: Avec Option Strict=Off Dim n As Integer=12 MessageBox(n) Affiche 12 : le contenu de l'entier n a t transform automatiquement en String pour tre affich.

Avec Option Strict=On Dim n As Integer=12 MessageBox(n) Plante Il faut transformer explicitement MessageBox(n.ToString) n en String et crire:

Liaisons tardives:

http://plasserre.developpez.com/v1-7.htm (3 sur 6) [01/03/2005 14:47:07]

vbintro

Avec Option Strict=On Dim V As Object V="VB"

VB refuse les liaisons tardives:

MessageBox.Show(V.Length) est refus Il faut crire MessageBox.Show(CType(V, String).Length.ToString)

'Option Strict Off' permet n'importe quoi. C'est du Basic au mauvais sens du terme. 'Option Strict On' oblige une grande rigueur. C'est du VB.Net

Option explicit
Pour la dclaration des variables nous avions dit que toute variable utilise devait tre dclare. Par dfaut cest vrai.

Ouvrir Menu Projet > Proprits de Nom de projet. Page de proprits de Langage VB. Proprits communes, gnration. En face de Option Explicit, il y a On

On pourrait (cest fortement dconseill) mettre cette option Off. Cela ne rend plus obligatoire la dclaration des variables.

http://plasserre.developpez.com/v1-7.htm (4 sur 6) [01/03/2005 14:47:07]

vbintro

MaVariable=10

sans dclaration pralable est accepte.

Cela prsente certains inconvnients : Si on fait une faute de frappe en tapant le nom dune variable, VB accepte le nouveau nom et cre une nouvelle variable objet distinct. Dim MaVariable MaVariable avec un b

MaVariabble=10 Faute de frappe(bb)Je crois avoir mis 10 dans Mavariable En fait jai mis 10 dans une nouvelle variable nomme MaVariabble Mavariable toujours une valeur=0

Donc, cest clair et sans appel : Laisser Option Explicit On, ce qui oblige dclarer toutes les variables avant de les utiliser Dans ce cas si vous tapez le nom d'une variable non dclare, elles est souligne en bleue.

Option strict et Explicit dans un module:


On peut aussi indiquer dans un module les options; ces instructions doivent tre tapes avant toutes les autres.

http://plasserre.developpez.com/v1-7.htm (5 sur 6) [01/03/2005 14:47:07]

vbintro

http://plasserre.developpez.com/v1-7.htm (6 sur 6) [01/03/2005 14:47:07]

vbintro

Site

Cours : VB.net

Les 1.8 constantes.


Comme les variables, elles ont un nom et un type, mais leurs valeurs sont 'constantes'. On les dclare par le mot Const, on peut les initialiser en mme temps avec =

Exemple : Const NomFichier= "medical.dic" chane de caractres. Const i As Integer =1 Integer constante

constante

Intrt des constantes ? Amliore la lisibilit. Si une constante doit tre modifie ultrieurement, il suffit en mode conception, de modifier sa valeur ce qui modifie sa valeur dans lensemble du code de lapplication.
http://plasserre.developpez.com/v1-8.htm (1 sur 6) [01/03/2005 14:47:09]

vbintro

Amliore la vitesse.

On rappelle que seuls les types primitifs peuvent avoir des constantes ( Byte, Boolean,
Integer, Long, Single, Double, Decimal, Date, Char, String) Constantes prdfinies:

Shot,

Il existe une liste de constantes prdfinies dans diffrentes Classes : ControlChars.CrLf Chr$(13)+Chr$(10) qui sert sauter la ligne dans une chane de caractres : Si on affiche "VISUAL" & ControlChars.CrLf & "BASIC" On obtient lcran : VISUAL BASIC

ControlChars.Tab tabulation ControlChars.NullChar ControlChars.Nothing


ControlChars.Back

Chr$(9) = caractre de

Aucun caractre Chane vide

Taper ControlChars. Et comme dhabitude vous obtiendrez la liste des constantes.

Couleurs:

http://plasserre.developpez.com/v1-8.htm (2 sur 6) [01/03/2005 14:47:09]

vbintro

On peut aussi utiliser les couleurs dfinies par VB System.Drawing.Color.Blue Pour le bleu

Math:

Si Import System.Math a t tap, PI E contient 3,14 contient la base log naturel

Touche du clavier: Il est parfois ncessaire de savoir si une touche prcise t tape par l'utilisateur au clavier, pour cela il faut connatre les touches, mais pas besoin de se souvenir du codes des touches, il suffit de taper Keys. et la liste des touches s'affiche. Cliquer sur le nom de la touche recherche et vous obtenez la constante correspondant la touche: Keys.Right 'Dsigne le code de la touche '->'

True False: On rappelle que True et False sont des valeurs Boolens faisant partie intgrante de VB. Pour les anciens de VB6 ne plus utiliser -1 et 0 (D'ailleurs c'est maintenant 1 et 0).

Utiliser largement ces constantes fournies par VB, cela amliore la lisibilit et la maintenance.

Enum

http://plasserre.developpez.com/v1-8.htm (3 sur 6) [01/03/2005 14:47:09]

vbintro

Le bloc Enum permet de crer une liste (une numration) de constantes cres par le programmeur: Enum TypeFichier DOC RTF TEXTE End Enum Les constantes ainsi cres sont TypeFichier.DOC , TypeFichier.RTF, TypeFichier.TEXTE Le bloc Enum doit tre dans l'en-tte du module. C'est bien pratique car en crivant le code, ds que je tape TypeFichier. la liste (DOC RTF TEXTE) apparat. Ensuite, on peut utiliser dans le programme les constantes cres. TypeFichier.DOC par exemple.

Chaque constante de l'numration a une valeur par dfaut. Par dfaut TypeFichier.Doc =0 TypeFichier.RTF =1 TypeFichier.TEXTE=2 .. Parfois le nom utilis dans l'numration est suffisant en soi et on n'utilise pas de valeur : Dans un programme grant des fichiers, un flag prendra la valeur TypeFichier.DOC pour indiquer qu'on travaille sur les fichiers .DOC. Peu importe la valeur de la constante, mais d'autres fois il faut que chaque constante de l'numration possde une valeur particulire. Je peux imposer une valeur chaque constante de l'numration : Enum TypeFichier DOC=15

http://plasserre.developpez.com/v1-8.htm (4 sur 6) [01/03/2005 14:47:09]

vbintro

RTF=30 TEXTE=40 End Enum Je peux mme donner plusieurs valeurs avec And et Or condition d'utiliser l'attribut Flags. <Flags()> Enum TypeFichier DOC=15 RTF=30 TEXTE=40 TOUS= DOC AND RTF AND TEXTE End Enum Les numrations sont des types qui hritent de System.Enum et qui reprsentent symboliquement un ensemble de valeurs. Par dfaut ses valeurs sont des 'Integer' mais on peut spcifier d'autres types: Byte, Short, Integer ou Long. L'exemple suivant dclare une numration dont le type sous-jacent est Long :

Enum Color As Long Red Green Blue End Enum

Noter que Vb contient un tas de constantes classes avec la manire Enum. Exemple: Quand on ferme une MessageBox. (une fentre qui affiche un message), cela retourne une valeur qui contient: 'MsgBoxResult.Yes', 'MsgBoxResult.No'

http://plasserre.developpez.com/v1-8.htm (5 sur 6) [01/03/2005 14:47:09]

vbintro

'MsgBoxResult.Cancel' en fonction du bouton qu'a utilis l'utilisateur pour sortir de la fentre MessageBox (appuie sur les boutons Oui, Non Cancel) .

http://plasserre.developpez.com/v1-8.htm (6 sur 6) [01/03/2005 14:47:09]

vbintro

Site

Cours : VB.net
La surcharge.

1.9

Surcharge
Quand on utilise une mthode avec des paramtres, il y a parfois possibilit d'utiliser, avec la mme mthode, un nombre diffrent de paramtres ou des paramtres de nature diffrentes: on appelle cela surcharger la mthode. Chaque manire d'crire les paramtres s'appelle une signature. Exemple:

Voici une fentre MessageBox: pour ouvrir une fentre MessageBox il y a 12 signatures, en voici 2:

Reponse= MessageBox.show(TexteAAfficher,Titre, TypeBouton etIcone, BoutonParDfaut) Ici on donne 4 paramtres.


Reponse= MessageBox.show(TexteAAfficher) Ici 1 seul paramtre. On voit qu'on peut appeler la mthode MessageBox.Show avec un nombre diffrent de paramtres. Comme on ne peut pas connatre toutes les signatures, VB nous aide: Si on tape R= MessageBox.show( VB affiche dans un cadre une signature, de petites flches permettent de faire dfiler tous les autres signatures:

http://plasserre.developpez.com/v1-9.htm (1 sur 2) [01/03/2005 14:47:11]

vbintro

http://plasserre.developpez.com/v1-9.htm (2 sur 2) [01/03/2005 14:47:11]

Site

Site

Cours : VB.net

Les 1.10 Oprateurs


Pour travailler sur les variables on utilise des oprateurs (addition, soustraction...).

Addition :+
Dans le cas de variables numriques.

A=B+C si B=2 et C=3


On peut crire:

=> A=5

A=A+1 Dans ce cas, on affecte la variable A son ancienne valeur +1, si A=2 au dpart il aura ensuite pour valeur 3.

A+=1 est quivalent A=A+1


Cela incrmente la variable A.

http://plasserre.developpez.com/v1-10.htm (1 sur 9) [01/03/2005 14:47:13]

Site

Soustraction : -

B=C-D

A-=1 est quivalent A=A-1

Multiplication :*

B= C*D

Division : /
On remarque que ce nest pas : qui est l'oprateur de division.(Ce signe sert de sparateur quand plusieurs instruction sont sur la mme ligne.)

B=C/D

Division entire:\

Si A=10\3

=> A=3

http://plasserre.developpez.com/v1-10.htm (2 sur 9) [01/03/2005 14:47:13]

Site

Puissance : ^

A=B^3

'A=B*B*B

Modulo :

Cest le reste de la division par un nombre : 10 Mod 3 donne 1

Exemple

A est-il multiple de 3 ?

Si A Mod 3 =0 , A est un multiple de 3

If A Mod 3 = 0 then

Concatnation : &
Cest une mise bout bout des chanes de caractres. Si A= "VISUAL" B= " "

http://plasserre.developpez.com/v1-10.htm (3 sur 9) [01/03/2005 14:47:13]

Site

C= "BASIC"

D=A & B & C

donne D="VISUAL BASIC"

Le signe + peut aussi tre utilis mais il est plutt rserv aux additions de variables numriques.

&= permet aussi la concatnation quivalent A= A&B

A&=B

est

Priorits :

L'ordre des calculs se fait en fonction de la priorit des oprateurs.

Sil y a plusieurs oprateurs ^ a la priorit la plus forte puis * et / puis + et


Pour tre complet, voyons les priorits par ordre dcroissant: ^ lvation la puissance - ngation unaire / et * multiplier et diviser \ division entire mod + etmodulo addition et soustraction.

Exemple

2+3^3 donne 29 car VB effectue

http://plasserre.developpez.com/v1-10.htm (4 sur 9) [01/03/2005 14:47:13]

Site

(3^3)+2 et non pas 125 (2+3)^3 S'il y a plusieurs oprateurs de mme priorit, l'ordre des calculs se fait de gauche droite.

Pour viter toute faute dinterprtation utiliser des parenthses : 2+(3^3) lve toute ambigut.

Comparaison :
= gal > suprieur < infrieur >= suprieur ou gal <= infrieur ou gal <> Diffrent de

Le rsultat dune comparaison est True (Vrai) ou False (Faux) Exemple :


Dim A As Integer=2 Dim B As Integer=3

http://plasserre.developpez.com/v1-10.htm (5 sur 9) [01/03/2005 14:47:13]

Site

If A=B then..
A tant diffrent de B, A=B prend la valeur False et le programme passe la ligne en dessous (pas aprs then).

Ici le signe = nindique pas une affectation mais une expression valuer.
Ici aussi on peut combiner les oprateurs et mettre des parenthses: R= (C<>D)AND (D=2)

Comparaison de chane de caractres:

Les chanes de caractres sont compares en fonction du tri alphabtique. A<B<C<Y<Z<a<b<cy<z<<..


Dim A As String="A" Dim B As String="Z"

If A<B then..
A est bien infrieur B, donc A<B prend la valeur True et le programme saute aprs Then.

La casse (majuscules ou minuscule) est diffrencie. Si on veut comparer sans tenir compte du fait que cest en majuscule ou minuscule, il faut dabord transformer les 2 chanes en minuscule par exemple. On veut comparer A= "aaa" et B= "AAA" Normalement A est diffrent de B : A=B retourne False
http://plasserre.developpez.com/v1-10.htm (6 sur 9) [01/03/2005 14:47:13]

Site

Par contre A.ToLower=B.ToLower retourne True (Vraie)

En utilisant Option Compare Text en dbut de module, on ne diffrencie plus la casse: "A" devient gal "a".

Logique : Not And Or ElseOr Xor


SI A et B sont des expressions Boolens:

A And B A Or B vrai A Xor B est vrai Not A vice versa

retourne True si A et B sont vrais retourne True si une des 2 est

retourne True si une et une seule

retourne True si A tait faux et

On entend par expression Boolen le rsultat de l'valuation d'une condition: A=B retourne True si A=B et False si A diffrent de B.

Exemple Si A diffrent de B.. peut scrire IF Not(A=B).. Si A compris entre 2 et 5 peut scrire IF A>=2 And A<=5..
Rentrons dans le dtails: Les oprateurs And, Or et Xor sont valus comme suit en fonction du type d'oprandes :

http://plasserre.developpez.com/v1-10.htm (7 sur 9) [01/03/2005 14:47:13]

Site

Pour le type Boolean : q Une opration And logique est effectue sur les deux oprandes. q Une opration Or logique est effectue sur les deux oprandes. q Une opration Or exclusif logique est effectue sur les deux oprandes. Pour les types Byte, Short, Integer, Long et tous les types numrs, l'opration spcifie est ralise sur chaque bit de la reprsentation binaire des deux oprandes : q And : Le bit de rsultat est 1 si les deux bits sont 1. Sinon, le rsultat est 0. q Or : Le bit de rsultat est 1 si l'un des deux bits est 1. Sinon, le rsultat est 0. q Xor : Le bit de rsultat est 1 si l'un des deux bits est 1 mais pas les deux. Sinon, le bit de rsultat est 0 (c'est--dire 1 Xor 0 = 1, 1 Xor 1 = 0). Les oprateurs AndAlso et OrElse sont uniquement dfinis sur le type Boolen, ils sont plus rapide car ils n'valuent pas la seconde expression si ce n'est pas ncssaire.

Dplacement de bits: << et >>


Les oprateurs binaires << et >> effectuent des oprations de dplacement de bits. Ces oprateurs sont dfinis pour les types Byte, Short, Integer et Long. L'oprateur << dcale gauche les bits du premier oprande du nombre de positions spcifi. Les bits de poids fort situs en dehors de la plage du type de rsultat sont limins, et les positions libres par les bits de poids faible sont remplies par des zros. L'oprateur >> dcale droite les bits du premier oprande du nombre de positions spcifi. Les bits de poids faible sont limins et, si l'oprande de gauche est positif, les positions libres par les bits de poids fort sont mises zro ; s'il est ngatif, elles sont mises un. Si l'oprande de gauche est de type Byte, les bits de poids fort disponibles sont remplis par des zros.

http://plasserre.developpez.com/v1-10.htm (8 sur 9) [01/03/2005 14:47:13]

Site

http://plasserre.developpez.com/v1-10.htm (9 sur 9) [01/03/2005 14:47:13]

vbintro

Site

Cours : VB.net

Les Structures 1.11 de contrle


Elles permettent de grer le droulement du code.
On tudiera: If Then Select Case For Next Do Loop While End While For Each

Switch
IIF

If then

http://plasserre.developpez.com/v1-11.htm (1 sur 15) [01/03/2005 14:47:16]

vbintro

Permet de crer une structure dcisionnelle : If Condition Then


End if

Si Condition vraie alors Une instruction ou un bloc dinstructions peut tre excut si une condition est vraie. Exemple: If A=B Then MsgBox("A=B") Si A = B alors on affiche dans une fentre MessageBox A=B 'Noter que tout est sur une seule ligne (Pas besoin de End If), on aurait pu crire: If A=B then MsgBox("A=B")
End If

On peut tester une condition fausse et dans ce cas utiliser Not. If Not A=B Then MsgBox("A diffrent de B") Si A et B sont diffrent (Not A=B signifie NON gaux) afficher "A diffrent de B".

Il peut y avoir des oprateurs logiques dans la condition:


If A=B And C=D then..

http://plasserre.developpez.com/v1-11.htm (2 sur 15) [01/03/2005 14:47:16]

vbintro

Autre exemple : If Not IsNumeric(N) then MsgBox ("R nest pas un nombre") Exit Sub End if

Si N nest pas numrique alors afficher dans une boite de dialogue: R nest pas un nombre puis quitter la procdure (Exit Sub) Noter bien que comme il y a plusieurs instructions aprs Then on cre un bloc dinstruction de plusieurs lignes entre Then et End If.

Au lieu de
If

Condition=True Then

End if On peut crire: If Condition Then End if Condition tant de toute manire value pour voir si elle est vraie.

On peut aussi utiliser la structure : Si..Alors..Sinon


http://plasserre.developpez.com/v1-11.htm (3 sur 15) [01/03/2005 14:47:16]

vbintro

If condition then .. effectu si condition vraie .. Else ..effectu si condition fausse .. End if

Des structures If Then peuvent tre imbriques :

If.. If.. .. Else If.. .. End if End if End If

Pour bien reprer les diffrents niveaux, utiliser les tabulations et dcaler le If then et son code au mme niveau.

Pour vrifier sil ny a pas derreur, compter les if, il doit y en avoir autant que des end If. VB souligne le if si il ny a pas de end if. Dernire syntaxe:

http://plasserre.developpez.com/v1-11.htm (4 sur 15) [01/03/2005 14:47:16]

vbintro

If Condition1 Then .. ElseIf condition2 Then .. ElseIf condition3 Then

..
end if

Si condition1... Sinon si condition2 Sinon si condition3 Fin Si

Select Case
Crer

une structure dcisionnelle permettant dexcuter un grand nombre de blocs de code diffrents en fonction de la valeur dune expression :

Select Case expression Case valeur1 code effectu si expression=valeur1 Case valeur2 code effectu si expression=valeur2 Case valeur3

http://plasserre.developpez.com/v1-11.htm (5 sur 15) [01/03/2005 14:47:16]

vbintro

code effectu si expression=valeur3 .. Case Else code effectu dans tous les autres cas

End Select

Attention si expression=valeur1 le code entre Case Valeur1 et Case valeur2 (et uniquement celui l) est effectu, puis lexcution saute aprs End Select.

Exemple dun code affichant le jour de la semaine :

N est un entier contenant le numro dordre du jour (entre 1 et 7)

Select Case N Case 1 MsgBox "Lundi" Case 2 MsgBox "Mardi" Case 3 MsgBox "Mercredi"

http://plasserre.developpez.com/v1-11.htm (6 sur 15) [01/03/2005 14:47:16]

vbintro

.. .. Case Else MsgBox "Nombre pas entre 1 et 7" End select

Nous venons dutiliser une expression simple aprs chaque Case mais on peut utiliser des expressions plus complexes :

Plusieurs clauses d'expression peuvent tre spares par des virgules. Select Case N Case 8,9,10 Effectuer le code N=10 si N=8 ou N=9 ou

Le mot cl To permet de dfinir les limites d'une plage de valeurs correspondantes pour N. Select Case N Case 8 To 20 Effectuer le code plage 8 20 si N est dans la

Le mot cl Is associ un oprateur de comparaison (=, <>, <, <=, > ou >=) permet de spcifier une restriction sur les valeurs
http://plasserre.developpez.com/v1-11.htm (7 sur 15) [01/03/2005 14:47:16]

vbintro

correspondantes de lexpression. Si le mot cl Is n'est pas indiqu, il est automatiquement insr. Select Case N Case Is >= 5 Effectuer le code gal 5. si N suprieur ou

Vous pouvez utiliser plusieurs expressions ou plages dans chaque clause Case (spares par des virgules). Par exemple, la ligne suivante est valide : Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

Vous pouvez aussi indiquer des plages et des expressions multiples pour des chanes de caractres. Dans l'exemple suivant, Case correspond aux chanes qui sont absolument identiques aaa , aux chanes comprises entre ccc et ddd dans l'ordre alphabtique, ainsi qu' la valeur de Var : Case "aaa", "ccc" To "ddd", Var

For Next
Permet

de faire des boucles.

Les boucles sont trs utilises pour parcourir une plage de valeur qui permet par exemple de

http://plasserre.developpez.com/v1-11.htm (8 sur 15) [01/03/2005 14:47:16]

vbintro

parcourir tous les lments dun tableau ou pour effectuer de manire itrative un calcul.

Le nombre de boucle va tre dtermin par une variable qui sert de compteur.

Le nombre dexcution est dtermin au dpart de la boucle car le compteur a une valeur de dpart, une valeur darrt.
Pour variable allant de 'dbut' 'fin' Boucler donne en VB For variable=dbut To fin .. Next variable

Dim i as integer For i=1 to 10 MsgBox i.toString Next i

En langage courant : Pour i allant de 1 10, afficher la valeur de i dans une MessageBox.

La variable compteur va prendre successivement les valeurs 1 puis 2 puis 3 jusqu' 10 et effectuer chaque fois le code qui est entre For et Next.
http://plasserre.developpez.com/v1-11.htm (9 sur 15) [01/03/2005 14:47:16]

vbintro

Si on dcompose : i=1 Affiche 1 , arriv Next, remonte For, i =2 , affiche 2 i=10 , affiche 10 poursuit aprs Next.

Il peut y avoir un pas (Step), le compteur s'incrmente de la valeur du pas chaque boucle. Dim i as integer For i=1 to 10 Step 2 MsgBox i.toString Next i Affiche 1 puis 3 puis 5 puis 7 puis 9 Attention si la valeur de sortie de boucle est infrieure celle dentre il faut indiquer un pas ngatif Dim i as integer For i=10 to 1 Step -2 MsgBox i.toString Next i Affiche 10 puis 8 puis 6 puis 4 puis 2

Bien sur on peut utiliser des expressions calcules :

http://plasserre.developpez.com/v1-11.htm (10 sur 15) [01/03/2005 14:47:16]

vbintro

For i=A to B*10 Step X-2 MsgBox i.toString Next i

La variable boucle peut tre dclare aprs For, dans ce cas cette variable n'existe que dans la boucle:
For K As Integer = 1 To 10 ... Next K

Do Loop
Permet

aussi de faire des boucles mais sans que le nombre de boucle (ditration) soit dtermin au dpart. Cest la condition darrt qui dtermine la sortie de la boucle : Aprs Do on doit mettre Until (Jusqu ce que) ou While (Tant que)

Do Until condition Code Loop 'Boucler jusqu' ce que : condition est une condition de sortie. Si condition est fausse, effectuer le code, boucler et recommencer le code jusqu ce que
http://plasserre.developpez.com/v1-11.htm (11 sur 15) [01/03/2005 14:47:16]

vbintro

condition soit vraie. A chaque boucle la condition est value. Exemple pour chercher un mot dans une liste : Lire Premier Mot Do Until MotCherch=MotPoint Pointer Mot suivant Loop

On peut aussi utiliser While (Tant que) Lire Premier mot Do While MotCherch<>MotPoint Pointer Mot suivant Loop

Tant que le mot cherch est diffrent du mot point continuez boucler.

La condition peut tre mise en fin de boucle, cela permet deffectuer au moins une fois le code. Cela vite aussi davoir dmarrer le processus avant la boucle : dans notre exemple cela permet dviter de lire le premier mot :
Les mots sont dans un tableau Mot(); premier lment Mot(0)

IndexMot=-1 Do IndexMot=IndexMot+1 Loop While MotCherch<>Mot(IndexMot)

http://plasserre.developpez.com/v1-11.htm (12 sur 15) [01/03/2005 14:47:16]

vbintro

Il faudrait en plus boucler jusqu' la fin du tableau et pas plus.

Exemple complet : Imposer la saisie dun nombre ngatif lutilisateur : On utilise InPutBox qui ouvre une fentre et attend une rponse. Dim Reponse as Single Do Reponse=InPutBox( Entrer un nombre ngatif. ) Loop While Reponse>=0

Si le nombre n'est pas ngatif, la boucle fonctionne et la boite InPutBox souvre de nouveau.

While, End While


Permet une boucle qui tourne tant qu'une condition est vraie. While Condition ... End While Exemple: on incrmente un compteur , on sort quand il est gal 20.

Dim Counter As Integer = 0 While Counter < 20 ' Test la valeur du compteur. Counter += 1 ' Incrmente le compteur. End While

http://plasserre.developpez.com/v1-11.htm (13 sur 15) [01/03/2005 14:47:16]

vbintro

For Each
Cest une variante de la boucle For mais elle permet de parcourir les objets dune collection. Prenons un contrle ListBox il a une collection Items qui contient tous les lments de la ListBox ListBox.item(0) contient la premire ligne ListBox.item(1) contient la seconde ligne

ListBox.item(2)contient la troisime. Parcourir tous les lments de la ListBox et les mettre dans une variable V scrirait : Dim V as string Dim item as objet For Each item in ListBox.items V=V+item Next
La variable de boucle peut tre dclare aprs For.

Switch.
Switch est utilis avec des couples d'arguments, si le premier est vrai, le second est retourn. Rponse=Switch( Expression1, Reponse1, Expression2, Reponse2) Si Expression2 est vrai Reponse2 est retourn. Monnaie= Microsoft.VisualBasic.Switch(Pays = "USA", "Dollar", _ Pays = "FRANCE", "Euro", Pays = "Angleterre", "Live")

http://plasserre.developpez.com/v1-11.htm (14 sur 15) [01/03/2005 14:47:16]

vbintro

Si Pays="FRANCE", cette expression est vrai, le second objet du couple est retourn. Retourne Euro

IIf IIf est utilis avec 3 arguments. Si le premier argument est vrai , le second est retourn. Si le premier argument est faux c'est le troisime qui est retourn. Reponse = IIf( Nombre > 0, "Positif", "Ngatif ou 0")

Comme dans Switch on peut utiliser des procdures comme argument.

http://plasserre.developpez.com/v1-11.htm (15 sur 15) [01/03/2005 14:47:16]

Site

Site

Cours : VB.net

Procdures 1.12 et paramtres


Revenons sur les procdures et leurs paramtres.

Quand on appelle une procdure (un sousprogramme, une routine), le logiciel saute au sous-programme, il effectue celui-ci puis revient effectuer ce qui est sous lappel. En VB les procdures sont des Sub ou des Function. On peut fournir aux procdures des paramtres qui sont envoys la fonction.
Exemple: Function Carr ( V as Single) as Single Return V*V End Function Cela cre une fonction qui se nomme 'Carr' , on peut lui envoyer un paramtre (elle accepte un Single) Cette fonction retourne le carr du paramtre fourni. Pour l'utiliser : Dim resultat as Single
http://plasserre.developpez.com/v1-12.htm (1 sur 5) [01/03/2005 14:47:18]

Site

resultat= carr(2)

'resultat est alors gal 4

On appelle la fonction carr avec le paramtre 2, elle retourne 4. Les paramtres peuvent tre des variables: Dim resultat as Single Dim valeur as Single=3 resultat= carr(valeur)

Les parenthses.
Rappel, mme s'il n'y a pas de paramtre, mettre des () lors de l'appel de procdure. MaRoutine()

Par Valeur, Par Rfrence.


Il y a 2 manires denvoyer des paramtres : Par valeur : (By Val)cest la valeur (le contenu de la variable) qui est envoye. Par rfrence :(By Ref) cest ladresse (le lieu physique ou se trouve la variable) qui est envoye. Si la Sub modifie la variable, cette modification sera visible dans la procdure appelante aprs le retour. Exemple de procdures:
Sub MaProcedure (ByRef x as Long, ByVal y As Long) End Sub

http://plasserre.developpez.com/v1-12.htm (2 sur 5) [01/03/2005 14:47:18]

Site

Si j'appelle cette procdure partir dune procdure nomm Main() : Sub Main() MaProcedure (A, B) End sub C'est l'adresse de A qui est envoye et la valeur contenue dans la variable B. Elles se retrouvent dans les variables x et y de la procdure MaProcedure.

.Si dans cette dernire je modifie x , A est modifi dans


la Sub Main (puisque x et A pointe sur le mme endroit). Si dans Maprocedure je modifie y , B nest pas modifi.

ATTENTION: Pas dfaut les paramtres sont transmis PAR VALEUR

Pour la clart du code et pour viter toute ambigut, spcifier ByRef ou ByVal, c'est plus lisible , plus clair.

Taper Sub MaProcedure (ByRef x as Long, ByVal x As Long) Plutt que Sub MaProcedure ( x as Long, x As Long)

Optional
Un paramtre ou argument peut tre Optional, c'est dire facultatif. Indique que cet argument n'est pas requis lorsque la

http://plasserre.developpez.com/v1-12.htm (3 sur 5) [01/03/2005 14:47:18]

Site

procdure est appele. Si ce mot cl est utilis, tous les arguments suivants doivent aussi tre facultatifs et dclars l'aide du mot cl Optional. Chaque dclaration d'argument facultative doit indiquer une valeur par dfaut. Sub MaRoutine (Optional X As Integer=0)

Tableau de paramtres.
Il est possible d'envoyer un tableau comme paramtre. Exemple: Dim Reponses(10) As Integer 'Appel de la Sub Affiche( Reponses()) La Sub Affiche dbute par: Sub Affiche ( R() As Integer ) End Sub

ParamArray
Parfois il faut envoyer des paramtres de mme type mais dont on ne connat pas le nombre, dans ce cas on utilise ParamAray (Liste de paramtres): Function Somme ( ByVal ParamArray Valeurs() as Integer) As Integer Dim i as Integer Dim Total as Integer For i=0 to Valeurs.Length-1 Total += Valeurs(i) Next i Return Total End Sub Pour appeler cette fonction:

http://plasserre.developpez.com/v1-12.htm (4 sur 5) [01/03/2005 14:47:18]

Site

Dim LeTotal As Integer LeTotal= Somme (2, 5, 6, 8 ,5) A noter que le paramtre ParamArray doit tre le dernier des paramtres, c'est obligatoirement un paramtres ByVal et comme on l'a dit, tous les paramtres sont de mme type.

http://plasserre.developpez.com/v1-12.htm (5 sur 5) [01/03/2005 14:47:18]

Site

Site

Cours : VB.net

Porte 1.13 des variables


Quand on dclare une variable, jusqu'ou est-elle visible?

Dans les procdures.


Si on dclare une variable dans une procdure, elle est visible uniquement dans cette procdure, c'est une variable locale: Sub MaProcedure (ByRef X As Integer) Dim Y As Integer ... End sub Y est dclar en dbut de procdure, on pourra travailler avec Y dans la procdure jusqu' End Sub Dans une autre procdure Y ne sera pas visible (l'utilisation de Y dclencherait une erreur.) Aprs End Sub Y n'existe plus, son contenu est perdu. sur la ligne Sub.

Il en est de mme pour X qui est dclar

Une autre procdure pourra dclarer et utiliser une variable Y, mais, mme si elle a le mme nom cela ne sera
http://plasserre.developpez.com/v1-13.htm (1 sur 4) [01/03/2005 14:47:21]

Site

pas la mme: chaque variable Y est uniquement visible dans sa procdure. Variable statique: Si la place de Dim on utilise Static, la variable est dite 'Statique': A la sortie de la procdure, la valeur continue d'exister et garde sa valeur, lors des appels suivants de la procdure, on retrouve la valeur de la variable. Exemple Sub compteur Dim A as integer Static B as integer A +=1 B +=1 End sub A chaque appel de cette procdure A prend la valeur, 0 puis 1 puis disparat. B prend les valeurs 0, puis 1, puis 2... (incrmentation chaque appel)

Dans un bloc d'instruction.


Si vous dclar une variable dans un bloc, elle ne sera visible que dans ce bloc: Do Dim Compteur A integer Compteur +=1 ... Loop La variable Compteur existe uniquement entre Do et Loop

Dans la section dclaration d'un Module.


Dans la section dclaration d'un module, on utilise la place de Dim: Private; dans ce cas la variable est propre au module, elle
http://plasserre.developpez.com/v1-13.htm (2 sur 4) [01/03/2005 14:47:21]

Site

est visible dans toutes les procdures du module, pas dans les autres modules. Public; dans ce cas la variable est accessible dans la totalit du programme. Public A as String A est accessible partout.

Dans la section dclaration d'une fentre, d'un formulaire.


Private; indique dans ce cas que la variable est propre au formulaire , elle est visible dans toutes les procdures du formulaire, pas dans les autres modules ou formulaires. Public; indique de mme une variable UNIQUEMENT visible dans le formulaire. Elle est visible hors du formulaire a condition de la prfixer avec le nom du formulaire.

Exemple:

Dans l'exemple ci dessus: MaVariable est visible dans le formulaire. et hors du formulaire condition d'utiliser NomFormulaire.MaVariable. MaVariable2 est visible dans le formulaire . MaVariable3 n'est visible que dans la procdure Button1_Click.
http://plasserre.developpez.com/v1-13.htm (3 sur 4) [01/03/2005 14:47:21]

Site

En pratique:
Pour se reprer et se souvenir quelle est la porte d'une variable, on utilise une lettre en dbut du nom de la variable: g_MaVariable m_Variable2 sera public (g comme global).

sera accessible au niveau du module.

Dans un module standard, on met toutes les variables Public accessibles par tous. Leurs noms dbute par g. Ce sont les variables (et constantes) gnrales utilises dans la totalit de l'application: tat du programme, utilisateur en cours... Dans chaque formulaire on met dans la section dclarations, les variables du module: tat du formulaire. Variable permettant l'affichage... Dans chaque procdure les variables locales, compteur de boucle... Pour les variables locales on peut donc utiliser un mme nom dans diffrentes procdures, par exemple, on nomme souvent I les variables de boucle dans toutes les procdures, par contre

il faut viter de donner un mme nom des variables dont la porte se recoupe. VB l'accepte et utilise la variable la plus proche, celle du bloc ou du module...mais c'est dangereux et gnrateur de bugs.

http://plasserre.developpez.com/v1-13.htm (4 sur 4) [01/03/2005 14:47:21]

Site

Site

Cours : VB.net

Le Hasard, 1.14 l'alatoire


Comment obtenir un nombre alatoire? Rnd() fournit un nombre alatoire entre 0 et 1 (sans jamais attendre 1):valeur infrieure 1 mais suprieure ou gale zro; ce nombre alatoire est un Single. En fait ,si on fait des Rnd() successifs, le nombre alatoire prcdemment gnr est utilis pour le calcul du nombre alatoire suivant, ce qui fait que la suite de nombre alatoire est toujours la mme. Randomize() initialise le gnrateur de nombres alatoires. Si on ne donne pas d'argument, Randomize utilise la valeur de l'horloge interne pour initialiser; cette valeur est d au hasard, aussi le Rnd qui suit va tre d au hasard. Si on n'utilisait pas Randomize() avant Rnd(), la fonction Rnd() fournirait toujours les mmes nombres alatoire dans le mme ordre. En rsum: En fait Rnd fournit une suite de nombre pseudo alatoire (le suivant tant calcul partir du prcdent), la suite est toujours la mme, seule le premier change et est initialis par Randomize qui est bas soit sur l'horloge systme (et qui priori initialise une valeur toujours diffrente) s'il n'y a pas d'argument soit sur un argument. Pour obtenir plusieurs fois les mmes sries de nombres , utiliser Randomize avec un argument numrique puis appelez Rnd() avec un argument ngatif.

http://plasserre.developpez.com/v1-14.htm (1 sur 2) [01/03/2005 14:47:22]

Site

Simuler un jeu de lanc de d.


Comment obtenir un nombre entier entre un et six au hasard? Dim MyValue As Integer Randomize ' Initialise le gnrateur de nombre alatoire. MyValue = CInt(Int((6 * Rnd()) + 1)) ' Gnre un nombre alatoire entre 1 et 6. Rnd() fournissant un nombre alatoire entre 0 et 1, je le multiplie par 6 et j'ajoute 1 pour qu'il soit entre 1 et 7 sans atteindre 7 (il peut tre entre 1 et 6,999), je prend sa valeur entire: il est maintenant entre 1 et 6, enfin je le transforme en Integer.

http://plasserre.developpez.com/v1-14.htm (2 sur 2) [01/03/2005 14:47:22]

Site

Site

Cours : VB.net

1.15 Rcursivit.
Une procdure est rcursive si elle peut s'appeler elle mme.

Exemple: calcul de 'Factorielle'.


On rappelle que N! (factorielle N)= 1*2*3*...*(N-2)*(N1)*N Exemple Factorielle 3 =1*2*3 Dim R As Long R=Factorielle(3) 'retournera 6

Cette fonction n'est pas fournie par VB, crons une fonction Factorielle SANS rcursivit: Function Factorielle (ByVal N as Long) As Long Dim i As Long Resultat=1 For i= 1 to N Resultat=i* Resultat Next i Return Resultat end Function Cela cre une fonction recevant le paramtre N et retournant un long. La boucle effectue bien 1*2*3...*N-1*N.

http://plasserre.developpez.com/v1-15.htm (1 sur 3) [01/03/2005 14:47:24]

Site

Factorielle avec 'Rcursivit': Une autre manire de calculer une factorielle est d'utiliser la rcursivit: VB gre la rcursivit. Comment faire? On sait que N!= N * (N-1) * (N-2).... 3 * 2 * 1 on remarque donc que N!= N*(N-1)! : Factorielle N!= N * Factorielle(N-1)

en sachant que 1!=1

Crons la fonction: Si N=1 la fonction retourne 1 sinon elle retourne N* factorielle(N-1) Function Factorielle (ByVal N as Long) As Long If N=1 then Return 1 Else Return N* Factorielle(N-1) End If end Function Dans la fonction Factorielle on appelle la fonction Factorielle, c'est bien rcursif. Pour N=4: La fonction 'descend' et appelle chaque fois la factorielle du nombre infrieur. La fonction Factionnelle est appele 4 fois : Factorielle (4) appelle Factorielle(3) qui appelle Factorielle(2) qui appelle Factorielle (1) Puis la fonction remonte en retournant le rsultat de chaque factorielle. Factorielle (1) retourne 1 Factorielle (2)retourne 2 '2*factorielle(1)

http://plasserre.developpez.com/v1-15.htm (2 sur 3) [01/03/2005 14:47:24]

Site

Factorielle (3)retourne

'3*factorielle(2) '4*factorielle(3)

Factorielle (4) retourne 24

Vb gre cela avec une pile des appels. il met dans une pile les uns aux dessus des autres les appels, quand il remonte, il dpile de haut en bas (Dernier rentr, premier sortie) Attention: La pile a une taille maximum, si N est trop grand, on dclenche une erreur de type StackOverflow.

http://plasserre.developpez.com/v1-15.htm (3 sur 3) [01/03/2005 14:47:24]

Site

Site

Cours : VB.net

1.19 Le GOTO

Faut-il utiliser le GOTO ?

Goto.
Permet un saut non conditionnel : aller ; saute vers une tiquette: ... Goto FIN ... FIN: FIN: est une tiquette, un mot en dbut de ligne qui dsigne un endroit du code; pour crer une tiquette, taper en dbut de ligne un mot suggestif de l'endroit, puis ajouter ":". Le programme saute de la ligne GoTo FIN l'tiquette FIN: puis se poursuit aprs FIN: Le GoTo est souvent utilis avec une instruction If: If A=0 Then Goto FIN ..

http://plasserre.developpez.com/v1-19.htm (1 sur 2) [01/03/2005 14:47:25]

Site

FIN: L'utilisation du Goto est peu lgante et viter; s'il y a plusieurs GoTo le programme devient vite illisible. On peut remplacer avantageusement la ligne prcdente par: If A<>0 Then .. End if

http://plasserre.developpez.com/v1-19.htm (2 sur 2) [01/03/2005 14:47:25]

Cours VB NET

Site

Cours : VB.net

Les Classes, 1.20 les objets.


Rsumons un peu la notion de Classe,

d'objet, de

surcharge, de classe statique.

Classes.
Nous avons vu quon utilise des objets. Il existe des 'types dobjet' qui dfinissent les caractristiques communes des objets. Ces types se nomment les Classes.
Exemple: La Classe System.Windows.Forms contient les 'Forms' et les 'Control'

On rappelle que cest ces classes que lon utilise comme moule pour instancer (crer) un objet. Dim B As New Form cre un formulaire partir de la Classe Form (Fentre).

http://plasserre.developpez.com/v1-20.htm (1 sur 11) [01/03/2005 14:47:27]

Cours VB NET

B hrite de toutes les caractristiques de la Classe Form.

Essayons de comprendre:
Pour utiliser un objet en VB, il faut. Que la DLL correspondante soit charge dans le projet. (La DLL c'est un fichier excutable '.dll' qui contient le code ncessaire). En VB.NET on appelle cela la 'Rfrence'. Exemple de DLL: System.dll

Que l'espace de nom soit import: une DDL contient des Classes d'objet. Pour utiliser une Classe il faut l'inclure dans le programme donc il faut l'importer partir de la DLL . On va par exemple importer l'espace de nom 'System.Windows.Forms' (contenue dans System.dll et qui contient les Classes 'Form' et 'control'): Import System.Windows.Forms On peut maintenant utiliser les Classes contenues dans cet espace de nom et crer un objet. par exemple on va crer une fentre avec la Classe Form contenue dans System.Windows.Forms. Dim Form1 As Form Form1 est donc un objet formulaire qui hrite de tous les membres (Proprits, mthodes) de la Classe Form, on peut donc utiliser une mthode de cet objet: Form1.Show() fentre ou une proprit: Form1.BackColor=RED 'pour modifier la couleur de fond 'pour faire apparatre la

http://plasserre.developpez.com/v1-20.htm (2 sur 11) [01/03/2005 14:47:27]

Cours VB NET

Les Classes les plus courantes sont dj charges et disponible, ce qui simplifie un peu les choses. Voyons le dtail des choses:

Les diffrentes 'Classes'.


Il existe 3 types de Classes -Les Classes spcifiques que lon cre de toute pice dans les modules de Classe.(On verra cela plus loin)
En VB, on peut crer une classe, ses proprits, mthodes..

-Les classes prdfinies du Framework. Ces classes de bases sont regroupes en bibliothques sous la dnomination Espace de noms et font partie:
q

Du Framework Du Common Language Runtime.

Il existe ainsi de manire gnrale des classes pour les formulaires Windows (WindowsForms), pour le Web (WebForms),
pour

laccs aux donnes,

les rseaux, la scurit....

http://plasserre.developpez.com/v1-20.htm (3 sur 11) [01/03/2005 14:47:27]

Cours VB NET

Quand on cre un nouveau projet, les Classes le plus souvent utilises sont automatiquement charges dans le projet: Voir l'onglet "Explorateur d'objet" Sont disposition lors de la cration d'un nouveau projet:
q

Quelques classes du Framework:

System, System.data, System.drawing, System.Windows.forms Ce dernier contient les Controls


q

Le Common Language Runtime (CLR).

Comme ces Classes sont charges au dpart cela permet demble de crer des feuilles, des contrles..(qui sont dans les WindowsForms et les Controls).

-Les classes fournies par des tiers.


On peut ajouter des rfrences (DLL) permettant d'ajouter des classes nouvelles, cela permet d'ajouter de nouvelles fonctionnalits VB: Exemple: les pilotes de base de donnes..

Imports:
espaces de noms ne sont pas chargs, lespace de noms Math nest pas charg par
Certains

http://plasserre.developpez.com/v1-20.htm (4 sur 11) [01/03/2005 14:47:27]

Cours VB NET

exemple. (Bien que la rfrence, la dll qui se nomme System soit prsente dans le projet.) Si je veux utiliser Round pour arrondir un nombre il faut dabord importer lespace de nom Math: Pour cela il faut taper en haut de la fentre (au dessus de public Class) Imports System.Math Ensuite, est accept: Label1.Text = (Round(1.2)).ToString qui affiche 1.

Si lImport na pas t fait, System.Math.Round(1.2) est accept aussi.


Noter bien que comme Math fait partie de System, la rfrence (la DLL correspondante) est dj charge. Autre exemple: si on veut utiliser les fichiers, il faut importer System.IO.

Porte de l'espace de noms:


Si un seul espace de noms est spcifi (Import System), tous les membres nom unique de cet espace de noms sont prsents. Si un espace de noms et le nom d'un lment de l'espace de noms sont spcifis (Import System.Math), seuls les membres de cet lment sont disponibles sans qualification. Exemple: Import System Permet d'utiliser System.ArgumentException mais pas Systeme.Math.round

http://plasserre.developpez.com/v1-20.htm (5 sur 11) [01/03/2005 14:47:27]

Cours VB NET

Pour utiliser Round il faut Importer

System.Math

Proprit ambigu:
Certaines proprits sont communes plusieurs classes, il peut y a avoir ambigut et il faut utiliser dans ce cas la syntaxe complte. Cela semble le cas pour left qui est une proprit de Microsoft.VisualBasic.Strings mais aussi une proprit des contrles. MonControle.left=250 Chaine= left(C,2) est accept

pose des problmes.

Pour lever l'ambigut il faut crire Microsoft.VisualBasic.left(C,i) par exemple quand on utilise left pour manipuler des chanes. (C'est ce que j'ai compris!!) Chaine= Microsoft.VisualBasic.left(C,2) est accept.

Alias:
Parfois pour simplifier l'criture ou pour viter des ambiguts on peut utiliser des Alias: Imports STR= Microsoft.VisualBasic.Strings importe l'espace de nom String mais le dsigne sous le nom de STR (STR est un Alias); STR est utilis ensuite: Chaine=STR.left(C,i)

Rfrences:
Pour qu'une classe soit utilise, il faut que le composant correspondant (la DLL) soit charg; on a vu que par dfaut quelques composants du Framework (System.dll..) et le CLR ( mscorlib.dll) tait chargs.

http://plasserre.developpez.com/v1-20.htm (6 sur 11) [01/03/2005 14:47:27]

Cours VB NET

Dans Explorateur de solutions double-cliquer la rubrique rfrences pour voir les DLL (rfrences dj charges).

Si vous souhaitez utiliser un autre composant dans votre application et qu'il n'est pas charg, il faut ajouter la rfrence de ce composant. Dans la fentre de l'explorateur de solutions, cliquez le bouton droit de la souris puis cliquez sur 'Ajouter une rfrence'. La bote de dialogue 'Ajouter une rfrence de Visual Studio .NET' propose trois options :
q

.NET - Rpertorie tous les composants .NET Framework pouvant tre rfrencs. (Certains sont dj charg comme System..) et les composants extrieurs. COM - Rpertorie tous les composants COM pouvant tre rfrencs. Projets - Rpertorie tous les composants rutilisables crs dans des projets locaux.

Exemple: Pour avoir la compatibilit VB6 par exemple charger Microsoft.VisualBasic. Compatibility et Microsoft.VisualBasic. Compatibility.Data, vous aurez ensuite accs cet espace de nom.

En rsum: Les rfrences ( correspondent aux DLL) permettent de charger des composants, des Classes du Framework ou d'autres classes.

http://plasserre.developpez.com/v1-20.htm (7 sur 11) [01/03/2005 14:47:27]

Cours VB NET

L'instruction 'Imports' permet d'importer des espaces de nom venant de ses rfrences. Cela donne accs dans le programme des classes appartenant ces espaces de noms. on pourra donc instancer des objets grce ces Classes puis utiliser des mthodes.

Noter que dans les Classes, il

existe une structure

arborescente. La premier Classe (en haut) est System. Dessous il y a entre autres System.WindowsForms Dessous System.WindowsForms.Controls Enfin System.WindowsForms.BackColor par exemple.

Remarque sur les objets et leurs mthodes:


Hritage: Les classes hritent des membres (proprits, mthodes) dont elles sont issues: Exemple : Un contrle Button hrite des membres de System.Windows.Forms. (les proprits Name, Left, Right, Visible, Enabled.. par exemple.)

Lobjet lui-mme a des membres (proprits et mthodes) :


q

Elles sont accessibles directement :

http://plasserre.developpez.com/v1-20.htm (8 sur 11) [01/03/2005 14:47:27]

Cours VB NET

Exemple pour .Trim de la chane A A.Trim(" ")

A tant une String, la mthode .trim relative au String est utilisable.


on appelle cela une mthode d'instance car elle travaille sur une instance d'un objet.
q

Dautres sont accessibles uniquement par les mthodes de la classe : La Classe de leur nature, de leur type.

Dans la classe 'String' jutilise la mthode Compare pour comparer 2 chanes. c=String.Compare(a,b)

La Classe de lopration effectuer Dans la Classe Math jutilise la mthode Abs (Valeur absolue) c=Math.Abs(-12)
On appelle cela une mthode partage car on l'utilise directement partir d'une classe.

Langage Visual Basic.


Dans VB.Net il y a donc possibilit de travailler avec:
q

Les Classes, leurs proprits, leurs mthodes. Les Forms, Controls, les classes des variables (String, Int32..) sont disponibles par dfaut. Les instructions VB du Common Langage Runtime disponible par dfaut.

http://plasserre.developpez.com/v1-20.htm (9 sur 11) [01/03/2005 14:47:27]

Cours VB NET
q

Les instructions de la bibliothque de compatibilit VB6. il faut dans ce cas importer Microsoft.VisualBasic. Compatibility et Microsoft.VisualBasic. Compatibility.Data

En effet, par dfaut, par soucis de faciliter les migrations de VB6 vers VB.NET, VB.NET contient toutes les fonctions venant de VBA. Exemple: Pour la manipulation des nombres 'Int' fait partie du CLR, 'Round' fait partie de la classe Math, 'Randomize' et 'Rnd' font partie de la bibliothque de compatibilit. Parfois certaines fonctions font double emploi et ont des quivalents dans les 2 ou 3 catgories. Les Classes sont souvent plus riches avec multiples surcharges et, si j'ai bien compris, comme le CLR, sont communes tous les langages utilisant le Framework .Net. Si vous voulez passer au C#, les classes sont les mmes. Par contre, les instructions devant de la compatibilit VB6 sont propre VB.NET. Seront-elles conserves dans les futures versions de VB.NET?

Classe statique
Certaines Classe sont dites Statiques car elles existent d'embl et on peut travailler dessus sans que l'on aie besoin de les instancer: Exemple: La Classe Directory (rpertoire): Directory.GetCurrentDirectory 'est utilisable directement pour obtenir le rpertoire courant. Par contre avec une Classe non statique il faut instancer

http://plasserre.developpez.com/v1-20.htm (10 sur 11) [01/03/2005 14:47:27]

Cours VB NET

l'objet que l'on va utiliser: Pour la classe DirectoryInfo (information sur le rpertoire), on doit instancer avant usage un DirectoryInfo particulier: Dim D As DirectoryInfo D= New DirectoryInfo( MonDossier) C'est un peu thorique, mais on verra au fur et mesure des exemples pratiques de cela.

http://plasserre.developpez.com/v1-20.htm (11 sur 11) [01/03/2005 14:47:27]

Site

Site

Cours : VB.net
Exemples:

E 1.1

Petites routines.
trs simples ne

On prendra des exemples de routines contenant que du code:


q q

Avec les strings Avec les nombres

Avec les 'String'.


Vous avez une chane de caractres, comment afficher, le premier caractre puis les 2 premiers, puis 3..? Dans un formulaire (une fentre), il y a un TextBox1( zone de texte) ( avec sa proprit Multiline=True) Dim Dim Dim For C As String = "DUBONET" Tx As String i As Integer i = 1 To Len(C) Tx += Microsoft.VisualBasic.Left(C, i) + ControlChars.CrLf Next i TextBox1.Text = Tx Mettre ce code dans Form_Load puis lancer le programme. Affiche:

http://plasserre.developpez.com/ve1-1.htm (1 sur 3) [01/03/2005 14:47:29]

Site

D DU DUB DUBO DUBON DUBONE DUBONET On remarque: Tx est une string permettant de stocker temporairement la string afficher; a chaque boucle on ajoute la nouvelle string (Tx += est quivalent Tx=Tx+..) et un caractre de retour la ligne. Left fait partie de l'espace de nom Microsoft.VisualBasic.

Avec les 'nombres'.


Somme de N entiers. Calculer par exemple pour Nombre=20 la Somme=1+2+3+4...+18+19+20 Dim Somme As Integer 'Variable somme Dim Nombre As Integer=20 Dim i As Integer 'Variable de boucle For i=0 To Nombre Somme += Nombre Next i On rappelle que Somme += Nombre est quivalent Somme =Somme+ Nombre Afficher les tables de multiplication. On fait 2 boucles: celle avec i 2..) (qui dcide de la table: table des 1, des

On affiche 'table des' puis valeur de i celle avec j (allant de 1 10 pour chaque table) Pour chaque ligne, on affiche la valeur de i puis ' X ' puis la valeur de j puis ' = ' puis la valeur de i fois j ControlChars.Crlf permet un saut la ligne

http://plasserre.developpez.com/ve1-1.htm (2 sur 3) [01/03/2005 14:47:29]

Site

A chaque fois que l'on a quelque chose afficher, on l'ajoute la variable String T A la fin on affecte T la proprit text d'un TextBox pour rendre visible les tables. Dim i As Integer Dim j As Integer Dim T As String For i = 1 To 10 T += ControlChars.CrLf T += "Table des " & i & ControlChars.CrLf For j = 1 To 10 T += i.ToString & " X " & j.ToString & "=" & i * j & ControlChars.CrLf Next j Next i TextBox1.Text = T Affiche: Table des 1 1 X 1 =1 1 X 2 =2 ...

http://plasserre.developpez.com/ve1-1.htm (3 sur 3) [01/03/2005 14:47:29]

Site

Site

Cours : VB.net
Exemples:

E 1.2

Petits programmes de maths.

On prendra des exemples de routines mathmatiques simples:


q q q

Calcul de l'hypotnuse d'un triangle rectangle Calcul de factorielle (avec ou sans rcursivit) Un nombre est-il premier?

Calcul de l'hypotnuse d'un triangle rectangle.


On cre pour cela une fonction, on envoie 2 paramtres de type Single: les 2 cots du triangle; la fonction retourne l'hypotnuse. Function Hypotenuse (ByVal Side1 As Single, ByVal Side2 As Single) As Single Return Sqrt((Side1 ^ 2) + (Side2 ^ 2)) End Function Pour les nuls, on rappelle que le carr de l'Hypotnuse est gal la somme des carres des 2 autres cots.

Factorielle.
On rappelle que N! (factorielle N)= 1*2*3*...*(N-2)*(N1)*N

http://plasserre.developpez.com/ve1-2.htm (1 sur 4) [01/03/2005 14:47:31]

Site

Exemple Factorielle 3 =1*2*3 Dim R As Long R=Factorielle(3) 'retournera 6

Cette fonction n'est pas fournie par VB, crons une fonction Factorielle: Function Factorielle (ByVal N as Long) As Long Dim i As Long Resultat=1 For i= 1 to N Resultat=i* Resultat Next i Return Resultat end Function Cela cre une fonction recevant le paramtre N et retournant un long. Une boucle effectue bien 1*2*3...*N-1*N.

Factorielle avec 'Rcursivit':


Une autre manire de calculer une factorielle est d'utiliser la rcursivit: Une procdure est rcursive si elle peut s'appeler elle mme. VB gre la rcursivit. Comment faire pour les factorielles? On sait que Factorielle N= N * Factorielle(N-1) N!= N*(N-1)! : en sachant que 1!=1

Crons la fonction: Function Factorielle (ByVal N as Long) As Long If N=1 then Return 1 Else Return N* Factorielle(N-1) End If end Function

http://plasserre.developpez.com/ve1-2.htm (2 sur 4) [01/03/2005 14:47:31]

Site

Dans la fonction Factorielle on appelle la fonction Factorielle, c'est bien rcursif. Pour N=4, la fonction Factionnelle est appele 4 fois :Factorielle (4) puis Factorielle(3) puis Factorielle(2) puis Factorielle (1) Factorielle (1) retourne 1 Factorielle (2)retourne Factorielle (3)retourne 2 6 '2*factorielle(1) '3*factorielle(2) '4*factorielle(3)

Factorielle (4) retourne 24

Vb gre cela avec une pile des appels. il met dans une pile les uns aux dessus des autres les appels, quand il remonte, il dpile de haut en bas (Dernier rentr, premier sortie) Attention: La pile a une taille maximum, si N est trop grand, on dclenche une erreur de type StackOverflow.

Un nombre est-il premier?


Un nombre premier est seulement divisible par 1 et luimme. Pour voir si N est entier on regardera successivement si ce nombre est divisible par 2 puis 3 puis 4... jusqu'a N1 Un nombre est divisible par un autre si la division donne un entier. Comment voir si un nombre est entier? Pour ma part, j'utilise la mthode suivante: A est entier si A=Int(A). Dim IsPremier As Boolean Dim N As Double=59 Dim I As Double I=2: IsPremier=True Do If N/I= Int(N/I) then IsPremier=False Else i += 1 End if

http://plasserre.developpez.com/ve1-2.htm (3 sur 4) [01/03/2005 14:47:31]

Site

Loop While IsPremier=True And I<N Pour 59 IsPremier sera gal True. On peut amliorer la routine en remarquant: Si un nombre n'est pas premier il admet 2 diviseurs dont un est infrieur racine N. on peut donc : -Vrifier que le nombre n'est pas pair puis -Vrifier s'il est divisible par les nombres allant de 3...jusqu' racine de N en ne tenant compte que des nombres impaires.

Remarque pour ceux qui veulent tester le code : Pour utiliser la routine sur les nombres premiers, il faut crer une petite interface: dans un formulaire crer un bouton nomm 'Button1' et une TextBox nomme 'TextBox1', enfin mettre dans la routine Button1_Click le code cidessous. Quand on lance le programme, on saisie un nombre dans le textbox , puis on clique sur le bouton , cela affiche True ou False dans une MessageBox, is le nombre est premier ou non:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim IsPremier As Boolean Dim N As Double Dim I As Double N = Val(TextBox1.Text) I = 2 : IsPremier = True Do If N / I = Int(N / I) Then IsPremier = False Else I += 1 End If Loop While IsPremier = True And I < N MsgBox(IsPremier.ToString) End Sub

http://plasserre.developpez.com/ve1-2.htm (4 sur 4) [01/03/2005 14:47:31]

Site

Site

Cours : VB.net
Exemples:

E 1.3

Programmes de Tri et de recherche.

On a parfois besoin de trier par ordre alphabtique un tableau de string. Il existe maintenant des mthodes de tri 'automatique' entirement gres par VB grce la mthode 'sort'. Il existe aussi des routines de tri entirement crite en VB, elles deviennent inutile mais c'est didactique de voir comment elle fonctionnent. Parfois il faut chercher dans un tableau un lment; la aussi on peut crire les routines ou utiliser les mthodes VB

Tri avec la mthode SORT.


Pour un tableau unidimensionnel. Dim Animals(2) As String Animals(0) = "lion" Animals(1) = "girafe" Animals(2) = "loup" Array.Sort(Animals)

http://plasserre.developpez.com/ve1-3.htm (1 sur 5) [01/03/2005 14:47:33]

Site

Et le tableau est tri!! On rappelle que l'on ne peut pas trier un tableau multidimensionnelle, mais il y a des ruses.(voir rubrique:tableau) Les Collections peuvent tre tries automatiquement aussi. Enfin si la proprit Sorted d'une ListBox est True, la liste est trie automatiquement quand on la charge. ...

Routine de Tri.
Pour trier un tableau de chanes de caractres, il faut comparer 2 chanes contigus, si la premire est suprieure (c'est dire aprs l'autre sur le plan alphabtique)on inverse les 2 chanes, sinon on n'inverse pas. Puis on recommence sur 2 autres chanes en balayant le tableau jusqu' ce qu'il soit tri. Tout l'art des routines de tri est de faire le moins de comparaisons possible pour trier le plus vite possible. Voyons une des routines les plus rapides, le Bubble Sort (ou tri bulle); on le nomme ainsi car l'lment plus grand remonte progressivement au fur et mesure jusqu' la fin du tableau comme une bulle. Une boucle externe allant de 1 la fin du tableau balaye le tableau N fois, une seconde boucle interne balaye aussi le tableau et compare 2 lment contigus et les inverse si ncessaire. La boucle interne fait remonter 1 lment vers la fin du tableau, la boucle externe le fait N fois pour remonter tous les lments. Dim i, j , N As Integer 'Variable de boucle i, j ; N= nombre d'lments-1 Dim Temp As String N=4 'tableau de 5 lments. Dim T(N) As String 'lment de 0 4 For i=0 To N-1 For j=0 To N-1 If T(j)>T(j+1) then Temp=T(j): T(j)=T(j+1):T(j+1)=Temp End if Next j

http://plasserre.developpez.com/ve1-3.htm (2 sur 5) [01/03/2005 14:47:33]

Site

Next i Remarque: pour inverser le contenue de 2 variables, on doit crire Temp=T(j): T(j)=T(j+1):T(j+1)=Temp (L'instruction qui faisait cela en VB6 et qui se nommait Swap n'existe plus) Cette routine tri bien le tableau mais n'est pas optimise: il n'est pas ncessaire que la boucle interne tourne de 0 N-1 chaque fois car aprs une boucle ,le dernier lment est sa place. Pour i=0 la boucle interne tourne jusqu' N-1, pour i=1 jusqu' N-2... Cela donne: Dim i, j , N As Integer 'Variable de boucle i, j ; N= nombre d'lments-1 Dim Temp As String N=4 'tableau de 5 lments. Dim T(N) As String 'lment de 0 4 For i=0 To N-1 For j=0 To N-i-1 If T(j)>T(j+1) then Temp=T(j): T(j)=T(j+1):T(j+1)=Temp End if Next j Next i Il existe d'autres mthodes encore plus rapide (Mthode de Shell et Shell-Metzner).

Recherche dans une liste.


On a une liste de string, on veut chercher ou (en quelle position) se trouve une string. Pour une liste non trie, on n'a pas d'autres choix que de comparer la string cherche chaque lment du tableau, on utilisera donc une boucle:

N=4 'tableau de 5 lments. Dim T(N) As String 'lment de 0 4 T(0)="vert" T(1)="bleu" T(2)="rouge" T(3)="jaune"

http://plasserre.developpez.com/ve1-3.htm (3 sur 5) [01/03/2005 14:47:33]

Site

T(4)="blanc" Dim i As Integer 'Variable de boucle Dim AChercher As String= "rouge" 'String chercher For i=0 To N If T(i)=AChercher then Exit For End if Next i 'i contient 2 Pour une liste trie (suite ordonne), on peut utiliser la mthode de recherche dichotomique: On compare l'lment recherch l'lment du milieu du tableau, cela permet de savoir dans quelle moiti se situe l'lment recherch. De nouveau on compare l'lment recherch l'lment du milieu de la bonne moiti...jusqu' trouver. Pour cela on utilise les variables Inf et Sup qui sont les bonnes infrieure et suprieure de la zone de recherche et la variable Milieu. On compare l'lment recherch l'lment du tableau d'indice milieu, si il sont gaux on a trouv , on sort; si ils sont diffrent on modifie Inf et Sup pour pointer la bonne plage puis on donne Milieu la valeur du milieu de la nouvelle plage et on recommence. Dim Dim Dim Dim N As Integer T(N) As String 'lment de 0 4 Inf, Sup, Milieu As Integer ' Reponse As Integer 'contient le numero de l'lment 'ou -1 si lment non trouv Dim i As Integer 'Variable de boucle Dim AChercher As String= "c" 'String chercher N=4 'tableau de 5 lments. T(0)="a" T(1)="b" T(2)="c" T(3)="d" T(4)="e" Inf=0: Sup=N Do if inf>Sup then Reponse=-1: Milieu= INT((Inf+Sup)/2) If Achercher=T(Milieu) then If Achercher<T(Milieu) then If Achercher>T(Milieu) then Loop

Exit Do Reponse=Milieu:Exit Do Sup=Milieu-1 Inf=Milieu+1

http://plasserre.developpez.com/ve1-3.htm (4 sur 5) [01/03/2005 14:47:33]

Site

'Reponse =2 La recherche dichotomique est rapide car il y a moins de comparaisons. Mais comme d'habitude VB.Net possde des proprits permettant de rechercher dans un tableau tri ou non et cela sans avoir crire de routine.

Binarysearch recherche un lment dans un tableau tri unidimensionnel.(algorithme de comparaison binaire performant sur tableau tri: probablement une recherche dichotomique) Exemple : I=Array.BinarySearch(Mois, "Fvrier")
IndexOf Recherche un objet spcifi dans un tableau unidimensionnel (tri ou non), retourne l'index de la premire occurrence. Dim myIndex As Integer = Array.IndexOf(myArray, myString)

Retourne -1 si l'lment n'est pas trouv. LastIndexOf fait une recherche partir de la fin.

http://plasserre.developpez.com/ve1-3.htm (5 sur 5) [01/03/2005 14:47:33]

Site

Site

Cours : VB.net
Exemples:

E 1.4

Petits calculs financiers.

Conversion Francs=>Euros.
Si un objet coute 100F, cela fait combien d'euros? Dim Valeur As Double=100 Dim Resultat As Double Resultat =Math.Round((Valeur / 6.55957), 2) On divise par 6.55957 puis on arrondi 2 chiffres aprs la virgule.

Cot d'augmentation de la vie.


Si un objet de 100 augmente de 3% par an, combien cotera -t-il dans 10 ans. Dim Prix As Decimal=100 Dim Taux As Decimal=3 Dim Periode As Integer=10 Dim i As Integer For i= 1 to Periode Prix=Prix+(Prix*Taux/100)
http://plasserre.developpez.com/ve1-4.htm (1 sur 2) [01/03/2005 14:47:34]

Site

Next i On peut remplacer les 3 dernires lignes par: Prix=Prix*(1+Taux/100)^Periode Noter que l'on utilise des variables de type dcimales, c'est une bonne habitude pour faire des calculs financiers (pas d'erreurs d'arrondis).

Remboursement d'un prt.


Quel est le remboursement mensuel d'un prt d'une somme S durant une dure D (en anne) un taux annuel T ? R=S x T / 1-(1+T)^-D (ici avec T en % mensuel et D en mois Dim R, S , D, T As Decimal

S=5000 '5000 D=15 'Sur 15 ans T=4 '4% par an T=T/12/100 'Taux au mois D=D*12 'Dure en mois R=S*T/(1-(T+1)^(-D))'Formule connue par tous bon comptable!! Si on voulait afficher le rsultat dans un label (on verra cela plus loin) Label1.text= R.ToString("C") Ici le rsultat est transform en chane de caractres (grce ToString) au format montaire ("C"), on obtient '36,98 ' que l'on met dans le label pour l'afficher. Ultrieurement on verra un exemple plus complet utilisant les fonctions financires de VB.

http://plasserre.developpez.com/ve1-4.htm (2 sur 2) [01/03/2005 14:47:34]

vbintro

Site

Cours : VB.net

L'interface 3.1 Utilisateur.


Elle correspond aux fentres et contrles que voit l'utilisateur.
On a vu que le dveloppeur dessine cette interface en mode conception (Design) dans l'IDE.

Rappel:

Comment crer une fentre? Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fentre Form1 apparat. On a bien cre une fentre avec la classe WindowsForms.Form (En fait on a cre une Classe 'Form1')
Comment ajouter

un bouton?

Cliquer sur Boite Outils gauche , bouton WindowsForms, puis bouton Button,cliquer dans Form1, dplacer le curseur sans lcher le bouton, puis lcher le bouton : un bouton apparat.

http://plasserre.developpez.com/v3-1.htm (1 sur 7) [01/03/2005 14:47:37]

vbintro

Comment ajouter

un label?

Un label est un contrle qui permet dafficher un texte. Comme pour le bouton cliquer sur Boite Outils gauche, bouton WindowsForms, bouton Label et mettre un contrle label sur la fentre.
On obtient dans la fentre principale:

Modifier les proprits de l'objet.


Il suffit ensuite de modifier les proprits de l'objet point (celui qui est entour de petit carrs) pour lui donner laspect dsir. Les proprits sont accessibles dans la fentre de proprits de droite.

http://plasserre.developpez.com/v3-1.htm (2 sur 7) [01/03/2005 14:47:37]

vbintro

Dans le code des procdures les proprits des objets sont aussi accessibles. Button1.Text="OK" permet par exemple de modifier la proprit Text d'un bouton.

Noter que pour modifier la taille des objets, on peut le faire trs facilement la souris en cliquant sur les petits carr entourant l'objet et en tirant les bords. (on peut interdire les modifications de taille et de position des contrles par le menu Format puis verrouiller les contrles une fois que leurs tailles et positions est bien dfinies.)

Tous les objets ont des proprits communes.


Celles hrites de la Classe Control' quil faut connatre:

: il sagit du nom de lobjet tel quil est gr par lapplication. Par dfaut, VB baptise tous les objets que vous crez de noms gnriques, comme Form1, Form2, Form3 pour les fentres, List1, List2 pour les listes... Accessible en mode conception uniquement.

Name

http://plasserre.developpez.com/v3-1.htm (3 sur 7) [01/03/2005 14:47:37]

vbintro

Il est vivement conseill, avant toute autre chose, de rebaptiser les objets que vous venez de crer afin de donner des noms plus vocateurs. Le bouton sur lequel est crit OK sera nomm BoutonOK. La liste qui affiche les utilisateurs sera nomme ListUtilisateurs. Il est conseill de dbuter le nom de lobjet par un mot voquant sa nature: BoutonOk ou BtOk ou ButtonOk, btnOk voulez. Microsoft conseille: btn pour les Boutons lst pour les ListBox chk pour les CheckBox cbo pour les combos dlg pour les DialogBox frm pour les Form lbl pour les labels txt pour les Textbox tb pour les Toolsbar rb pour les radiobutton mm pour les menus tmr pour les timers cest comme vous

Text :

il sagit du texte qui est associ lobjet.

Dans le cas dune fentre cest le texte qui apparat dans la barre de titre en haut. Pour un TextBox ou un Label cest videment le texte qui est affich. On peut modifier cette proprit en mode conception ou dans le code : Exemple : Avec du code comment faire pour que le bouton ButtonOk porte linscription Ok ButtonOk.Text= "Ok"

http://plasserre.developpez.com/v3-1.htm (4 sur 7) [01/03/2005 14:47:37]

vbintro

Enabled :

accessible

Indique si un contrle peut rpondre une interaction utilisateur. La proprit Enabled permet l'activation ou la dsactivation des contrles au moment de l'excution. Vous pouvez dsactiver les contrles ne s'appliquant pas l'tat actuel de l'application. Vous pouvez galement dsactiver un contrle pour interdire son utilisation. Par exemple, un bouton peut tre dsactiv pour empcher l'utilisateur de cliquer dessus. Si un contrle est dsactiv, il ne peut pas tre slectionn. Un contrle dsactiv est gnralement gris. Exemple : dsactiver le ButtonOk ButtonOk.Enabled=False

Visible :
Indique si un contrle est visible ou non. ButtonOk.Visible=False fait disparatre le bouton.

Attention pour rendre visible une fentre on utilisa la mthode .Show.

Font :
Permet le choix de la police de lobjet. caractres affiche dans

BackColor ForeColor:
Couleur du fond, Couleur de lavant plan Pour un bouton Forecolor correspond au cadre et aux caractres. ButtonOk.ForeColor=

System.Drawing.Color.Blue

Tag:
Permet de stocker une valeur ou un texte li l'objet. Chaque objet a un Tag qui peut contenir du texte. On l'utilise souvent comme un Flag li l'objet. Par exemple: une liste peut contenir la liste des CD ou des DVD ou des K7, quand je charge la liste des CD, je rajoute
http://plasserre.developpez.com/v3-1.htm (5 sur 7) [01/03/2005 14:47:37]

vbintro

List1.Tag="CD" cela permet ultrieurement de voir ce qu'il y a dans la liste.

Il y a bien d'autres proprits.

Evnements lis aux objets


On a vu que les objets de l'interface utilisateur ont des procdures dclenches par les vnement de cet objet. 2 exemples: 1- Quand l'utilisateur clique sur un bouton Ok procdure ButtonOk_Click s'effectue. , la

2-Quand l'tat (coch ou non coch) d'une case cocher nomme CouleurRouge change, la procdure CouleurRouge.CheckedChanged est active.

La syntaxe complte de la procdure est: Private Sub CouleurRougeCheckedChanges (ByVal sender As System.Objet, ByVal e As System.EventArgs) Handles CouleurRouge.CheckedChanged

End Sub Dtaillons: La procdure vnement est prive (Private). Aprs le nom Sub il y a un nom de procdure (CouleurRougeCheckedChanges) Handles indique quel objet et vnement dclench la procdure. (On verra qu'il peut y en avoir plusieurs.) A noter que Sender contient le contrle ayant dclench l'vnement et e l'vnement correspondant. sender.Name contient par exemple le nom du contrle ayant dclench l'vnement. On voit que quand on cre un objet, ses procdures vnements sont automatiquement cres. On se rend compte que dans une procdure vnement on peut modifier (en mode conception) ou lire (en mode Run) quel objet et quel vnement dclench la procdure. On peut mme indiquer plusieurs objets lis cette procdure.

Certains vnement sont communs


http://plasserre.developpez.com/v3-1.htm (6 sur 7) [01/03/2005 14:47:37]

tous les contrles:

vbintro

Click DoubleClick GotFocus LostFocus KeyUp KeyPress KeyDown

Il y a toujours des mthodes Changed dclenches par un changement d'tat: CheckedChanged pour une case cocher, TextChanged pour un contrle texte.

Pour ne pas alourdir les exemples, nous crivons souvent une version simplifie de l'en-tte de la procdure.

En rsum:
Le programmeur dessine les fentres et contrles. Il peut modifier les proprits des objets dessins: Par la fentre de proprits (en mode conception). Par du code (des instructions) dans les procdures.

http://plasserre.developpez.com/v3-1.htm (7 sur 7) [01/03/2005 14:47:37]

vbintro

Site

Cours : VB.net
Les Forms.

3.2

Elle correspondent aux fentres ou 'formulaires'.

Crer une fentre en mode conception:


Menu Projet, Ajouter un formulaire Windows, cliquer sur WindowsForm, une fentre Form1 apparat. On a bien cre une fentre avec la classe WindowsForms.
Toute linterface se trouve sur des fentres.

En VB.net on parle de formulaire.

Proprits:
http://plasserre.developpez.com/v3-2.htm (1 sur 8) [01/03/2005 14:47:39]

vbintro

Bien sur, la fentre possde des proprits qui peuvent tre modifies en mode design dans la fentre 'Proprits' droite ou par du code:

Name

:Nom du formulaire.

Donner un nom explicite. FrmDemarrage

Ds quune fentre est cre on modifie immdiatement ses proprits en mode conception pour lui donner laspect que lon dsire.

Text

: Cest le texte qui apparatra dans la barre de titre en haut. Text peut tre modifi par le code : Form1.text= "Fentre"

Icon

: proprit qui permet dassocier la Form un fichier icne. Cette icne saffiche dans la barre de titre, tout en haut gauche. Si la Form est la Form par dfaut du projet, cest galement cette icne qui symbolisera votre application dans Windows. Comment crer une icne? Dans l'IDE de VB. Menu Fichier>Nouveau>Fichier cliquez sur Icon , Vb ouvre une fentre Icon1 (dans l'diteur d'images de Visual Studio.Net) Cela permet de crer ou modifier une icne (Fichier>Ouvrir>Fichier pour modifier). Comment enregistrer? Click droit dans l'onglet 'Icon1' ouvre un menu contextuel permettant d'enregistrer votre Icne.

WindowState

Donne ltat de la fentre : Plein cran (FormWindowState.Maximized), normale (FormWindowState.Normal), dans la barre de tache (FormWindowState.Minimized). Exemple: mettre une fentre en plein cran avec du code.

http://plasserre.developpez.com/v3-2.htm (2 sur 8) [01/03/2005 14:47:39]

vbintro

me.WindowState =FormWindowState.Maximized (Quand on tape Me.WindowsState= Vb donne la liste, l'numration)

ControlBox
Si cette proprit comme valeur False, les boutons de contrle situs droite de la barre de la fentre napparaissent pas.

MaximizeBox
Si cette proprit comme valeur False, le boutons de contrle Plein cran situs droite de la barre de la fentre napparat pas.

MinimizeBox
Si cette proprit comme valeur False, le boutons de contrle Minimize situs droite de la barre de la fentre napparat pas.

FormBorderStyle
Permet de choisir le type des bords de la fentre : sans bord (None), bord simple (FixedSingle)ne permettant pas lutilisateur de modifier la taille de la fentre, bord permettant la modification de la taille de la fentre (Sizable).. Exemple: Me.FormBorderStyle =FormBorderStyle.Sizable

StartPosition

Permet de choisir la position de la fentre lors de son ouverture. Fentre au centre de lcran ? la position qui existait lors de la conception ...?

Me.StartPosition =FormStartPosition.CenterScreen

http://plasserre.developpez.com/v3-2.htm (3 sur 8) [01/03/2005 14:47:39]

vbintro

MinSize et MaxSize
Donne les dimensions minimums et maximums que l'on peut utiliser pour redimensionner une fentre.

Opacity
Allant de 0% (0) 100% (1), permet de crer un formulaire plus ou moins transparent. Pour 0 il est transparent, pour 1 il est totalement opaque (normal)

Exemple:
Me.FormBorderStyle= Sizable Me.ControlBox=False Me.Size = New Size(100, 100) Me.StartPosition = FormStartPosition.CenterScreen Me.Opacity= 0.75 Donne au milieu de l'cran,la fentre:

Ouvrir une fentre


On vient de dessiner une Form1 et une Form2 c'est donc les Class 'Form1 et ''Form2' (les moules) que l'on a dessin. Si dans une routine de la Form1 on veut ouvrir une seconde fentre de type Form2, il faut: Crer un Objet fentre (formulaire) avec le moule Form2:

Dim f As New Form2() La nouvelle instance f de la Class 'form2' est un objet fentre.

http://plasserre.developpez.com/v3-2.htm (4 sur 8) [01/03/2005 14:47:39]

vbintro

Pour la faire apparatre j'utilise la mthode: .ShowDialog.

f.ShowDialog()
La fentre f est modale car on a utilis

ShowDialog : quand elle est ouverte, on ne peut pas aller dans une autre fentre de l'application avant de sortir de celle l. (A titre d'exemple les fentres MessageBox sont toujours Modales). Utiliser .show pour ouvrir une feuille non modale.
Attention: une fentre est un objet et est 'visible' suivant les rgles habituelles des objets. Si on instance une fentre partir d'une procdure, elle sera visible dans cette procdure. Si elle est 'Public' et instance dans un module standard, elle sera visible partout.

Evnements:
Au cours de l'excution:
Quand la feuille est charge la procdure Form1_Load() est active. On pourra donc y mettre le code initialisant la feuille.

Form1_Activated() est excut ensuite car la feuille deviendra active.

Form1.GotFocus() est enfin excut puisque la fentre prend le focus. Form1.Enter () est excut lorsque l'utilisateur entre dans la fentre.

Ds qu'une proprit change de valeur un vnement 'PropritChanged' se dclenche: Form1.BackColorChanged se dclenche par exemple quand la couleur du fond change.

http://plasserre.developpez.com/v3-2.htm (5 sur 8) [01/03/2005 14:47:39]

vbintro

Form1.Resized se dclenche quand on modifie la taille de la fentre.( c'est intressant pour interdire certaines dimensions)

Form1.Leave survient dans il y a perte du focus. Bien sur il existe aussi Form1_Desactivate quand la fentre perd le focus et n'est plus active. Form1.Closing se produit pendant la fermeture de la fentre (on peut annuler cette fermeture en donnant la variable Cancel la valeur True) Form1.Closed se produit lorsque la fentre est ferme.

Il y en a beaucoup d'autres comme par exemple les vnements qui surviennent quand on utilise la souris (MouveUp, MouseDown, MouseMove) ou le clavier (KeyUp, KeyDown, KeyPress) sur la fentre ; Left Right, Size, Position pour positionner la fentre ou dfinir sa taille..

Mthodes:
On a dj vu que pour faire apparatre une fentre il faut utiliser .ShowDialog (pour qu'elle soit modale) ou .Show (pour non modale). Me.Close ferme le formulaire. Me.Activate l'active s'il est visible Me.Hide rend la fentre invisible.

Pour mettre la fentre au premier plan. TopMost laisse toujours la fentre au premier plan alors que BringToFront ramne la fentre au premier plan temporairement.

System.Windows.Forms.Form
On se rend compte que quand on dessine une fentre Form2 par exemple, VB cre une nouvelle classe 'Class Form2' Public Class Form2 End Class

http://plasserre.developpez.com/v3-2.htm (6 sur 8) [01/03/2005 14:47:39]

vbintro

Elle hrite de System.Windows.Forms.Form: on voit bien dans le code: Inherits Systeme.Windows.Forms.Form

Elle contient -du code gnr automatiquement par le concepteur Windows Forms (on peut le voir en cliquant sur le petit '+') et qui cre la fentre et ses contrles. -les procdures lies aux vnements.

Dim f As New Form2(), on cre une instance de la Class Form2.


Quand on tape

Formulaire d'avant plan:


Pour dfinir au moment de la conception un formulaire en tant que formulaire d'avant-plan d'une application.
q

Dans la fentre Proprits, attribuez la proprit TopMost la valeur true.

Pour dfinir par code un formulaire en tant que formulaire d'avant-plan d'une application.
q

Dans une procdure, attribuez la proprit TopMost la valeur true.

Me.TopMost = True

http://plasserre.developpez.com/v3-2.htm (7 sur 8) [01/03/2005 14:47:39]

vbintro

http://plasserre.developpez.com/v3-2.htm (8 sur 8) [01/03/2005 14:47:39]

Site

Site

Cours : VB.net

Les 3.3 Boutons.


Ils sont omniprsent dans les

'formulaires'.

Crer un bouton :
Cliquer sur Boite Outils gauche , bouton Windows Forms, puis bouton Button,cliquer dans Form1, dplacer le curseur sans lcher le bouton, puis lcher le bouton : un bouton apparat.

Modifier ses proprits:


Name est utilis pour lui donner un nom explicite (BoutonOk BoutonCancel)
http://plasserre.developpez.com/v3-3.htm (1 sur 4) [01/03/2005 14:47:41]

Site

FlatStyle donne un aspect au bouton (Flat, standard, System)

Text contient le texte a afficher sur le bouton. ForeColor correspond la couleur de ce texte (BackColor tant la couleur du fond) Si on y inclut un & la lettre qui suit sera soulign et sert de raccourci clavier. &Ok donne sur le bouton Ok TextAlign permet de positionner le texte dans le bouton. Image contient le nom de limage afficher sur le bouton (si on veut afficher une image, on le fait en mode Design; noter que quand on distribue l'application, il n'y a pas besoin de fournir le fichier contenant l'image avec l'application ). (AlignImage permet de positionner limage sur le bouton.)

On peut aussi puiser une image dans une ImageList grce la proprit ImageList et ImageIndex, on peut ainsi changer dimage. La proprit BackGroundImage permet de mettre une image de fond. Exemple: button1.Text="Ok" affiche 'Ok' dans le bouton.

Utiliser les vnements:


Lvnement principalement utilis est Click() : quand lutilisateur clique sur le bouton la procdure Private Sub Button_Click(..) End Sub est traite. Cette procdure contient le code qui doit tre excut lorsque l'utilisateur clique sur le bouton. Le bouton peut tre slectionn grce un clic de souris, la touche ENTRE ou la BARRE D'espacement si le bouton a le focus.

http://plasserre.developpez.com/v3-3.htm (2 sur 4) [01/03/2005 14:47:41]

Site

Crer un bouton Ok ou Cancel:


Parfois il faut permettre aux utilisateurs de slectionner un bouton en appuyant sur la touche ENTRE mme si le bouton n'a pas le focus. Exemple: Il y a sur la fentre un bouton "Ok" qui doit tre enfonc quand l'utilisateur tape 'Enter' au clavier, c'est le bouton qui 'valide' le questionnaire ( et qui le ferme souvent). Comment faire? Dfinissez la proprit AcceptButton donnant le nom du bouton. de la Form en lui

Cela permet au formulaire d'avoir le comportement d'une bote de dialogue.

Cration d'un bouton par code:


L'exemple suivant cre un Button nomm Button1 sur lequel on voit "Ok", on modifie certaines de ses proprits et l'ajoute Form. Private Sub InitializeMonButton() Dim button1 As New Button1() button1.Text="Ok" ' Ajouter le bouton la Form Controls.Add(button1) End Sub Il faut par code crer aussi les vnements lis ce bouton: dans ce cas il faut dclarer le bouton plutt avec la syntaxe contenant WithEvents et en haut du module. Private WithEvents Button1 As Button Puis crire la sub vnement. Sub OnClique ( sender As Objet, EvArg As EventArgs) Handles Button1 End Sub Ainsi VB sait que pour un vnement sur le Button1 , il
http://plasserre.developpez.com/v3-3.htm (3 sur 4) [01/03/2005 14:47:41]

Site

faut dclencher la Sub OnClique. (On reviendra sur cela)

Couleur transparent dans les images des boutons:


On a vu qu'on pouvait mettre une image dans un bouton , il faut pour cela donner la proprit Image le nom du fichier contenant l'image, ceci en mode Design. Mais l'image est souvent dans un carr et on voudrait ne pas voir le fond (rendre la couleur du fond transparente)

Voici l'image , je voudrais ne pas afficher le 'jaune' afin de voir ce qu'il y a derrire et donner

l'aspect suivant Dans Visual Basic 6.0, la proprit MaskColor tait utilise pour dfinir une couleur qui devait devenir transparente, permettant ainsi l'affichage d'une image d'arrire plan. Dans Visual Basic .NET, il n'existe pas d'quivalent direct de la proprit MaskColor!! Cependant, on peut ruser et dfinir la transparence: Dans le " Code gnr par le Concepteur Windows Form " aprs la dfinition du bouton ou dans Form_Load ajouter: Dim g As New System.Drawing.Bitmap(Button1.Image) g.MakeTransparent(System.Drawing.Color.Yellow) Button1.Image = g On rcupre le Bitmap de l'image du bouton , on indique que le jaune doit tre transparent, on remet le BitMap. Bien sur il y a intrt choisir une couleur (toujours la mme) qui tranche pour les fonds de dessin et ne pas l'utiliser dans le dessin lui mme.

http://plasserre.developpez.com/v3-3.htm (4 sur 4) [01/03/2005 14:47:41]

Site

Site

Cours : VB.net
Les TextBox .

3.4

Les contrles permettant de saisir du texte sont: Les TextBox Les RichTexteBox

Les contrles

TextBox.

Contrle qui contient du texte qui peut tre modifi par l'utilisateur du programme. C'est la proprit Text qui contient le texte qui a t tap par l'utilisateur.

Exemple hyper simple: Comment demander son nom l'utilisateur ? Il faut crer un label dont la proprit Text contient "Tapez votre nom:", suivi d'un TextBox nomm txtNom avec une proprit Text="" (Ce qui fait que la TextBox est vide), enfin un bouton nomm btOk dont la proprit Text="Ok".Cela donne:

Tapez votre nom:

Ok

txtNom.Select() dans Form_Load donne le focus la TextBox Une fois que l'utilisateur a tap son nom , il clique sur le bouton 'Ok': Dans btOk_Click il y a: Dim Nom As String Nom= txtNom.Text

http://plasserre.developpez.com/v3-4.htm (1 sur 9) [01/03/2005 14:47:43]

Site

La variable Nom contient bien maintenant le nom de l'utilisateur.

Un TextBox correspond un mini diteur de texte.(Mais sans enrichissement: sans gras, ni italique du moins pour tre exact, l'enrichissement affecte la totalit du texte et pas seulement une partie) La police de caractres affectant la totalit du texte peut simplement tre modifie par la proprit Font. La couleur du texte peut tre modifie par ForeColor, mais la totalit du texte aura la mme couleur.

La proprit .text permet aussi de modifier le texte visible dans le contrle. TextBox1.text= "Bonjour" Affiche Bonjour dans le contrle.

Parmi les multiples proprits de ce contrle, signalons : Multiline : autorise ou non lcriture sur plusieurs lignes. Scrollbars : fait figurer une barre de dfilement horizontale ou verticale (ou les deux) PaswordChar : crypte le texte entr sous forme dtoiles. MaxLength : limite le nombre de caractres quil est possible de saisir. TextBox1.MaxLength= 3 'limite la saisie 3 caractres. TextBox1.MaxLength= 0 'ne limite pas la saisie. TextLength donne la longueur du texte

En mode MultiLine la collection Lines contient dans chacun de ses lments une des lignes affiches dans le contrle: TexBox1.Lines(0) contient la premire ligne TexBox1.Lines(1) la seconde...

Les TextBox contiennent une mthode Undo:annulation de la dernire modification. La proprit CanUndo du TextBox doit tre True. Ensuite pour modifier: If textBox1.CanUndo = True Then textBox1.Undo() ' Vider le buffer Undo. textBox1.ClearUndo() End If Ajouter au texte: On peut ajouter du texte au texte dj prsent dans le TextBox

http://plasserre.developpez.com/v3-4.htm (2 sur 9) [01/03/2005 14:47:43]

Site

textBox2.AppendText(MonText) C'est quivalent textBox2.Text=textBox2.Text+MonText Evnements lis aux TextBox: KeyDown survient quand on appuie sur le touche. KeyPress quand la touche est enfonce. KeyUp quand on relche la touche. Ils surviennent dans cet ordre. KeyPress permet de rcuprer la touche tape dans e.KeyChar (mais pas F1, F2..) KeyDown et KeyUp permettent aussi de voir si MAJ ALT CTRL ont t presss. On peut rcuprer la touche presse (dans e.KeyChar), mais impossible d'en modifier la valeur (e.KeyChar est en lecture seule par exemple) Comment rcuprer la totalit du texte qui est dans le TextBox? T= textBox1.Text Comment mettre les lignes saisies par l'utilisateur dans un tableau ? Dim tempArray() as String tempArray = textBox1.Lines 'On utilise la collection Lines

Comment rcuprer la premire ligne ? T= textBox1.Lines(0)

Si une partie du texte est slectionne par l'utilisateur, on peut la rcuprer par: T= TexBox1.SelectedText

Pour slectionner une portion de texte on utilise: TextBox1.SelectionStart=3 'position de dpart TextBox1.SelectionLength=4 'nombre de caractre slectionn On peut aussi crire: TextBox1.Select(3,4) puis TexBox1.SelectedText="toto" 'remplace la slection par 'toto'

Comment positionner le curseur aprs le troisime caractre?

http://plasserre.developpez.com/v3-4.htm (3 sur 9) [01/03/2005 14:47:43]

Site

En donnant la proprit SelectionStart la valeur 3 TextBox1.SelectionStart=3 SelectionLength doit avoir la valeur 0

Comment interdire la frappe de certains caractres dans une TextBox? Exemple: Ne permettre de saisir que des chiffres. Pour cela il faut utiliser l'vnement KeyPress du textBox qui retourne un objet e de type KeyPressEventArgs. e.KeyChar contient le caractre press, mais il est en lecture seule!! on ne peut le modifier. Pour annuler la frappe (dans notre exemple si le caractre n'est pas un chiffre) il faut faire e.handled=True IsNumeric permet de tester si le caractre est numrique.

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If IsNumeric(e.KeyChar) Then e.Handled = False Else e.Handled = True End If End Sub Compter combien de fois on a tap certains caractres? Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress Select Case e.KeyChar ' Compte les backspaces. Case ControlChars.Back Nombrebackspace = Nombrebackspace + 1 ' Compte les 'ENTER' . Case ControlChars.Lf Nombrereturn = Nombrereturn + 1 ' Compte les ESC . Case Convert.ToChar(27) NombreEsc = NombreEsc + 1 ' Compte les autres. Case Else keyPressCount = keyPressCount + 1 End Select End Sub Petite parenthse: Pour comparer les caractres il y a 2 mthodes: if e.KeyChar=Convert.ToChar(27) then ou if AscW(e.Keychar)=27 then Diffrentes manires de rcuprer ce qui a t tap: On a vu que TextBox.text contient la totalit du texte; si on l'utilise dans l'vnement TextBox1_TextChanged, on rcupre le nouveau texte ds que l'utilisateur tap quelque chose.

http://plasserre.developpez.com/v3-4.htm (4 sur 9) [01/03/2005 14:47:43]

Site

TextBox1_KeyPress() TextBox1_KeyUp() permettent de rcuprer le caractre qui t tap.

Y a t-il un moyen de modifier le caractre tap? les proprits de e comme e.KeyChar (dans KeyPress) ou e.KeyCode, e.KeyData e.KeyValue dans les vnements KeyPress et KeyDown sont en lecture seule!!! Une solution est de modifier directement le texte: Exemple: Si l'utilisateur tape ',' afficher '.' la place. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress Dim pos As Integer pos = TextBox1.SelectionStart 'on mmorise la position du curseur If e.KeyChar = "," Then e.Handled = True 'on ne valide pas le caractre ',' qu n'apparatra pas. TextBox1.Text = TextBox1.Text.Insert(pos, ".")'on insre un '.' TextBox1.SelectionStart = pos + 1 'on avance le curseur d'un caractre End If End Sub

Autre solution?

Le contrle RichTextBox :
Si vous tes dbutant passer un rubrique suivante, vous reviendrez plus tard la gestion du code RTF.

Rich Text veut dire 'Texte enrichi' Le contrle RichTextBox permet d'afficher, d'entrer et de manipuler du texte mis en forme. Il effectue les mmes tches que le contrle TextBox, mais il peut galement afficher des polices, des couleurs et des liens, charger du texte et des images incorpores partir d'un fichier, ainsi que rechercher des caractres spcifiques.

Le contrle RichTextBox a les possibilits dun traitement de texte comme Word.

http://plasserre.developpez.com/v3-4.htm (5 sur 9) [01/03/2005 14:47:43]

Site

Qu'est ce que RTF?


Le format du texte que lon peut mettre dans une RichTextBox est le format RTF (Rich Text Format = Format de Texte Enrichi) Explication : un texte peu tre enregistr en brut (sans enrichissements) en RTF (Utilisable dans la plupart des traitements de texte), au format Word (.doc) Pour utiliser les fonctionnalits du RichTextBox il faut utiliser la proprit .Rtf Quand jaffecte un texte la proprit .Text il est affich tel quel, sans tenir compte de lenrichissement. Quand jaffecte un texte la proprit .Rtf du contrle pour lafficher, s'il contient des enrichissement au format RTF , lenrichissement est affich :

Les bases du codage RTF


Le texte doit dbuter par '{' et se terminer par '}', il peut aussi dbuter par "{\rtf1\ansi " Ensuite les enrichissements seffectuent par des balises qui indiquent le dbut et la fin de lattribut, une balise commence par le caractre '\' : Entre \b et \b0 le texte sera en gras (Bold) Exemple : Ajoute le texte "Ce texte est en gras." un contrle RichTextBox existant. RichTextBox1.Rtf = "{\rtf1\ansi Ce texte est en \b gras\b0.}"

Voici les principaux attributs : \b \i \par \f \plain \tab \fs \b0 \i0 ce qui est entre les 2 balises est en gras ce qui est entre les 2 balises est en italique fin paragraphe (passe la ligne) font \f1 .. \f0 font numro 1 entre les 2 balises

ramne les caractres par dfaut caractre de tabulation taille de caractre \fs28 = taille 28

Mettre un espace aprs la balise.

http://plasserre.developpez.com/v3-4.htm (6 sur 9) [01/03/2005 14:47:43]

Site

Comment afficher un texte enrichir?


RichTextBox1.RTF= T 'T tant le texte enrichi

Mettre un texte en couleurs, utiliser plusieurs polices :


Mettre la table des couleurs en dbut de texte : { \colortbl \red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;} Aprs Colortbl (Color Table) chaque couleur est code avec les quantits de rouge vert et bleue. Les couleurs sont repres par leur ordre: couleur 0 puis 1 puis 2.. et spares par un ';'

Dans notre exemple

couleur 0=noir; couleur 1=rouge; couleur 2=vert

Pour changer la couleur dans le texte on utilise \cf puis le numro de la couleur : \cf1 toto \cf0 } toto est affich en rouge.

Pour modifier les polices de caractre, le procd est similaire avec une Font Table : {\fonttbl {\fo\froman Symbol;} {\f1\fswiss Arial;} } Pour passer en Arial \f1 ..\f0

Exemple complet :
"{\rtf1\ansi { \colortbl \red0\green0\blue0; \red255\green0\blue0; \red0\green255\blue0;} {\fonttbl {\fo\froman Symbol;}
http://plasserre.developpez.com/v3-4.htm (7 sur 9) [01/03/2005 14:47:43]

Site

{\f1\fswiss Arial;} } Ce qui suit est en \f1 \cf1 \i Arial Rouge Italique \f0 \cf0 \i0 } Cela donne:

Nb : Si vous copier coller lexemple pour lessayer, enlever les sauts la ligne.

Comment modifier laspect du texte qui a t slectionn ?


On nest plus dans le cas ou on affiche demble la totalit du texte, mais dans le cas ou lutilisateur veut modifier son texte qui est dj dans le contrle. Exemple: Lutilisateur slectionne une portion du texte dans le contrle puis clique sur une bouton nomm Rouge pour mettre la slection en rouge. Dans BoutonRouge_Click() crire : RichTextBox1.SelectionColor = System.Drawing.Color.Red De mme pour modifier la police, la hauteur de la police, laspect gras ou non : RichTextBox1.SelectionFont = New Font("Tahoma", 12, FontStyle.Bold)

Enfin le texte peut tre enregistr dans un fichier :


richTextBox1.SaveFile(FileName, RichTextBoxStreamType.RichText) Si on remplace .RichText par .PlainText cest le texte brut et non le texte enrichi qui est enregistr Pour lire un fichier il faut employer .LoadFile avec la mme syntaxe.

Comment faire une recherche dans le texte?


La fonction Find permet de rechercher une chane de caractres dans le texte :
http://plasserre.developpez.com/v3-4.htm (8 sur 9) [01/03/2005 14:47:43]

Site

richTextBox1.Find(searchText, searchStart, searchEnd, RichTextBoxFinds.MatchCase) La mthode retourne l'emplacement d'index du premier caractre du texte recherch et met en surbrillance ce dernier ; sinon, elle retourne la valeur -1.

http://plasserre.developpez.com/v3-4.htm (9 sur 9) [01/03/2005 14:47:43]

Site

Site

Cours : VB.net
Les Labels

3.5

Il y a 2 sortes de Label: Les Label Les LinkLabel

Les labels.
On en a dj utilis pour afficher du texte non modifiable par l'utilisateur.
Les contrles Label sont gnralement utiliss pour fournir un texte descriptif un contrle. Vous pouvez par exemple utiliser un contrle Label pour ajouter un texte descriptif un contrle TextBox. Ceci a pour but d'informer l'utilisateur du type de donne attendu dans le contrle.

Exemple hyper simple: Comment indiquer l'utilisateur qu'il faut saisir son nom?

Donner votre nom:

La lgende qui s'affiche dans l'tiquette est contenue dans la proprit Text du label. Pour modifier le texte du label1 par du code: Label1.Text="Donner votre Prnom"

La proprit Alignement vous permet de dfinir l'alignement du texte dans l'tiquette (centr, droite, gauche), BorderStyle permet de mettre une bordure (un tour) ou non..

http://plasserre.developpez.com/v3-5.htm (1 sur 3) [01/03/2005 14:47:45]

Site

Label1.Text="Label avec une bordure et un fond jaune" Label1.BorderStyle=BorderStyle.FixedSingle Label1.ForeColor=Color.Red Label2.BackColor=Color.Yellow donne: Label avec une bordure et un fond jaune

Remarque: la plupart du temps les labels sont modifis en mode design, directement dans la fentre des proprits.

Il est galement possible dy afficher une image avec la proprit .Image

Remarque: La mise jour de l'affichage du Label (comme les autres contrles d'ailleurs) est effectue en fin de Sub: Si on crit: Dim i As Integer For i = 0 To 100 Label1.Text = i.ToString Next i

La variable i prend les valeurs 1 100, mais l'affichage rien ne se passe pendant la boucle, VB affiche uniquement 100 la fin; si on dsire voir les chiffres dfiler avec affichage de 0 puis 1 puis 2... il faut rafrachir l'affichage chaque boucle avec la mthode Refresh():

Dim i As Integer For i = 0 To 100 Label1.Text = i.ToString: Label1.Refresh() Next i

Les LinkLabel
Permettent de crer un lien sur un label

Text Indique le texte qui apparat. LinkArea dfini la zone de texte qui agira comme un lien; dans la fentre de proprit taper 11 ;4 (on verra que cest plus simple que de le faire par code)

http://plasserre.developpez.com/v3-5.htm (2 sur 3) [01/03/2005 14:47:45]

Site

Les 4 caractres partir du 11me seront le lien, ils seront souligns. Ne pas oublier comme toujours que le premier caractre est le caractre 0. Lvnement LinkClicked est dclench quand lutilisateur clique sur le lien. Dans cette procdure on peut permettre le saut vers un site Internet ou toute autre action. Exemple : LinkLabel1.text= "Visitez le site LDF" LinkLabel1.LinkArea = New System.Windows.Forms.LinkArea(11, 4) Pourquoi faire simple !! Cela affiche :

Si lutilisateur clique sur le mot site, la procdure suivante est dclenche : Private Sub LinkLabel1.LinkClicked End Sub

Il est possible de modifier la couleur du lien pour indiquer qu'il a t utilis: Si VisitedLinkColor contient une couleur couleur. e.visited=True modifie la

(e est l'lment qui a envoy l'vnement, j'en modifie la proprit Visited.)

On peut y inclure une action quelconque, en particulier un saut vers un site Web: System.diagnostics.Process.Start(" http://plasserre.developpez.com/ ") 'correspond au code qui ouvre un browser Internet (Internet Explorer ou Netscape) et qui charge la page dont l'adresse est indique.

La collection Links permet dafficher plusieurs liens dans un mme texte, mais cela devient vite trs compliqu.

http://plasserre.developpez.com/v3-5.htm (3 sur 3) [01/03/2005 14:47:45]

Site

Site

Cours : VB.net
Les Cases cocher

3.6

Il y a 2 sortes de case cocher: Les CheckBox. Les RadioButton.

Les " cases cocher " (CheckBox): Elles sont carres, et indpendantes les unes des autres, si l'utilisateur coche une case , cela n'a pas d'influence sur les autres cases du formulaire, qu'elles soient regroupes dans un cadre pour faire plus joli ou non. Les " boutons radio " (RadioButton): Ils sont ronds et font toujours partie dun groupe (Ils sont dans une fentre ou dessins dans un objet GroupBox ). Ce groupe est indispensable, car au sein dun groupe de RadioButton, un seul bouton peut tre coch la fois : si lutilisateur en coche un, les autres se dcochent.

http://plasserre.developpez.com/v3-6.htm (1 sur 3) [01/03/2005 14:47:47]

Site

Il faut regrouper les radios boutons dans des 'GroupBox' par exemple pour rendre les groupes indpendants:

Ici si je clique sur le bouton 'OUI' droite, cela dcoche 'NON' mais n'a pas d'influence sur le cadre Format

La proprit Text, bien sur, permet dafficher le libell cot du bouton, on peut aussi mettre une image avec la proprit Image. CheckAlign permet de mettre la case cocher droite ou gauche du texte, TextAlign permet d'aligner le texte.
Exemple pour le bouton en haut droite. RadioButton3.Text="OUI" RadioButton3.TextAlign= MiddleCenter 'Middle=hauteur, center = horizontale RadioButton3.CheckAlign=MiddleRight

La proprit la plus intressante de ces cases est celle qui nous permet de savoir si elle est coche ou non. Cette proprit sappelle Checked. Sa valeur change de False True si la case est coche.
RadioButton.Checked=True 'Coche le bouton

http://plasserre.developpez.com/v3-6.htm (2 sur 3) [01/03/2005 14:47:47]

Site

If RadioButton.Checked=True coch. End If

Then ' Teste si le bouton est

La procdure RadioButton.CheckedChange() permet dintercepter le changement dtat dun bouton.

Pour le CheckButton TreeState permet de dfinir 3 tats au lieu de 2 (coch, indtermin=gris, non coch) CheckedState indique un des 3 tats (alors que Checked nen indique que deux.)

Appearance peut aussi donner une apparence de bouton la case cocher. Il est enfonc ou pas en fonction de la valeur de Checked.

Ici les 2 boutons ont une Appearance=Button , celui du haut n'est pas coch, l'autre est coch (enfonc).

http://plasserre.developpez.com/v3-6.htm (3 sur 3) [01/03/2005 14:47:47]

Site

Site

Cours : VB.net
Les Contrles 'liste'

3.7

Il y a 4 sortes de listes: Les ListBox. Les CheckedListBox Les Combos Les ListView.

Les 'ListBox'
Le contrle ListBox affiche une liste d'lments (d'objets) dans laquelle l'utilisateur peut faire un ou plusieurs choix.

La liste contient

"tarte", "poisson", "viande", "lgumes", "sauces".

Ici l'lment "poisson" est slectionn, il est en bleu.

La listBox contient une collection d'"Item": Elle na pas de nombre initialement dfini dlment. Si j'ajoute un lment la ListBox, cela ajoute un lment la collection Items

http://plasserre.developpez.com/v3-7.htm (1 sur 9) [01/03/2005 14:47:49]

Site

Items est une collection contenant tous les lments (les objets) chargs dans la liste. ListBox1.Items est la collection du contrle ListBox1 La proprit Items.Count indique le nombre d'lments contenus dans la liste . Attention le premier lment est toujours llment 0, aussi le nombre dlments est gal au numro de l'lment le plus haut plus un.

Pour ajouter ou supprimer des lments dans un contrle ListBox: Utilisez la mthode Items.Add, Items.Insert, Items.Clear ou Items.Remove. En mode conception, vous pouvez galement utiliser la proprit Items.

Exemples : Vider la ListBox: ListBox1.Items.Clear()

Ajouter l'lment "poisson" ListBox1.Items.Add("poisson") Ajouter '4' ListBox1.Items.Add(4.Tostring)

ou
ListBox1.Items.Add(4) 'accept car les items sont des objets. Insrer 'lulu en 4me position ListBox1.Items.Insert(4, "lulu") Les listBox acceptent des objets, elles affichent gnralement ce qu'il y a dans la proprit 'Text' de l'objet.

Charger dans une ListBox1 les nombres de 1 100 :

For i = 1 To 100
ListBox1.Items.Add(i.ToString)

http://plasserre.developpez.com/v3-7.htm (2 sur 9) [01/03/2005 14:47:49]

Site

Next i

Comment enlever des lments? ' Enlever l'lment d'index 5: ListBox1.Items.RemoveAt(5) ' Enlever l'lment slectionn: ListBox1.Items.Remove(ListBox1.SelectedItem) ' Enlever l'lment "Tokyo": ListBox1.Items.Remove("Tokyo")

Comment lire l'lment 3? T=ListBox1.Items(3).ToString

Comment rechercher l'lment qui contient une chane de caractres? List1.FindString("pa") commenant par 'pa'. retourne le numro du premier lment

x=List1.FindString("pa",12) retourne le numro de l'lment commenant par 'pa' en cherchant partir du 12 me lment. x=List1.FindStringExact("papier") 'permet de rechercher l'lment correspondant exactement la chane

Comment slectionner un lment par code? ListBox1.SetSelected(x, True)

Lutilisateur double-clique sur un des lments, comment rcuprer son numro ? Grce SelectedIndex. Private Sub ListBox_DoubleClick. N=ListBox1.SelectedIndex End If N contient le numro de llment slectionn. Attention comme dhabitude, si je slectionne 3 cest en faite llment numro 2. SelectedIndex retourne donc un entier correspondant l'lment slectionn dans la zone de liste. Si aucun lment n'est slectionn, la valeur de la proprit SelectedIndex est gale -1. La proprit SelectedItem retourne l'lment slectionn ("poisson" dans l'exemple si dessus).

Et la multi slection, quelles lments ont t slectionns?

http://plasserre.developpez.com/v3-7.htm (3 sur 9) [01/03/2005 14:47:49]

Site

La proprit SelectionMode indique le nombre d'lments pouvant tre slectionns en mme temps. Lorsque plusieurs lments sont slectionns, la valeur de la proprit SelectedIndex correspond au rang du premier lment slectionn dans la liste. Les collections SelectedItems et SelectedIndices contiennent les lments et les numros d'index slectionnes.

Si la proprit Sorted est True, la liste est trie automatiquement.

On peut 'charger' une ListBox automatiquement avec un tableau en utilisant Datasource: Dim LaList() As String = {"one", "two", "three"} ListBox1.DataSource = LaList On peut aussi utiliser AddRange: Dim Ite(9) As System.Object Dim i As Integer For i = 0 To 9 Ite(i) = "Item" & i Next i ListBox1.Items.AddRange(Ite)

Comment connatre l'index de l'lment que l'on vient d'ajouter? (et le slectionner) Dim x As Integer x = List1.Items.Add("Hello") List1.SelectedIndex = x On utilise la valeur retourne (x dans notre exemple) par la mthode Add. (NewIndex n'existe plus en VB.NET)

Comment affecter chaque lment de la liste un numro, une cl? Exemple : je charge dans une ListBox la liste des utilisateurs mais quand on clique sur la liste, je veux rcuprer le numro de l'utilisateur. Comment donc, chaque lment de la listbox, donner un numro (diffrent de l'index). En VB6 on utilisait une proprit (ListBox.ItemData()) pour lier

http://plasserre.developpez.com/v3-7.htm (4 sur 9) [01/03/2005 14:47:49]

Site

chaque lment de la listBox un nombre (une en VB.Net!!

cl); cela n'existe plus

Il faut utiliser les fonctions de compatibilit: VB6.SetItemData(ListBox1, 0, 123) 'pour lier l'lment 0 la valeur 123. C'est pas simple!! Une alternative, pas trs lgante: Ajouter l'lment "toto"+chr$(9)+chr$(9)+ cl (cl n'est pas visible car les caractres tabulation l'ont affiche hors de la listbox) Quand l'utilisateur clique sur la ligne, on rcupre la partie droite donc la cl.

Quand on charge une ListBox directement avec une base de donnes, il y a une solution pour grer une cl.

Lorsque la proprit MultiColumn a la valeur true, la liste saffiche avec une barre de dfilement horizontale. Lorsque la proprit ScrollAlwaysVisible a la valeur true, la barre de dfilement s'affiche, quel que soit le nombre d'lments.

CheckedListBox
Cest une Listbox mais avec une case cocher sur chaque ligne.

Attention : SelectedItems et SelectedIndices ne dterminent pas les lments qui sont cochs, mais ceux qui sont en surbrillance. La collection CheckedItems vous donne par contre les lments cochs. La mthode GetItemChecked (avec comme argument le numro d'index) dtermine si llment est coch. Exemple : Pour dterminer les lments cochs dans un contrle CheckedListBox : Tester chaque lment de la collection CheckedItems, en commenant par 0. Notez que cette mthode fournit le numro que porte l'lment dans la liste des lments cochs, et non dans la liste globale. Par consquent, si le premier lment de la liste n'est pas coch alors que le deuxime l'est, le code ci-dessous affiche une chane du type Item coch 1 = Dans la liste : 2 .

If CheckedListBox1.CheckedItems.Count <> 0 Then 'Sil y a des lments cochs une boucle balaye les
http://plasserre.developpez.com/v3-7.htm (5 sur 9) [01/03/2005 14:47:49]

Site

lments cochs '(collection CheckedItems) et affiche le numro de llment DANS LA LISTE toutes lignes. Dim x As Integer Dim s As String = "" For x = 0 To CheckedListBox1.CheckedItems.Count - 1 s = s & "Item coch " & (x+1).ToString & " = " & Dans la liste : & CheckedListBox1.CheckedItems(x).ToString & ControlChars.CrLf Next x MessageBox.Show(s) End If
On rappelle comme toujours que quand on parle du 3eme lment cela correspond lindex 2.

Les ComboBox
Les listes Combo (Liste combin) possdent deux caractristiques essentielles par rapport aux ListBox. Elles sont modifiables : cest--dire que lutilisateur a la possibilit dentrer un lment qui ne figure pas au dpart dans la liste. Cette caractristique concerne donc les donnes proprement dites ; cela se traduit par la prsence dune zone de texte en haut de la liste. Elles peuvent tre droulantes ou dj droule: cest-dire quon ne voit quun seul lment de la liste la fois, et quil faut cliquer sur la flche du ct pour " dplier " la liste, ou bien que la liste est dj visible. Cest la proprit DropDownList qui gre cela.

La combos du bas a sa DropDownList=Simple

Lutilisateur peut donc cliquer dans la liste (ce qui met le texte cliqu dans la zone texte), ou taper un nouveau texte.

Items.Add (mthode) ajoute un lment une liste. Items.Clear (mthode) efface tous les lments dune
http://plasserre.developpez.com/v3-7.htm (6 sur 9) [01/03/2005 14:47:49]

Site

liste Items.Count dune liste Multiselect Item.Remove Sorted

(proprit) renvoie le nombre dlments (proprit) permet la slection multiple (mthode) supprime un lment de la liste (proprit) trie les lments dune liste

Comment rcuprer la zone texte quand elle change ? Elle est dans la proprit Text.
On utilise l'vnement TextChanged qui se dclenche quand le texte est modifi.

Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged Label1.Text = ComboBox1.Text End Sub

Le Contrle ListView :
De plus en plus puissant, le contrle ListView permet dafficher des listes multi colonnes, ou des listes avec icne ou case cocher. En mode conception : La proprit View permet de dterminer laspect gnral du contrle, elle peut prendre les valeurs : Details permet une liste avec sous lments et titre de colonnes. Liste utilise un ascenseur horizontal. LargeIcon SmallIcone Par programmation cela donne : ListView1.View= View.Details Utilisons le mode dtails (Appel mode Rapport)

http://plasserre.developpez.com/v3-7.htm (7 sur 9) [01/03/2005 14:47:49]

Site

Comment

remplir les en-ttes de colonnes?

En mode conception il y a une ligne Columns, le fait de cliquer sur le bouton dexpansion () ouvre une fentre, cliquer sur Ajouter permet dajouter une colonne ; la proprit Text permet de donner un libell qui apparatra en haut de la colonne. On peut ainsi nommer les 3 colonnes ( Nombre , Carr , Cube dans notre exemple) Par programmation cela donne : ListView1.Colonns.Add ( Nombre , 60, HorizontalAlignment.Left) .. Pour remplir le tableau, on pourrait, sur la ligne Items de la fentre des proprits, cliquer sur et rentrer les valeurs la main.

En pratique on cre les colonnes, le nom des colonnes en mode conception, on remplit le tableau par programmation : Exemple : Faire un tableau de 3 colonnes, mettre les nombres de 1 100 dans la premire, leur carr dans la seconde, leur cube dans la troisime. Pour chaque ligne je cre un objet ListViewItem, sa proprit Text contient le texte de la premire colonne ; jajoute cet objet des SubItems qui correspondent aux colonnes suivantes. Enfin jajoute le ListViewItem au contrle ListView. Dim i As Integer For i = 1 To 100 Dim LVI As New ListViewItem LVI.Text = i.ToString LVI.SubItems.Add((i * i).ToString) LVI.SubItems.Add((i * i * i).ToString)

http://plasserre.developpez.com/v3-7.htm (8 sur 9) [01/03/2005 14:47:49]

Site

ListBox1.Items.Add(LVI) Next i

Comment intercepter le numro de la ligne qui a t clique par lutilisateur (et lafficher)? Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click Label1.Text = ListBox1.SelectedIndices(0).ToString End Sub Si la proprit MultiSelect est False il y a, bien sur, une seule ligne slectionne, sinon les lignes slectionnes sont dans la collection SelectedIndices(). Si on voulait rcuprer le texte de la ligne slectionne, il aurait fallu utiliser : ListBox1.SelectedItems(0)

Si la proprit GridLine est True, des lignes matrialisant les cases apparaissent. Si la proprit CheckedBox est True , des cases cocher apparaissent. Attention : si la somme des colonnes est plus large que le contrle, un ascenseur horizontal apparat !! Pour ne pas voir cet ascenseur, ruser sur la largeur des colonnes (cest le 2eme paramtre de la mthode .Columns.Add)

http://plasserre.developpez.com/v3-7.htm (9 sur 9) [01/03/2005 14:47:49]

Site

Site

Cours : VB.net
Les fentres toutes faites.

3.8

Il existe : Les MessageBox. Les InputBox

Ces

fentres toutes faites

facilitent le travail :

MessageBox :
Ouvre une fentre qui prsente un message.

Cest une fonction qui affiche un message dans une bote de dialogue, attend que l'utilisateur clique sur un bouton (Ok ou Oui-Non..), puis retourne une information qui indique le bouton cliqu par l'utilisateur.

Reponse= MessageBox.show(TexteAAfficher,Titre, TypeBouton etIcone, BoutonParDfaut) Exemple:

http://plasserre.developpez.com/v3-8.htm (1 sur 7) [01/03/2005 14:47:51]

Site

Paramtres
TexteAAfficher Obligatoire. Expression String affiche comme message de la bote de dialogue (longueur maximale 1 024 caractres). N'oubliez pas d'insrer un retour chariot si le texte est long, cela cre 2 lignes. Titre Expression String affiche dans la barre de titre de la bote de dialogue. Si l'argument Titre est omis, le nom de l'application est plac dans la barre de titre.

TypeBouton et Icons Expression numrique qui reprsente la somme des valeurs spcifiant -le nombre et le type de boutons afficher : MessageBoxButtons.OKOnly MessageBoxButtons.YesNo Non MessageBoxButtons.OkCancel MessageBoxButtons.AbortRetryIgnore Recommence Ignore .. -le style d'icne utiliser : MessageBox.Icons.Critical MessageBox.Icons.Exclamation MessageBox.Icons.Question MessageBox.Icons.Information L'identit du bouton par dfaut MessageBox.DefaultButtons.DefaultButton1 MessageBox.DefaultButtons.DefaultButton2 Un seul bouton Ok Deux boutons Oui

Ok et Annuler Annule

http://plasserre.developpez.com/v3-8.htm (2 sur 7) [01/03/2005 14:47:51]

Site

Retour de la fonction : Retourne une constante qui indique quel bouton t press. DialogResult.Yes DialogResult.No DialogResult.Cancel DialogResult.Retry DialogResult.Ok

Lancienne syntaxe VB avec MsgBox est conserve :

Reponse= MsgBox(TexteAAfficher, TypeBouton, Titre) Dans ce cas il faut utiliser MsgBoxStyle MggBoxIcons et MsgBoxResult pour le retour. De plus les arguments ne sont pas dans le mme ordre!! Il est conseill dutiliser MessageBox.Show ( qui est VB.NET) plutt que MsgBox qui est de la compatibilit avec VB Exemple : Reponse=MessageBox.Show(Bonjour) Affiche le message Bonjour avec un simple bouton Ok Cela sert fournir un message lutilisateur sans attendre de choix de sa part. Autre exemple en ancienne syntaxe : R=MsgBox("Continuer"& chr$(13)& "lapplication?", MsgBoxStyle.YesNo, "Attention" Affiche une MessageBox avec dans la barre de titre Attention Affiche dans la boite :
http://plasserre.developpez.com/v3-8.htm (3 sur 7) [01/03/2005 14:47:51]

Site

Continuer lapplication (sur 2 lignes)

La boite a 2 boutons : Oui Non

Exemple complet : Dim msg As String Dim title As String Dim style As MsgBoxStyle Dim response As MsgBoxResult msg = "Voulez vous continuer?" ' Dfinition du message afficher. style = MsgBoxStyle.DefaultButton2 Or _ MsgBoxStyle.Critical Or MsgBoxStyle.YesNo 'On affiche Oui Non title = "MsgBox Dmonstration" ' Dfinition du titre. ' Affiche la boite MsgBox. response = MsgBox(msg, style, title) If response = MsgBoxResult.Yes Then ' Lutilisateur a choisi Oui. ' code si lutilisateur cliquer sur Oui Else ' code si lutilisateur cliquer sur No. End If
Voila ce que cela donne:

On remarque que dans lexemple, on cre des variables dans lesquelles on met le texte ou les constantes adquates, avant dappeler la fonction MsgBox.

InputBox
http://plasserre.developpez.com/v3-8.htm (4 sur 7) [01/03/2005 14:47:51]

Site

C'st

une fonction qui permet douvrir une fentre qui pose une question : Elle retourne la rponse tape par lutilisateur:

Le retour est effectu dans une variable String.

Dim Nom As String Nom = InputBox("Bonjour","Tapez votre nom ?") Cela donne :

On pourrait rajouter un 3eme argument=la rponse par dfaut. Si lutilisateur clique sur le bouton annuler, une chane vide est retourne.

OpenFileDialog
Comment afficher une boite de dialogue permettant de slectionner un fichier (ou des fichiers) ouvrir par exemple ? Dans la boite Outils, cliquez sur OpenFileDialog puis cliquez sur la fentre en cours : un contrle OpenFileDialog1 apparat sous le fentre.
Ouvre une boite de dialogue permettant de choisir un nom et un chemin de fichier, au programmeur d'crire le code lisant les fichiers.

http://plasserre.developpez.com/v3-8.htm (5 sur 7) [01/03/2005 14:47:51]

Site

Dans le code lendroit ou doit souvrir la tapez : OpenFileDialog1.ShowDialog()

fentre,

Cest suffisant pour crer une fentre montrant larborescence des fichiers et rpertoires et pour que l'utilisateur choisisse un fichier, mais le plus souvent on a besoin que la boite de dialogue propose un type de fichier et un rpertoire prcis. Par exemple je veux ouvrir un fichier .TXT dans le rpertoire c:\MesTextes Il faut dans ce cas, AVANT le ShowDialog renseigner certaines proprits du contrle OpenFileDialog1 : With OpenFileDialog1
.Filter="Fichiers txt|*.txt" ' on travaille uniquement sur les .txt 's'il y a plusieurs filtre les sparer par | .Multiselect=False .CheckFileExists=True pas. 'Permet d'ouvrir uniquement un fichier qui existe End With Comment afficher la boite et vrifier si l'utilisateur cliqu sur ouvrir? If 'slectionner 1 seul fichier 'Message si nom de fichier qui n'existe

OpenFileDialog1.ShowDialog= DialogResult.Ok Then

end if

OpenFileDialog1.FileName contient le nom du fichier slectionn (avec extension et chemin)


Maintenant, Path.GetFileName(OpenFileDialog1.FileName)

donne le nom du

fichier sans chemin.

SaveFileDialog
Boite de dialogue fonctionnant de la mme manire que OpenFileDialog
http://plasserre.developpez.com/v3-8.htm (6 sur 7) [01/03/2005 14:47:51]

Site

mais avec quelques proprits spcifiques. Ouvre une boite de dialogue permettant l'utilisateur de choisir un nom et un chemin de fichier, au programmeur d'crire le code enregistrant les fichiers. SaveFileDialo1.CreatePrompt= True ' Message de confirmation si 'cration d'un nouveau fichier SaveFileDialo1.OverwritePrompt=True 'Message si le fichier existe dj 'vite l'effacement d'ancienne donnes SaveFileDialo1.DefaultExt="txt" 'extension par dfaut

On rcupre aussi dans .FileName le nom du fichier si la proprit .ShowDialog retourn DialogResult.Ok.

Il existe aussi:

LoadDialog PrintDialog

http://plasserre.developpez.com/v3-8.htm (7 sur 7) [01/03/2005 14:47:51]

Site

Site

Cours : VB.net

Regroupement 3.9 de contrles.


On peut regrouper des contrles dans : Les GroupBox. Les Panels. Les PictureBox. Les TabControl.

GroupBox et Panel
Il est possible de regrouper des contrles dans un container, on peut par exemple regrouper plusieurs RadioButton. Le container peut tre un GroupBox ou un Panel.

GroupBox
BorderStyle=Single

Panel avec AutoScroll =True et

http://plasserre.developpez.com/v3-9.htm (1 sur 4) [01/03/2005 14:47:53]

Site

Pour l'utilisateur, le fait que toutes les options soient regroupes dans un panneau est un indice visuel logique (Tous les RadioButton permettrons un choix dans une mme catgorie de donnes). Au moment de la conception, tous les contrles peuvent tre dplacs facilement ; si vous dplacez le contrle GroupBox ou Panel, tous les contrles qu'il contient sont galement dplacs. Les contrles regroups dans un panneau ou un GroupBox sont accessibles au moyen de la proprit Controls du panneau. Le contrle Panel est similaire au contrle GroupBox ; mais, seul le contrle Panel peut disposer de barres de dfilement et seul le contrle GroupBox peut afficher une lgende. La lgende de la GroupBox est dfinie par la proprit Text. Pour faire apparatre les barres de dfilement dans le Pannel mettre AutoScroll =True et AutoScrollMinSize =100;100 Dans un Panel, pour afficher des barres de dfilement, attribuez la proprit AutoScroll la valeur true.. La proprit BorderStyle dtermine si la zone est entoure d'une bordure invisible (None), d'une simple ligne (FixedSingle) ou d'une ligne ombre (Fixed3D).

Comment crer un contrle Panel ?


Faites glisser un contrle Panel de l'onglet Windows Forms de la bote outils jusqu' un formulaire. Ajoutez des contrles au panneau en les dposant dans le panneau. Si vous voulez mettre dans le panneau des contrles existants, slectionnez-les tous, coupez-les dans le Pressepapiers, slectionnez le contrle Panel et collez-les.

PictureBox
Le contrle PictureBox peut afficher une image mais peu aussi servir de conteneur d'autres contrles.
Retenons la notion de conteneur qui est le contrle parent.

http://plasserre.developpez.com/v3-9.htm (2 sur 4) [01/03/2005 14:47:53]

Site

TabControl
Ce contrle permet de crer des onglets comme dans un classeur, onglets entirement grs par VB. Chaque page peut contenir d'autres contrles. En mode conception, en passant par la proprit TabPages, on ajoute des onglets dont la proprit Text contient le texte afficher en haut (Ici: Page 1..). il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrles.

En mode run les onglets fonctionnent automatiquement: cliquez sur Page 2 affiche la page correspondante (et dclenche l'vnement Click de cet objet TabPage).. La proprit Alignment permet de mettre les onglets en haut, en bas, droite, gauche.

Evnement commun.
Exemple: 3 cases cocher permettent de colorer un label en vert rouge ou bleu. Comment grer les vnements? On peut crire 3 routines compltes pour chaque case cocher. Il est aussi toujours possible dans chacune des 3 procdures CouleurX.checkedChanged de vrifier si la case est coche et de modifier la couleur. C'est plus lgant d'avoir une procdure unique qui, en fonction de la case cocher qui a dclench l'vnement, change la couleur. On dsire donc parfois que l'vnement de plusieurs contrles diffrents soit dirig sur une seule et mme procdure. Mais, la notion de groupe de contrle plus!!! comme en VB6 n'existe

Par contre par l'intermdiaire du Handles, il est possible d'associer plusieurs vnements une seule procdure:

http://plasserre.developpez.com/v3-9.htm (3 sur 4) [01/03/2005 14:47:53]

Site

Private Sub CouleurCheckedChanges (ByVal sender As System.Objet, ByVal e As System.EventArgs) Handles CouleurVert.CheckedChanged, CouleurRouge.CheckedChanged, CouleurBleu.CheckedChanged

End Sub Cette procdure est active quand les case cocher CouleurVert CouleurBleu, CouleurRouge changent d'tat. A noter que Sender est le contrle ayant dclench l'vnement et e l'vnement correspondant. Pour modifier la couleur il faut ajouter dans la procdure: Select Case sender.Name Case "CouleurRouge" Lbl.BackColor= ..Rouge ..... Je ne suis pas certain que cela fonctionne, il faut plutt mettre: Select Case sender Case CouleurRouge

Enfin la ligne suivante marche ! If sender Is CouleurRouge Then...

http://plasserre.developpez.com/v3-9.htm (4 sur 4) [01/03/2005 14:47:53]

Site

Site

Cours : VB.net

Positionnons 3.10 les contrles.


On peut Dimensionner les contrles : Les positionner.

Tous les contrles hritent donc tous de la classe Windows Forms.


Les contrles ont tous

des proprits communes.

Unit de mesure :
L'unit de mesure est le 'Pixel' twips) (Picture Elment).(plus de

Les coordonnes d'un contrle se dfinissent partir du coin suprieur gauche du conteneur.

http://plasserre.developpez.com/v3-10.htm (1 sur 5) [01/03/2005 14:47:55]

Site

Pour la taille :
On peut utiliser:

Left, Top coordonnes du coin suprieur gauche et Bottom, Right infrieur droit. Location : coordonnes X,Y du coin suprieur droit du contrle en pixels. Height, Width pour la hauteur et la largeur du contrle en pixels. Size : hauteur, largeur peuvent aussi tre utilises. Exemple : Button.left=188 Button.Top =300 Ou Button.Location= New System.Drawing.Point(188,300) System.Drawing.Point() positionne un point dans lespace.

En mode conception il est bien plus simple de dimensionner les contrles la main dans la
http://plasserre.developpez.com/v3-10.htm (2 sur 5) [01/03/2005 14:47:55]

Site

fentre Design.

Pour le redimensionnement de fentre : Pour que lutilisateur puisse redimensionner la fentre(en cliquant sur les bords) il faut que la proprit FormBorderStyle de la fentre = Sizable. Mais si lutilisateur modifie la taille de la fentre qui contient les contrles, la taille des contrles ne suit pas. (Avant cette version VB.net, il fallait dans lvnement Form_Resize, dclench par la modification des dimensions de la fentre, crire du code modifiant les dimensions et positions des contrles afin quils sadaptent la nouvelle fentre) En VB.Net cest plus simple grce :

Anchor :
Permet dancrer les bords. Un bord ancr reste gale distance du bord du conteneur quand le conteneur (la fentre) est redimensionn. En mode conception il suffit de cliquer sur '. . .' en face de Anchor pour voir souvrir une fentre, cliquer sur les bords que vous voulez ancrer. Par dfaut les bords Top (haut) et left(gauche) sont ancrs. Expliquons !! Left est ancr, si je dplace le bord droit de la fentre, le contrle nest pas dplac car la distance bord gauche de la fentre et bord gauche du contrle est fixe. Par contre si je dplace le
http://plasserre.developpez.com/v3-10.htm (3 sur 5) [01/03/2005 14:47:55]

Site

bord gauche de la fentre, le contrle suit. Exemple : Prenons 2 contrles dans une fentre,celui de gauche a Anchor =left et celui de droite left et right. Si je dplace le bord droit (ou le gauche dailleurs) : le contrle droit est redimensionn, les 2 contrles restent cote cote.

Dock
Amarre aux bords. Il y a mme possibilit damarrer aux 4 bords (Fill) pour remplir le conteneur, et de modifier la proprit DockPaddind afin se sloigner lgrement des bords pour faire joli.

Spliter
Le contrle Splitter sert redimensionner des contrles moment de l'excution par l'utilisateur. au

http://plasserre.developpez.com/v3-10.htm (4 sur 5) [01/03/2005 14:47:55]

Site

Le contrle Splitter est utilis dans les applications dont les contrles prsentent des donnes de longueurs variables, comme l'Explorateur Windows. Pour permettre un utilisateur de redimensionner un contrle ancr au moment de l'excution, ancrer le contrle redimensionner au bord d'un conteneur, puis ancrez un contrle Splitter sur le mme ct de ce conteneur.

http://plasserre.developpez.com/v3-10.htm (5 sur 5) [01/03/2005 14:47:55]

Site

Site

Cours : VB.net
MainMenu

3.11 ContextMenu.
Main Menu
On peut ajouter un menu dans une fentre.

Beaucoup dapplications contiennent un menu. Exemple de menu : Fichier Ouvrir Fermer Imprimer Quitter Edition Couper Copier Coller ..

http://plasserre.developpez.com/v3-11.htm (1 sur 3) [01/03/2005 14:47:57]

Site

On remarque que le contenu des menus est standardis afin que lutilisateur sy retrouve sans aide (Lutilisateur lit, mon avis, rarement les aides !!) Comment crer un menu ? En allant dans la boite outils, chercher un main menu et en le dposant sur la fentre : il apparat en dessous de la fentre. Pour dessiner le menu, il suffit de mettre le curseur sur le menu en haut de la fentre, ou est crit Taper ici : tapez le texte du menu, (Fichier par exemple).

Il apparat automatiquement un Tapez Ici pour les lignes dessous ou le menu suivant. Les lignes du menu sont nommes automatiquement MenuItem1, MenuItem2.. Quand le curseur est sur une ligne du menu,la fentre de proprit donne les proprits de la ligne : La proprit ShortKey permet de crer un raccourci. La proprit Checked La proprit Visible ou non une ligne. permet de cochez la ligne permet de faire apparatre

Si vous double-cliquez sur la ligne du menu vous voyez apparatre : Private Sub MenuItem1_Click(ByVal sender As
http://plasserre.developpez.com/v3-11.htm (2 sur 3) [01/03/2005 14:47:57]

Site

System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click End Sub Cest la procdure vnement lie la ligne du menu. Quand lutilisateur clique sur une ligne du menu cest le code contenu dans cette procdure qui est effectu.

Menu Contextuel
C'est un menu qui s'ouvre quand, le curseur de l'utilisateur est sur un objet, et qu'il clique sur le bouton droit de la souris.

En allant dans la boite outils, chercher un Context menu, on le dpose sur la fentre : il apparat en dessous de la fentre.
Si on le slectionne avec la souris, il apparat en haut et comme pour le menu principal, on peut ajouter des lignes. Il faut ensuite affecter ce Context Menu un contrle; pour cela donner la proprit ContextMenu du contrle le nom du ContextMenu. TextBox1.ContextMenu= ContextMenu1

Si vous double-cliquez sur une ligne du menu vous voyez apparatre les procdures vnement correspondantes.

http://plasserre.developpez.com/v3-11.htm (3 sur 3) [01/03/2005 14:47:57]

Site

Site

Cours : VB.net

Avoir le 3.12 Focus.


Nous allons tudier comment un objet de l'interface devient 'actif'. Lorsqu'une fentre ou un contrle est actif on dit qu'il a le focus. Si une fentre prend le focus, sa barre de titre en haut prend la couleur active, si c'est un contrle texte, le curseur apparat dedans.

Comment donner le focus une fentre ?


Si une fentre est visible la mthode Activate lui donne le focus. Form1.Activate() Dans ce cas l'vnement Form1_Activated survient. La mthode Desactivate est dclench quand la fentre perd le focus.

Comment donner le focus un contrle


http://plasserre.developpez.com/v3-12.htm (1 sur 5) [01/03/2005 14:47:58]

Site

?
Avec la mthode Focus TxtNom.Focus() Avec

la mthode Select:

TxtNom.Select() 'donne le focus la zone de texte Txnom et met le curseur dedans. On peut la surcharger et en plus slectionner une portion du texte: TxtNom.Select(2,3) 'donne le focus et slectionne 3 caractres partir du second. ou forcer ne rien slectionner (second argument 0).

On peut interdire a un contrle le focus en donnant la valeur False sa proprit CanFocus. Aussi avant de donner le focus il est prfrable de vrifier s'il peut le prendre: If TxtNom.CanFocus then TxtNom.Focus() End If L'vnement GotFocus se produit quand le contrle prend le focus. Private Sub TxtNom_GotFocus.. End Sub

Cascade d'vnement quand on prend ou on perd le focus:


http://plasserre.developpez.com/v3-12.htm (2 sur 5) [01/03/2005 14:47:58]

Site

Il se dclenche dans l'ordre:

Enter Se produit quand l'utilisateur entre dans le contrle. GotFocus Se produit quand le contrle prend le focus. Leave Se produit quand le focus quitte le contrle. Validating Se produit lorsque le contrle est en cours de validation. On va quitter le contrle, il fau vrifier la validit avant. La validation c'est vous qui devez la faire!!! Pour un bouton par exemple se produit lorsque l'on quitte le bouton, cela permet de contrler la validit de certaines donne et si ncessaire d'interdire de quitter le contrle si certaines conditions ne sont pas remplies: Private Sub Button1_Validating ((ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Button1.Validating If condition then e.Cancel = True 'Annuler la perte du focus: le focus reste sur Button1 End If End Sub

Validated

http://plasserre.developpez.com/v3-12.htm (3 sur 5) [01/03/2005 14:47:58]

Site

Se produit lorsque le contrle termin sa validation LostFocus L'vnement LostFocus se produit quand le contrle perd le focus.

Si la proprit CauseValidating du contrle a la valeur false, les vnements Validating et Validated sont supprims. Les vnements Enter et Leave sont supprims dans les formulaire (fentres) Les vnements quivalents dans la classe Form sont les vnements Activated et Desactivate.

Certains contrles ne peuvent pas avoir le focus, comme les labels par exemple.

Usage du clavier pour passer d'un contrle l'autre.


Dans une application o un utilisateur tape beaucoup de donnes dans de multiples contrles, il passe souvent d'un contrle (TextBox par exemple) au suivant avec la touche TAB.

|
Comment permettre cela? Chaque contrle une proprit TabIndex qui s'incrmente automatiquement de 0 1, 2, 3...quand en cours de conception on ajoute des contrles sur une fentre. Lorsque l'utilisateur appuie sur TAB, le focus passe au contrle qui a le TabIndex immdiatement suprieur. On peut modifier le TabIndex des contrles pour modifier l'ordre de tabulation.

http://plasserre.developpez.com/v3-12.htm (4 sur 5) [01/03/2005 14:47:58]

Site

Quand TabStop a la proprit False (au niveau d'un contrle) celui ci est exclu de l'ordre de tabulation et le focus ne s'arrte pas.

Raccourcis clavier.
Dans beaucoup d'applications certains contrles ont un raccourci clavier: Exemple: Nouveau est une ligne de menu. N tant soulign, ALT-N dclenche la ligne de menu, donne le focus au contrle. Comment faire cela: Dans la proprit Text du contrle, quand on tape le texte en mode conception, il faut mettre un '&' avant la lettre qui servira de raccourci clavier. '&Nouveau' dans notre exemple affichera ALT N fonctionnera. bien Nouveau et

Pour une TextBox, la proprit text ne peut pas tre utilise, aussi il faut mettre devant la textBox un contrle label (qui lui ne peut pas avoir le focus), si les TabIndex du label et du TextBox se suivent, le fait de faire le raccourci clavier du label donne le focus au TextBox. Nom

|
Exemple quand l'utilisateur tape Alt-N, le focus va dans le TextBox dessous.

http://plasserre.developpez.com/v3-12.htm (5 sur 5) [01/03/2005 14:47:58]

Site

Site

Cours : VB.net
ToolBar StatusBar

3.13

Comment mettre une barre de bouton en haut et une barre d'tat en bas?

La barre de bouton.
Voici un exemple classique, sous le menu il y a une barre de bouton: Nouveau, Ouvrir, Enregistrer, Chercher, Imprimer...

Allez chercher dans la place en haut, sous le contrle ImageList est image tant charge en (0,1,2,3..)

boite outils un contrle ToolBar, il se menu. Mettre aussi un ImageList.(Un un contrle qui stocke des images, chaque mode conception et repre par un numro

Dans le ToolBar mettre dans la proprit ImageList le nom du contrle ImageList qui contient les images des boutons.

Ouvrir la collection Buttons dans la fentre des proprits ToolBar pour pouvoir ajouter ou modifier les boutons:

de le

http://plasserre.developpez.com/v3-13.htm (1 sur 3) [01/03/2005 14:48:01]

Site

Vous pouvez ajouter ou enlever des boutons. Chaque bouton a ses proprits affiches droite: Name Nom du Bouton Exemple NewButton.

ImageIndex donne le numro de l'image (contenue dans l'Imagelist) qui doit s'afficher dans le bouton. ToolTipText donne le texte du ToolTip (Carr d'aide qui apparat quand on est sur le bouton) Il faut aussi que la proprit ShowToolTip de la ToolBar soit True

L'vnement dclench par le click de l'utilisateur sur un bouton est: ToolBar1_ButtonClick L'argument e contient les arguments de l'vnement click de la ToolBar. e.Button contient le nom du bouton qui a dclench l'vnement. Pour chaque nom de bouton on appellera la procdure correspondante: NewDoc(), Open()... Comme d'habitude il suffit de double-cliquer sur la ToolBar pour faire apparatre ToolBar1_ButtonClick Voici le code complet: Private Sub ToolBar1_ButtonClick(ByVal Sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles toolBar1.ButtonClick If e.Button Is NewButton Then NewDoc() ElseIf e.Button Is OpenButton Then Open() ElseIf e.Button Is SaveButton Then Save() ElseIf e.Button Is PreviewButton Then PrintPreview()

http://plasserre.developpez.com/v3-13.htm (2 sur 3) [01/03/2005 14:48:01]

Site

... End If End Sub

Contrle StatusBar.
La barre d'tat se trouve en bas de la fentre et affiche des informations relatives aux oprations en cours.

Ajouter un StatusBar au formulaire. Dans la fentre des proprits du StatusBar, la collection Panels contient les zones d'affichage du StatusBar. Dans le code, pour modifier le texte d'une zone faire: StatusBar1.Panels(0).Text="1715.2F"

http://plasserre.developpez.com/v3-13.htm (3 sur 3) [01/03/2005 14:48:01]

Site

Site

Cours : VB.net
Image.

3.14

Comment afficher des images ?

Le contrle 'PictureBox':
Le contrle PictureBox sert afficher des graphismes au format bitmap, GIF, JPEG, mtafichier ou icne (Extension .BMP .GIF .JPG .WMF .ICO) L'image affiche est dtermine par la proprit Image, laquelle peut tre dfinie au moment de l'excution ou du design. La proprit SizeMode dtermine la faon dont l'image et le contrle se dimensionnent l'un par rapport l'autre.

On peut charger une image en mode conception par le fentre 'proprits' et la proprit 'Image' ou dans le code: PictureBox1.Image = Image.FromFile("vimage.gif") (L'objet de la Classe Image charge une image d'un fichier puis l'affecte la proprit Image.) ou par PictureBox1.Image.FromFile("vcar1.gif") cette syntaxe ne marche pas!!!Pourquoi?

Ho! merveille, les GIF anims sont accepts et s'animent sous VB.

http://plasserre.developpez.com/v3-14.htm (1 sur 5) [01/03/2005 14:48:03]

Site

Comment effacer une image? If Not (PictureBox1.Image Is Nothing) Then PictureBox1.Image.Dispose() PictureBox1.Image = Nothing End If Les objets de la Classe Image ont comme d'habitude des proprits et des mthodes. La mthode RotateFlip permet par exemple d'effectuer une rotation de l'image; quand on tape le code, VB donne automatiquement la liste des paramtres possible. PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipX) La mthode Save sauvegarde l'image dans un fichier.

PictureBox1.Image.Save("c:\image.bmp") Noter bien que le nom de l'extension suffit imposer le format de l'image sur le disque. On peut charger une image .GIF puis la sauvegarder en .BMP

Il y a bien d'autres proprits grant les dimensions, la palette de l'image.

Il est possible de dfinir une couleur comme 'transparente': voir le page sur les boutons.

La proprit 'Image' des contrles:


De nombreux contrles Windows Forms peuvent afficher des images. L'image affiche peut tre une icne symbolisant la fonction du contrle ou une image ; par exemple, l'image d'une disquette sur un bouton indique gnralement une commande d'enregistrement. L'icne peut galement tre une image d'arrire-plan confrant au contrle une certaine apparence. Pour tous les contrles affichant des images:
q

l'image peut tre dfinie l'aide des proprits Image ou BackgroundImage directement en mode Design par la fentre des proprits. Il faut slectionner Image puis cliquez sur "..." et choisir une fichier contenant une image. Dans ce cas, une fois charge, l'image fait partie intgrante du programme. (Il n'est pas utile de fournir le fichier .BMP ou .GIF avec l'application) Lorsque le programme 'tourne' on peut aussi charger une Image. Le code affecte la proprit Image ou BackgroundImage un objet de type System.Drawing.Image, en gnral, vous utiliserez la mthode FromFile de la classe Image pour charger

http://plasserre.developpez.com/v3-14.htm (2 sur 5) [01/03/2005 14:48:03]

Site

une Image partir d'un fichier.(Dans ce cas le fichier contenant l'image doit tre fourni)

Exemple pour un bouton: button1.Image = Image.FromFile("C:\Graphics\MyBitmap.bmp") ' Aligne l'image. button1.ImageAlign = ContentAlignment.MiddleRight Exemple pour un label: Dim Label1 As New Label() Dim Image1 As Image Image1 = Image.FromFile("c:\\MyImage.bmp") ' modifier la taille du label pour qu'il affiche l'image. Label1.Size = Image1.Size ' Mettre l'image dans le label. Label1.Image = Image1 Si on renseigne la proprit Image, on ne peut pas utiliser en mme temps la proprit ImageList dcrite ci-dessous.

Le contrle ImageList:
Il sert de containeur images, c'est une collection d'images. les images qu'il contient seront utilises par d'autres contrles (PictureBox, Listview, TreeView, Button....) Il n'est pas visible en excution.

En conception il apparat en bas sous la fentre. A droite figurent ses proprits, en particulier, la collection Images qui contient les images et la proprit TransparentColor qui indique la couleur qui doit tre transparent, c'est dire non visible.

Il faut l'ajouter au formulaire, il apparat en dessous.

http://plasserre.developpez.com/v3-14.htm (3 sur 5) [01/03/2005 14:48:03]

Site

Si je clique sur le bouton '...' en face de Images, l'diteur de collections d'image s'ouvre.

On peut ajouter des images avec le bouton 'Ajouter'. L'ImageList est ainsi charg.

Ensuite pour utiliser une image de l'ImageList dans un autre contrle, il faut modifier les proprits de cet autre contrle( un bouton par exemple): La proprit ImageList du bouton doit contenir le nom du contrle imageList et ImageIndex du bouton doit contenir l'index de l'image dans l'ImageList. btOk.ImageList = imagelist1 btOk.ImageIndex = 2

http://plasserre.developpez.com/v3-14.htm (4 sur 5) [01/03/2005 14:48:03]

Site

Un ImageList peut aussi tre charg par code: imageList1.Images.Add(Image.FromFile(NomImage)) On ajoute la collection Images une image venant d'un fichier nomm NomImage. On peut surcharger la mthode Add en fournissant en plus la couleur transparente. imageList1.Images.Add(Image.FromFile(imageToLoad), CouleurTransparente) La taille des images peut aussi tre modifie par code: imageList1.ImageSize = New Size(255, 255) imageList1.TransparentColor = Color.White

http://plasserre.developpez.com/v3-14.htm (5 sur 5) [01/03/2005 14:48:03]

Site

Site

Cours : VB.net
calcul de l'IMC.

3.30

Rvision++ Structuration des programmes.

Ce chapitre permet de 'rviser' pas mal de notion. Qu'est ce que l'IMC?


L'index de masse corporelle est trs utilis par les mdecins. Il est calcul partir du poids et de la taille: IMC=Poids/(Taille*Taille) (avec Poids en Kg, Taille en mtres)

Cela permet de savoir si le sujet est maigre (IMC<18.5) normal (IMC idale=22) en surpoids (IMC>25) obse (IMC>30). On peut calculer le poids idal par exemple PI= 22* T*T Nous allons dtailler ce petit programme:

http://plasserre.developpez.com/v3-30.htm (1 sur 8) [01/03/2005 14:48:06]

Site

Quel est le cahier des charges du programme?


L'utilisateur doit pouvoir: Saisir un poids, une taille, cliquer sur un bouton 'Calculer' Les routines doivent: Vrifier que l'utilisateur ne fait pas n'importe quoi. Calculer et afficher les rsultats: l'IMC mais aussi, en fonction de la taille, le poids idal, les poids limites de maigreur, surpoids, obsit.

Cration de l'interface Il faut 2 zones de saisie pour saisir le poids et la taille: On cre 2 'TextBox' que l'on nomme TexBoxPoids TextBoxTaille. On laisse la proprit Multiline False de saisie. pour n'avoir qu'une ligne

Pour afficher les rsultats , on cre 5 'label' les uns sous les autres. (Pour aller plus vite et que les labels soient de la mme taille, on en cre un puis par un copier et des coller, on cre les autres) labelImc labelPi labelM labelS labelO 'pour afficher l'Imc 'pour afficher le poids idal 'pour afficher le poids limite de la maigreur. 'pour afficher le poids limite du surpoids 'pour afficher le poids limite de l'obsit.

Ensuite on ajoute des labels devant et derrire chaque TextBox pour indiquer devant, ce qu'ils contiennent et derrire, l'unit. On ajoute 2 boutons: ButtonCalcul ayant pour proprit Text= "&Calculer" ButtonQuitter ayant pour proprit Text= "&Quitter"

http://plasserre.developpez.com/v3-30.htm (2 sur 8) [01/03/2005 14:48:06]

Site

Cela donne:

Pour faire beau: La proprit Text de la fentre contient "Calcul IMC", pour afficher cela dans la barre de titre. La proprit ForeColor de labelImc est en rouge. La proprit BorderStyle des labels a la valeur 'Fixed3d' ce qui rend les bords visibles. Ajout du Code La procdure vnement Form1_Load qui se dclenche lorsque la fentre se charge initialise les zones d'affichage en les vidant:

Private Sub Form1_Load(..) TextBoxTaille.Text = "" TextBoxPoids.Text = "" LabelImc.Text = "" LabelPi.Text = "" LabelM.Text = "" LabelS.Text = "" LabelO.Text = "" End Sub

La procdure ButtonCalcul_Click qui se dclenche lorsque l'utilisateur clique sur le bouton 'Calculer' contient le code principal. Voici la totalit du code, on le dtaillera dessous.

http://plasserre.developpez.com/v3-30.htm (3 sur 8) [01/03/2005 14:48:06]

Site

Private Sub ButtonCalcul_Click(..) Dim sPoids As Single 'Variable Single contenant le poids Dim sTaille As Single 'Variable Single contenant la taille '******Controle de validit des entres************ 'Les valeurs saisies sont-elles numrique? If Not (IsNumeric(TextBoxTaille.Text)) Then MsgBox("Entrez une valeur numrique pour la taille") Exit Sub End If If Not (IsNumeric(TextBoxPoids.Text)) Then MsgBox("Entrez une valeur numrique pour le poids") Exit Sub End If 'Convertir les textes saisis en single ' et les mettre dans les variables sTaille = CType(TextBoxTaille.Text, Single) / 100 sPoids = CType(TextBoxPoids.Text, Single) 'Les valeurs saisies sont-elles cohrentes? If sTaille < 50 Or sTaille > 250 Then MsgBox("Entrez une taille valide") Exit Sub End If If sPoids < 20 Or sPoids > 200 Then MsgBox("Entrez un poids valide") Exit Sub End If 'Effectuer les calculs et afficher les rsultats. LabelImc.Text = (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString LabelPi.Text = (Math.Round(22 * (sTaille * sTaille), 2)).ToString LabelM.Text = (Math.Round(18.5 * (sTaille * sTaille), 2)).ToString LabelS.Text = (Math.Round(25 * (sTaille * sTaille), 2)).ToString LabelO.Text = (Math.Round(30 * (sTaille * sTaille), 2)).ToString End Sub

Dtaillons: Quelles sont les diffrentes tapes? On dclare les variables. On vrifie que ce qui a t tap est numrique. On convertit le texte qui est dans la TextBox en Single On teste si les valeurs de poids et taille sont cohrentes. On fait le calcul et on affiche.

Dclaration de variables. Dim sPoids As Single 'Variable Single contenant le poids Dim sTaille As Single 'Variable Single contenant la taille Ce sont des variables 'prives' propre la procdure (utilisation de Dim ou Private).

http://plasserre.developpez.com/v3-30.htm (4 sur 8) [01/03/2005 14:48:06]

Site

Contrle de validit: L'utilisateur est sens taper un poids et une taille puis cliquer sur le bouton 'Calculer'. Mais il ne faut absolument pas lui faire confiance: il a peut-tre oubli de taper le poids ou a donner une taille=0 (l'ordinateur n'aime pas diviser par 0!!), il a peut-tre fait une faute de frappe et tap du texte!!.. Donc il faut tester ce qui a t tap, s'il y a erreur, on prvient l'utilisateur avec une 'MessageBox' puis on sort de la routine par (Exit Sub )sans effectuer de calcul. Ici par exemple, on teste si le texte saisi dans la zone taille n'est pas numrique: If Not (IsNumeric(TextBoxTaille.Text)) Then MsgBox("Entrez une valeur numrique pour la taille") Exit Sub End If Amlioration: On aurait pu automatiquement effacer la valeur errone et placer le curseur dans la zone ressaisir: If Not (IsNumeric(TextBoxTaille.Text)) Then MsgBox("Entrez une valeur numrique pour la taille") TextBoxTaille.Text="" TextBoxTaille.Select() Exit Sub End If Conversion: Si le texte est bien 'Numric', on fait la conversion en rel simple prcision (Single) sTaille = CType(TextBoxTaille.Text, Single) / 100 On utilise CType pour convertir une String en Single. On divise taille par 100 car l'utilisateur saisi la taille en centimtre et les formules ncessitent une taille en mtre. Problme du sparateur dcimal dans les saisies. Pourquoi saisir la taille en Cm? c'est pour viter d'avoir grer le problme du sparateur dcimal. Si la taille tait saisie en mtre, l'utilisateur aurait-il tap "1.75" ou "1,75"? On rappelle que pour convertir un texte en Single VB accepte le point et pas la virgule. Pour ma part, si j'avais demand de saisir des mtres, voici ma solution: j'ajouterais en dbut de routine une instruction transformant les ',' en '.': TextBoxTaille.Text = Replace(TextBoxTaille.Text, ",", ".")

Faire les calculs et afficher les rsultats. Je fais le calcul: sPoids / (sTaille * sTaille)

http://plasserre.developpez.com/v3-30.htm (5 sur 8) [01/03/2005 14:48:06]

Site

J'arrondis 2 dcimales aprs la virgule grce Math.Round( Math.Round(sPoids / (sTaille * sTaille), 2) Je convertis en String: (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString J'affiche dans le label 'labelImc': LabelImc.Text = (Math.Round(sPoids / (sTaille * sTaille), 2)).ToString (J'aurais pu aussi ne pas arrondir le calcul mais formater l'affichage pour que 2 dcimales soient affiches)

,2):

La procdure ButtonQuitter_Click dclenche quand l'utilisateur clique sur le bouton 'Quitter' ferme la seule fentre du projet (c'est Me , celle o on se trouve), ce qui arrte le programme. Private Sub ButtonQuitter_Click() Me.Close() End Sub

Structuration:
Ici on a fait simple: une procdure vnement calcule et affiche les rsultats. On aurait pu, dans un but didactique 'structurer' le programme.

On aurait pu dcouper le programme en procdure. Une procdure faisant le calcul. Une procdure affichant les rsultats. Si plusieurs procdures utilisent les mmes variables il y a dans ce cas 2 possibilits: Mettre les variables en 'Public' dans un module Standard. Utiliser des variables prives et les passer en paramtres. Premire solution: Variables 'Public' Crer dans un module standard des variables 'Public' pour stocker les variables Poids et Taille, rsultats (Public sIMC A Single par exemple),crer dans ce mme module standard une procdure Public nomme 'Calculer' qui fait les calculs et met les rsultats dans les variables 'Public'; enfin dans le module de formulaire crer une procdure 'AfficheResultat' affichant les rsultats. Module standard: 'Dclaration de variables Public Public sPoids As Single Public sTaille As Single Public sIMC A Single .. 'Procedure Public de calcul Public Sub Calculer sIMC=Math.Round(sPoids / (sTaille * sTaille), 2) ...

http://plasserre.developpez.com/v3-30.htm (6 sur 8) [01/03/2005 14:48:06]

Site

End Sub Module de formulaire Form1: 'Procdure vnement qui appelle les divers routines Private Sub ButtonCalculer_Click ... sTaille = CType(TextBoxTaille.Text, Single) / 100 Calculer() 'Appelle la routine de calcul AfficheResultat() 'Appelle la routine d'affichage End Sub 'routine d'affichage toujours dans le formulaire Private Sub AfficheResultat() LabelImc.Text = sIMC.ToString ... End Sub On voit bien que la routine de Calcul est gnrale et donc mise dans un module standard et d'accs 'Public', alors que la routine d'affichage affichant sur Form1 est prive et dans le module du formulaire. Seconde solution: Variables 'Prives' et passage de paramtres On peut ne pas crer de variables 'public' mais crer des fonctions (CalculIMC par exemple) qui on passe en paramtre le poids et la taille et qui retourne le rsultat du calcul. Une procdure AfficheResultatIMC rcupre en paramtre la valeur de l'IMC afficher. Module standard: 'Pas de dclaration de variables Public .. 'Function Public de calcul: reoit en paramtre le poids et la taille 'retourne l'Imc Public Function CalculerIMC (T as Single, P As Single) As Single Return Math.Round(P / (T*T), 2) End Sub Module de formulaire Form1: 'Procdure vnement qui appelle les divers routines Private Sub ButtonCalculer_Click ... sTaille = CType(TextBoxTaille.Text, Single) / 100 'Appelle de la routine calcul avec l'envoie de paramtres sPoids et sTaille 'Au retour on a la valeur de L'imc que l'on envoie la routine d'affichage. AfficheResultatIMC(CalculerIMC(sTaille, sPoids)) 'Appelle la routine d'affichage End Sub

http://plasserre.developpez.com/v3-30.htm (7 sur 8) [01/03/2005 14:48:06]

Site

'routine d'affichage Private Sub AfficheResultatIMC(I As Single) LabelImc.Text = i.ToString End Sub Remarque: La ligne AfficheResultatIMC(CalculerIMC(sTaille, sPoids)) est quivalente : Dim s As single s=(CalculerIMC(sTaille, sPoids) AfficheResultatIMC(s)) mais on se passe d'une variable temporaire. Conclusion: Faut-il travailler avec des variables Public ou passer des paramtres? Rponses: A mon avis, les 2 et "a dpend des cas"!!!(Bien la rponse).

http://plasserre.developpez.com/v3-30.htm (8 sur 8) [01/03/2005 14:48:06]

Site

Site

Cours : VB.net

Ordre des 3.31 instructions.


Dans quel ordre crire dans un module?

Contenu des modules.


Le code Visual Basic est stock dans des modules (modules de formulaire, modules de classe ..), chaque module est dans un fichier ayant l'extension '.vb". Les projets sont composs de plusieurs fichiers '.vb', lesquels sont compils pour crer des applications. Respecter l'ordre suivant :

1. Instructions Option toujours en premier.(force des


contraintes de dclaration de variables, de conversion de variables, de comparaison) 2. Instructions Imports (charge des espaces de nom) 3. Procdure Main (la procdure de dmarrage si ncessaire) 4. Instructions Class, Module et Namespace, le cas chant

Exemple: Option Explicit On Imports System.AppDomain Imports Microsoft.VisualBasic.Conversion Public Class Form1 Inherits System.Windows.Forms.Form Dim WithEvents m As PrintDocument1 #Region " Code gnr par le Concepteur Windows Form " Public d As Integer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles End Sub

http://plasserre.developpez.com/v3-31.htm (1 sur 2) [01/03/2005 14:48:08]

Site

Dim A As integer End Class On remarque de nouveau l'importance de l'endroit o les variables sont dclares: Dans notre exemple A est accessible uniquement dans Form_Load, alors que d est public.

Si vous entrez les instructions dans un ordre diffrent, vous risquez de crer des erreurs de compilation.

http://plasserre.developpez.com/v3-31.htm (2 sur 2) [01/03/2005 14:48:08]

Site

Site

Cours : VB.net
Exemples:

E 3.1 Conversion F/E.


Comment crer un programme de conversion Francs=>Euros et Euros=> Francs ? Euros

2
Francs:

13.12
Il y a une zone de saisie Euros, une zone Francs, si je tape dans la zone Euros '2' il s'affiche '13.12' dans la zone Francs; cela fonctionne aussi dans le sens Francs=>Euros. Comment faire cela? Un formulaire affichera les zones de saisie, un module standard contiendra les procdures de conversion. On cre un formulaire contenant : 2 TextBox BoiteF et BoiteE, leurs proprits Text=""

2 labels dont la proprit Text sera ="Euros" et "Francs",


http://plasserre.developpez.com/ve3-1.htm (1 sur 4) [01/03/2005 14:48:11]

Site

on les positionnera comme ci-dessus. Dans le formulaire, je dimensionne un flag (ou drapeau): flagAffiche, il sera donc visible dans la totalit du formulaire. Je l'initialise True. Public Class Form1 Inherits System.Windows.Forms.Form Dim flagAffiche As Boolean = True

Comme la conversion doit se dclencher automatiquement lorsque le texte de BoiteF ou BoiteE change, j'utilise les vnements 'TextChanged' de ces TextBox: Pour la conversion Euros=>Francs, dans la procdure TextChanged de BoiteE, je rcupre le texte tap (BoiteE.Text), j'appelle la fonction ConversionEF en lui envoyant comme paramtre ce texte. La fonction me retourne un double que je transforme en string et que j'affiche dans l'autre TextBox(BoiteF). Private Sub BoiteE_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BoiteE.TextChanged If flagAffiche = True Then flagAffiche = False BoiteF.Text = (ConversionEF(BoiteE.Text)).ToString flagAffiche = True End If End Sub Idem pour l'autre TextBox: Private Sub BoiteF_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles BoiteF.TextChanged If flagAffiche = True Then flagAffiche = False BoiteE.Text = (ConversionFE(BoiteF.Text)).ToString flagAffiche = True End If

http://plasserre.developpez.com/ve3-1.htm (2 sur 4) [01/03/2005 14:48:11]

Site

End Sub End Class A quoi sert le flag : flagAffiche? A viter une boucle sans fin: sans flag, BoiteF_TextChanged modifie BoiteE_Text qui dclenche BoiteE_TextChanged qui modifie BoiteF_Text qui dclenche BoiteF_TextChanged..... Avec le flag, quand je vais modifier la proprit Text d'une TextBox, le met le flag False, cela indique l'autre vnement TextChanged de ne pas lui aussi convertir et afficher.

Enfin il faut crire les procdures qui font la conversion: ConversionEF et ConversionFE dans un module standard. Ces procdures 'Function' appellent elles mmes une autre fonction qui arrondi les rsultats 2 dcimales. Pour transformer des Euros en Francs, je les multiplie par 6.55957 puis j'arrondis . On remarque que ces procdures reoivent une string en paramtres et retourne un double. Module Module1 Public Function ConversionEF(ByVal e As String) As Double Dim somme As Double Dim resultat As Double somme = Val(e) resultat = Arrondir(somme * 6.55957) Return resultat End Function Public Function ConversionFE(ByVal e As String) As Double Dim somme As Double Dim resultat As Double somme = Val(e) resultat = Arrondir(somme / 6.55957) Return resultat End Function

http://plasserre.developpez.com/ve3-1.htm (3 sur 4) [01/03/2005 14:48:11]

Site

Enfin la Function Arrondir arrondit 2 dcimales: pour cela on multiplie par 100, on arrondit l'entier avec Round puis on divise par 100. Public Function Arrondir(ByVal Valeur As Double) As Double 'arrondi a 2 chiffres aprs la virgule Return (Math.Round(Valeur * 100)) / 100 End Function End Module A noter que l'on aurait pu utiliser une surcharge de Round qui arrondit directement 2 dcimales: Return (Math.Round(Valeur, 2)) Exercice: Quel code mettre dans la procdure Button_Click d'un bouton nomm 'Remise zro' qui met les 2 zones de saisie zro? (Penser au flag) Amlioration: Si l'utilisateur tape une virgule il y a problme car la fonction Val utilise pour convertir le nombre saisi en numrique reconnait uniquement le poit, il faut donc transformer les virgules en points avec e = Replace(e, ",", ".") On peut tester si l'utilisateur a bien tap un nombre, avec la fonction IsNumeric.

http://plasserre.developpez.com/ve3-1.htm (4 sur 4) [01/03/2005 14:48:11]

Site

Site

Cours : VB.net
Exemples:

E 3.2 Mensualits d'un prts.


Comment crer un programme qui calcul les mensualises d'un prt ? Dans l'espace Microsoft.VisualBasic il existe des fonctions financires. Pmt calcul les mensualits d'un prt. Remboursement mensuel= Pmt( Rate, NPer, PV, FV, Due) Rate Obligatoire. Donne de type Double indiquant le taux d'intrt par priode. Si taux d'intrt annuel de 10 pour cent et si vous effectuez des remboursements mensuels, le taux par chance est de 0,1/12, soit 0,0083. NPer Obligatoire. Donne de type Double indiquant le nombre total d'chances. Par exemple, si vous effectuez des remboursements mensuels dans le cadre d'un emprunt de quatre ans,il y a 4 * 12 (soit 48) chances. PV Obligatoire. Double indiquant la valeur actuelle . Par exemple, lorsque vous empruntez de l'argent pour acheter une voiture, le montant du prt correspond la valeur actuelle (pour un emprunts il est ngatif). FV

http://plasserre.developpez.com/ve3-2.htm (1 sur 3) [01/03/2005 14:48:13]

Site

Facultatif. Double indiquant la valeur future ou le solde en liquide souhait au terme du dernier remboursement. Par exemple, la valeur future d'un emprunt est de 0 F car il s'agit de sa valeur aprs le dernier remboursement. Par contre, si vous souhaitez conomiser 70 000 F sur 15 ans, ce montant constitue la valeur future. Si cet argument est omis, 0 est utilise par dfaut. Due Facultatif. Objet de type Microsoft.VisualBasic.DueDate indiquant la date d'chance des paiements. Cet argument doit tre DueDate.EndOfPeriod si les paiements sont dus terme chu ou DueDate.BegOfPeriod si les paiements sont dus terme choir (remboursement en dbut de mois). Si cet argument est omis, DueDate.EndOfPeriod est utilis par dfaut. Noter que si Rate est par mois NPer doit tre en mois; si Rate est en anne NPer doit tre en anne. Sub CalculPret() Dim PVal, Taux, FVal, Mensualite, NPerVal As Double Dim PayType As DueDate Dim Response As MsgBoxResult Dim Fmt As String Fmt = "###,###,##0.00" ' format d'affichage. FVal = 0 '0 pour un prt. PVal = CDbl(InputBox("Combien voulez-vous emprunter?")) Taux = CDbl(InputBox("Quel est le taux d'intrt annuel?")) If Taux > 1 Then Taux = Taux / 100 ' Si l'utilisateur tap 4 transformer en 0.04. NPerVal =12* CDbl(InputBox("Dure du prt (en annes)?")) Response = MsgBox("Echance en fin de mois?", MsgBoxStyle.YesNo) If Response = MsgBoxResult.No Then PayType = DueDate.BegOfPeriod Else PayType = DueDate.EndOfPeriod End If Mensualite = Pmt(Taux / 12, NPerVal, -PVal, FVal, PayType) MsgBox("Vos mensualits seront de " & Format(Mensualite, Fmt) & " par mois") End Sub IPmt calcul les intrts pour une priode. Calculons le total des intrts: Dim IntPmt, Total, P As Double

http://plasserre.developpez.com/ve3-2.htm (2 sur 3) [01/03/2005 14:48:13]

Site

For P = 1 To TotPmts ' Total all interest. IntPmt = IPmt(APR / 12, P, NPerVal, -PVal, Fval, PayType) Total = Total + IntPmt Next Period

http://plasserre.developpez.com/ve3-2.htm (3 sur 3) [01/03/2005 14:48:13]

Site

Site

Cours : VB.net

Dmarrer, 4.1 arrter un programme.


Quand vous dmarrez votre programme, quelle partie du code va tre excute en premier? Vous pouvez le dterminer en cliquant sur le menu Projet puis Proprits de NomduProjet, une fentre Page de proprits du projet s'ouvre. Sous la rubrique Objet du dmarrage, il y a une zone de saisie avec liste droulante permettant de choisir: -Le nom d'une fentre du projet ou -Sub Main()

Dmarrer par une fentre.


Si vous tapez le nom d'une fentre du projet, c'est celleci qui dmarre : cette fentre est charge au lancement du programme et la procdure Form_Load de cette fentre est effectue.

Dmarrer par Sub Main()


http://plasserre.developpez.com/v4-1.htm (1 sur 3) [01/03/2005 14:48:14]

Site

C'est cette procdure Sub Main qui s'excute en premier lorsque le programme est lanc. Dans ce cas, il faut ajouter dans un module (standard ou d'un formulaire) une Sub nomm Main(), Exemple: En mode conception Form1 a t dessine, C'est le modle 'la Classe' de la fentre qui doit s'ouvrir au dmarrage. Dans Sub Main(), on cre une fentre de dpart que l'on nomme initForm avec le moule, la Class Form1 en instancant la nouvelle fentre. Puis on affiche ce formulaire (cette fentre) avec .ShowDialog

Public Shared Sub Main() Dim initForm As New Form1


initForm.ShowDialog()

End Sub

Fentre Splash
Dans la Sub Main il est possible de grer une fentre Splash. C'est une fentre qui s'ouvre au dmarrage d'un programme, qui montre simplement une belle image, pendant ce temps le programme initialise des donnes, ouvre des fichiers... ensuite la fentre 'Splash' disparat et la fentre principale apparat. Exemple: Je dessine Form1 qui est la fentre Spash. Dans Form2 qui est la fentre principale, j'ajoute:

Public Shared Sub Main() Dim FrmSplash As New Form1 Dim FrmPrincipal As New Form2 principale FrmSplash.ShowDialog() en Modale FrmPrincipal.ShowDialog() affiche la fentre principale End Sub Dans Form1 (la fentre Splash)

'instance la fentre Splash 'instance la feuille 'affiche la fentre Splash 'a la fermeture de Splash,

http://plasserre.developpez.com/v4-1.htm (2 sur 3) [01/03/2005 14:48:14]

Site

Private Sub Form1_Activated Me.Refresh() 'pour afficher totalement la fentre. 'ici ou on fait plein de choses on ouvre des fichiers ou on perd du temps. Me.Close() End Sub On affiche FrmSplash un moment (Ho! la belle image) puis on l'efface et on affiche la fentre principale. Word, Excel.. font comme cela.

Comment arrter le programme?


Me.Close() 'Ferme la fentre en cours

Noter bien Me dsigne le formulaire, la fentre en cours.

Application.Exit()

'Ferme l'application

Si des fichiers sont encore ouvert, cela les ferme. (Il vaut mieux les fermer avant, intentionnellement par une procdure qui ferme tous les fichiers.)

Attention:
Si le formulaire que vous fermez est le formulaire de dmarrage de votre application, votre application se termine.

http://plasserre.developpez.com/v4-1.htm (3 sur 3) [01/03/2005 14:48:14]

Site

Site

Cours : VB.net

Ouvrir une autre 4.2 formulaire (une fentre).


Rappel:Formulaire=fentre
Comment partir d'un formulaire 'Form1' ouvrir un second formulaire 'Form2' ?

Crer un formulaire:
A- On va d'abord crer la Classe Form2
Ajouter un formulaire (Menu Projet, Ajouter un formulaire au projet) nomm Form2 . On se rend compte que quand on ajoute un formulaire (Form2 par exemple), on cre une nouvelle classe' Class Form2' qui hrite de System.Windows.Forms.Form , elle hrite donc de toutes les proprits et mthodes de la Classe Form qui est la classe 'formulaire'. Public Class Form2 End Class

http://plasserre.developpez.com/v4-2.htm (1 sur 9) [01/03/2005 14:48:17]

Site

Elle contient du code gnr automatiquement par le concepteur Windows Forms et les procdures lies aux vnements. Dessinez dans Form2 les contrles ncessaires.

B- On va crer le nouvel Objet formulaire (fentre):


Pour crer un nouveau formulaire dans le programme, il faut:
q

Instancer un formulaire partir du moule, de la Classe Form2 avec le mot New. Ouvrir ce formulaire, le faire apparatre, (avec ShowDialog, cest un formulaire modal)

Dim f As New Form2() f.ShowDialog()

En conclusion: Le fait d'ajouter un formulaire et des contrles un projet cre une Class, (un moule) ce qui permet ensuite d'instancer un objet formulaire.

VB est tolrant : si on dessine un formulaire et ses contrles et qu'on lance le programme, il accepte de fonctionner bien qu'on ait pas instanc le formulaire.

http://plasserre.developpez.com/v4-2.htm (2 sur 9) [01/03/2005 14:48:17]

Site

Dnomination des fentres aprs leur cration.


Une procdure cre un formulaire par Dim f As New Form2
q

Dans le formulaire f cr: Utiliser Me pour dsigner le formulaire o on se trouve. (Form2 ou f ne sont pas accepts) Exemple:

Le formulaire f pourra tre ferm par Me.close() dans le code du bouton Quitter par exemple.

Hors du formulaire f, dans la procdure o a t instanc le formulaire: Utiliser f pour dsigner le formulaire. Exemple:

Si la fentre appelante veut rcuprer des informations dans le formulaire f (un texte dans txtMessage par exemple), il faudra crire. Text=f.txtMessage.Text

Par contre, hors de la procdure qui a cre le formulaire, f n'est pas accessible.

http://plasserre.developpez.com/v4-2.htm (3 sur 9) [01/03/2005 14:48:17]

Site

En rsum: Attention donc, si vous instancez un formulaire dans une procdure, elle sera visible et accessible uniquement dans cette procdure . Cela parait vident car un formulaire est un objet comme un autre et sa visibilit obit aux rgles habituelles ( J'ai mis malgr tout un certains temps le comprendre!!).

Si vous voulez crer un formulaire qui soit visible dans la totalit du programme et dont les contrles ou proprits soient accessible par l'ensemble du programme, il faut l'instancer dans un module standard avec: Public f As New Form2.

Un formulaire est un objet et sa visibilit obit aux rgles habituelles: Il peut tre instanc dans une procdure, un module, prcd de 'Public' ,'Private'.. ce qui permet de grer son accessibilit.

Un formulaire est un objet:On peut ajouter un formulaire des mthodes et des membres:
On a vu que, en fait, il y a cration d'une Classe quand on dessine un formulaire, et bien comme dans un module de Classe (on verra cela plus loin), on peut ajouter des proprits et des mthodes. Pour ajouter une mthode un formulaire, il faut crer une Sub Public dans le corps de la fentre: Public Sub Imprime() Code d'impression End Sub Si une instance de la fentre se nomme F, F.Imprime() excute la mthode Imprime (donc la sub Imprime) De mme, pour dfinir un membre d'un formulaire, il faut ajouter une variable 'public'.
http://plasserre.developpez.com/v4-2.htm (4 sur 9) [01/03/2005 14:48:17]

Site

Public Utilisateur As String Permet d'utiliser en dehors du formulaire F.Utilisateur

Si le formulaire a t instanc dans un module de Classe (avec Public), les mthodes et proprits de ce formulaire seront accessibles partout.

Exemple plus complet:


Avec rcupration de donnes dans le formulaire cr, partir d'une procdure: Crer un formulaire en utilisant Form2. L'ouvrir en formulaire modal. Quand l'utilisateur ferme cette fentre modale , rcuprer le texte qui est dans txtMessage de cette fentre modale. La ruse c'est de mettre dans le code du bouton Quitter de Form2 Me.Hide() pour rendre la fentre Form2

invisible mais accessible (et pas Me.Close() qui dtruirait la fentre, le contrle txtMessage et son contenu). Dim f As New Form2() f.ShowDialog() Text=f.txtMessage.Text f.Close()

Une fois que le texte t rcupr, on faire disparatre la fentre f. En ralit, curieusement, il semble que les proprits de f soient accessibles mme aprs un Close!! Cela vient du fait que, bien que le formulaire soit ferm, il n'est pas encore dtruit.

Autre problme : comment savoir si un formulaire existe, sil nexiste pas le crer,
http://plasserre.developpez.com/v4-2.htm (5 sur 9) [01/03/2005 14:48:17]

Site

sil existe le rendre visible et lui donner la main :

If f Is Nothing Then 'Si f=rien f = New Form2 f.ShowDialog() Else If f.Visible = False Then f.Visible = True End If f.Activate() End If

Fentre modale ou non modale:


Un formulaire modal est un formulaire qui, une fois ouvert, prend la main, interdit l'usage des autres fentres. Pour poursuivre, on ne peut que sortir de ce formulaire. Exemple typique: une MessageBox est un formulaire modal, les fentres d'avertissement dans Windows sont aussi modales. Pour ouvrir un formulaire modal, il faut utiliser la mthode .ShowDialog f.ShowDialog() Noter, et c'est trs important, que le code qui suit .showDialog est excut aprs la fermeture de la fentre modale.

Pour avoir un formulaire non modal faire f.Show()


Dans ce cas le formulaire f s'ouvre, le code qui suit .Show est excut immdiatement, et il est possible de passer dans une autre fentre de l'application sans fermer

http://plasserre.developpez.com/v4-2.htm (6 sur 9) [01/03/2005 14:48:17]

Site

f.

Owner
Comment savoir quel formulaire a ouvert le formulaire en cours?(quel est le formulaire parent?) ShowDialog possde un argument facultatif, owner, qu'on peut utiliser afin de spcifier une relation parent-enfant pour un formulaire. Par exemple, lorsque le code de votre formulaire principal affiche une bote de dialogue, vous pouvez passer Me comme propritaire de la bote de dialogue, afin de dsigner votre formulaire principal comme propritaire, comme le montre le code de l'exemple suivant : Dans Form1 Dim f As New Form2

f.ShowDialog(Me)
Dans Form2 on peut rcuprer le nom du 'propritaire', du 'parent' qui a ouvert la fentre (il est dans Owner) et l'afficher par exemple: Label1.text=Me.Owner.ToString Cela affiche: NomApplication.Form1,text le texte de la barre suprieure. text=est

Rcupration d'information par DialogResult.


On ouvre un formulaire modal, comment, aprs sa fermeture, rcuprer des informations sur ce qui s'est pass dans ce formulaire modale? Par exemple, l'utilisateur a t-il cliqu sur le bouton Ok ou le bouton Cancel pour fermer le formulaire modale? Pour cela on va utiliser une proprit DialogResult des boutons, y mettre une valeur correspondant au bouton, quand l'utilisateur clique sur un bouton, la valeur de la proprit DialogResult du bouton est assigne la
http://plasserre.developpez.com/v4-2.htm (7 sur 9) [01/03/2005 14:48:17]

Site

proprit DialogResult du formulaire, on rcupre cette valeur la fermeture du formulaire modal. Dans le formulaire modal Form2 on met ButtonOk.DialogResult= DialogResult.ok

ButtonCancel.DialogResult= DialogResult.Cancel

Dans le formulaire qui appelle: Form2.ShowDialog() If form2.DialogResult= DialogResult.ok then 'l'utilisateur a cliqu sur le bouton ok End if

Remarque:

1. On utilise comme valeur de DialogResult les


constantes de l'numration DialogResult:DialogResult.ok .Cancel .No .Yes .Retry .None

2. Si l'utilisateur clique sur la fermeture du


formulaire modal (bouton avec X) cela retourne DialogResult.cancel

3. on peut aussi utiliser la syntaxe: If


form2.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK Then qui permet en une seule ligne d'ouvrir form2 et de tester si l'utilisateur a cliqu sur le bouton ok de form2.

4. La fermeture du formulaire modal

par le bouton de fermeture ou l'appel de la mthode Close ne dtruit pas toujours le formulaire modal, il faut dans ce cas utiliser la mthode Dispose pour le dtruire.

Mon truc:De manire gnrale s'il y a des informations faire passer d'un formulaire un autre, j'utilise une variable Publique (nomme BAL comme 'Boite aux lettres' par exemple) dans laquelle je mets l'information faire passer.

Bouton par dfaut.


http://plasserre.developpez.com/v4-2.htm (8 sur 9) [01/03/2005 14:48:17]

Site

Parfois dans un formulaire, l'utilisateur doit pouvoir, valider (taper sur la touche 'Entre') pour accepter et quitter rapidement le formulaire (c'est l'quivalent du bouton 'Ok') ou taper 'Echap' pour sortir du formulaire sans accepter (c'est l'quivalent du bouton 'Cancel'). Il suffit pour cela de donner aux proprits AcceptButton et CancelButton du formulaire,le nom des boutons ok et cancel qui sont sur la feuille. form1.AcceptButton = buttonOk form1.CancelButton = buttonCancel Si l'utilisateur tape la touche 'Echap' la procdure buttonCancel_Click est excute.

http://plasserre.developpez.com/v4-2.htm (9 sur 9) [01/03/2005 14:48:17]

Site

Site

Cours : VB.net

Traiter 4.3 les erreurs.


Il y a plusieurs types d'erreurs. Les erreurs de syntaxe. Les erreurs d'excution. Les erreurs de logique.

Les erreurs de syntaxe:


Elle surviennent en mode conception quand on tape le code: Exemple: A+1=B f.ShowDialogue ShowDialog 'Erreur dans l'affectation 'Faute de frappe, il fallait taper

2 For... et un seul Next Dans ces cas VB souligne en ondul bleue le code. Il faut mettre le curseur sur le mot soulign, l'explication de l'erreur apparat. Exemple: Proprit Text d'un label mal orthographie:

http://plasserre.developpez.com/v4-3.htm (1 sur 7) [01/03/2005 14:48:19]

Site

Il faut les corriger immdiatement en tapant le bon code.

Les erreurs d'excution:

Elle surviennent en mode Run ou lors de l'utilisation de l'excutable, une instruction ne peut pas tre effectue. Le logiciel s'arrte brutalement, c'est trs gnant!! Pour l'utilisateur c'est un 'BUG' L'erreur est:
q

Soit une erreur de conception. Exemple: Ouvrir un fichier qui n'existe pas (On aurait du vrifier qu'il existe avant de l'ouvrir!). Division par zro. Utiliser un index d'lment de tableau suprieur au plus grand possible: Dim A(3) As String: A(5)="Toto"

Soit une erreur de l'utilisateur. Exemple: On lui demande de taper un chiffre, il tape une lettre ou rien puis valide. Il faut toujours vrifier ce que fait l'utilisateur et prvoir toutes les possibilits. Exemple: si je demande l'utilisateur de tapez un nombre entre 1 et 10, il faut: Vrifier qu'il a tap quelque chose.

http://plasserre.developpez.com/v4-3.htm (2 sur 7) [01/03/2005 14:48:19]

Site

Que c'est bien un chiffre (pas des lettres). Que le chiffre est bien entre 1 et 10. Sinon il faudra reposer la question. On voit bien que pour viter les erreurs d'excution il est possible: -D'crire du code grant ces problmes, contrlant les actions de l'utilisateur.. -Une autre alternative est de capter l'erreur. A-Capter les erreurs avec Try Catch Finally: Avant l'instruction suppose provoquer une erreur indiquez: Essayer (Try), si une erreur se produit Intercepter l'erreur (Catch) puis poursuivre (aprs Finally)

Try Instruction susceptible de provoquer une erreur. Catch Traitement de l'erreur Finally Code toujours excut End Try

Il faut pour que cela fonctionne avoir tap au pralable Imports System.IO Il est possible d'utiliser Catch pour rcuprer 'Exception' qui est gnr par l'erreur. l'objet

http://plasserre.developpez.com/v4-3.htm (3 sur 7) [01/03/2005 14:48:19]

Site

Catch ex As Exception Cet objet Exception des proprits: Message qui contient le descriptif de l'erreur. Source qui contient l'objet qui a provoqu l'erreur.... ex.Message contient donc le message de l'erreur.

Cet objet Exception ( de l'espace IO) aussi des classes drives: StackOverFlowException; FileNotFoundExeption; EndOfStreamExeption; FileLoadExeption; PathTooLongExeption. Enfin une exception peut provenir de l'espace System: ArgumentExceptions; ArithmeticException; DivideByZeroExeception..... Il est possible d'crire plusieurs instructions Catch avec pour chacune le type de l'erreur intercepter. (Faisant partie de la classe Exceptions) Exemple: On ouvre un fichier par StreamReader , comment intercepter les exceptions suivantes? Rpertoire non valide Fichier non valide Autre. Try sr= New StreamerReader (NomFichier) Catch ex As DirectoryNotFoundException MsgBox("Rpertoire invalide") Catch ex As FileNotFoundException MsgBox("Fichier invalide") Catch ex As Exception MsgBox(ex.Message) End Try Noter que le dernier Catch intercepte toutes les autres exceptions. On peut encore affiner la gestion par le mot cl When qui permet une condition.

http://plasserre.developpez.com/v4-3.htm (4 sur 7) [01/03/2005 14:48:19]

Site

Catch ex As FileNotFoundException When ex.Message.IndexOf ("Mon Fichier.txt") >0 MsgBox ("Impossible d'ouvrir Mon Fichier.txt") Si le texte "Mon Fichier.txt" est dans le message, affichez que c'est lui qui ne peut pas tre ouvert. Exit Try permet de sortir prmaturment. B-Capter les erreurs avec On error : On peut aussi utiliser en VB.Net la mthode VB6: On Error Goto permet en cas d'erreur de sauter une portion de code traitant l'erreur. On peut lire le numro de l'erreur qui s'est produite, ce numro est dans Err.Number. Err.Description contient le texte dcrivant l'erreur. Err.Source donne le nom de l'objet ou de l'application qui a cre l'erreur. Quand l'erreur est corrige, on peut revenir de nouveau la ligne qui a provoqu l'erreur grce Resume ou poursuivre la ligne suivante grce Resume Next

Exemple:
On Error GoTo RoutinedErreur 'Si une erreur se produit se rendre 'RoutineErreur' Dim x As Integer = 33 Dim y As Integer = 0 Dim z As Integer z = x / y ' Cre une division par 0 !! RoutinedErreur: ' La Routine d'erreur est ici (remarquer ':'). Select Case Err.Number ' On regarde le numro de l'erreur. Case 6 ' Cas : Division par zro interdite y = 1 ' corrige l'erreur. Case Else ' autres erreurs.... End Select Resume ' Retour la ligne qui a provoqu l'erreur.

http://plasserre.developpez.com/v4-3.htm (5 sur 7) [01/03/2005 14:48:19]

Site

Pour arrter la gestion des erreurs il faut utiliser: On Error Goto 0

Parfois on utilise une gestion hyper simplifie des erreurs: Si une instruction 'plante', la sauter et passez l'instruction suivante, pour cela on utilise: On Error Resume Next Exemple: On veut effacer un fichier On Error Resume Next Kill (MonFichier) On Error goto 0 Ainsi , si le fichier n'existe pas , cela ne plante pas (on aurait pu aussi vrifier qu'il existe avant de l'effacer). On Error Gosub n'existe plus.

Les erreurs de logique:

Le programme fonctionne, pas d'erreurs apparentes, mais les rsultats sont errons, faux.

Il faut donc toujours tester le fonctionnement du programme de multiples fois dans les conditions relles avec des donnes courantes, mais aussi avec des donnes remarquables (limites suprieures, infrieures, cas particuliers..) pour voir si les rsultats sont cohrents et exacts.

Et avoir une arme de Bta-testeurs.

http://plasserre.developpez.com/v4-3.htm (6 sur 7) [01/03/2005 14:48:19]

Site

Une fois l'erreur trouve, il faut en dterminer la cause et la corriger. Ou bien elle est vidente la lecture du code ou bien elle n'est pas vidente et c'est l'horreur. Dans ce dernier cas il faut analyser le fonctionnement du programme pas pas, instruction par instruction en surveillant la valeur des variables.(voir la rubrique dboguage ) Les erreurs les plus communes sont: Utilisation d'un mauvais nom de variable (La dclaration obligatoire des variables vite cela) Erreur dans la porte d'une variable. Erreur dans le passage de paramtres (Attention au By Val et By Ref) Erreur dans la conception de l'algorithme. ... Quelques rgles permettent de les viter: voir Rgles de bonne programmation.

http://plasserre.developpez.com/v4-3.htm (7 sur 7) [01/03/2005 14:48:19]

Site

Site

Cours : VB.net
Travailler sur une fentre multi document.
(Multi Document Interface)

4.4

Comment crer un programme MDI ?

Comprendre les programmes MDI :


Lexemple de Word : la fentre principale (fentres MDI) contient les menus en haut, on peut ouvrir plusieurs documents dans des fentres filles.
Ci dessous l'exemple de LDF (Programme de comptabilit crit par l'auteur):

http://plasserre.developpez.com/v4-4.htm (1 sur 6) [01/03/2005 14:48:21]

Site

On a une fentre MDI (conteneur) contenant 2 fentres filles affichant chacune une anne de comptabilit.

Dans VB.NET, un MDIForm (fentre principale MDI) est une fentre quelconque dont la proprit IsMDIContainer = True. Dans la fentre fille, la proprit MDIParent indique le conteneur (C'est dire le nom de la fentre MDI) .

Les applications MDI peuvent avoir plusieurs conteneurs MDI.

Exemple d'un programme MDI. On va crer une Form1 qui est le conteneur. Une Form2 qui est la fentre fille. Dans Form1 le menu principal contient la ligne '&Nouvelle' qui cre une nouvelle instance de la fentre fille.

Cration de la fentre conteneur parent :


Crer la fentre Form1 : Dans la fentre Proprits, affectez la valeur True la proprit IsMDIContainer. Ce faisant, vous dsignez la fentre comme le conteneur MDI des fentres enfants.

http://plasserre.developpez.com/v4-4.htm (2 sur 6) [01/03/2005 14:48:21]

Site

Remarque Affecter la valeur Maximized la proprit WindowState, car il est plus facile de manipuler des fentres MDI enfants lorsque le formulaire parent est agrandi. Sachez par ailleurs que le formulaire MDI parent prend la couleur systme (dfinie dans le Panneau de configuration Windows). Ajouter les menus du conteneur : A partir de la bote outils, faire glisser un contrle MainMenu sur le formulaire. Crer un lment de menu de niveau suprieur en dfinissant la proprit Text avec la valeur &File et des lments de sous-menu appels &Nouvelle et &Close. Crer galement un lment de menu de niveau suprieur appel &Fentre. Dans la liste droulante situe en haut de la fentre Proprits, slectionnez l'lment de menu correspondant l'lment &Fentre et affectez la valeur true la proprit MdiList. Vous activez ainsi le menu Fentre qui permet de tenir jour une liste des fentres MDI enfants ouvertes et indique l'utilisateur par une coche la fentre enfant active. Il est conseill de crer un module standard qui instance la fentre principale et qui contient une procdure Main qui affiche la fentre principale: Module StandartGnral Public FrmMDI as Form1 Sub Main() FrmMDI.ShowDialog() End sub End Module Noter bien que FrmMDI est donc la fentre conteneur et est Public donc accessible tous.

Cration des fentres filles :


Pour crer une fentre fille, il suffit de donner la proprit MDIParent d'une fentre le nom de la fentre conteneur. Dessiner dans Form2 les objets ncessaire dans la fentre fille. Comment crer une instance de la fentre fille chaque fois que l'utilisateur clique sur le menu '&Nouvelle'? En premier lieu, dclarez dans le haut du formulaire Form1 une variable nomme MDIFilleActive qui contiendra la fentre fille active. Dim MDIFilleActive As Form2

La routine correspondant au MenuItem &Nouvelle (dans la fentre MDI) doit crer une instance de la
http://plasserre.developpez.com/v4-4.htm (3 sur 6) [01/03/2005 14:48:21]

Site

fentre fille : Protected Sub MDIChildNouvelle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click MDIFilleActive = New Form2() 'Indique la fentre fille son parent. MDIFilleActive.MdiParent = Me 'Affiche la fentre fille MDIFilleActive.Show() End Sub

Comment connatre la fentre fille active?


Quand on en a ouvert plusieurs? La fentre fille active est dans Me.ActiveMdiChild du conteneur Comment voir s'il existe une fentre active? If Not (ActiveMdiChild=Nothing) then 'elle existe

En mettant dans la variable MDIFilleActive la fentre active, on est sr de l'avoir toujours disposition: pour cela dans la procdure Form1_MdiActivate de la fentre MDI (qui se produit chaque fois que l'on change de fentre fille) je rcupre Me.ActiveMdiChild qui retourne la fentre fille active. Dans Form1 Private Sub Form1_MdiChildActivate.. MDIFilleActive=Me.ActiveMdiChild End Sub

Il faut comprendre que peut importe le nom de la fentre fille active, on sait simplement que la fentre fille active est dans MIDFilleActive, variable que l'on utilise pour travailler sur cette fentre fille.

Comment avoir accs aux objets de la fentre fille partir du conteneur?


De la fentre conteneur j'ai accs aux objets de la fentre fille par l'intermdiaire de la variable MDIFilleActive prcdemment mise jour; par exemple le texte d'un label MDIFilleActive.label1.text
http://plasserre.developpez.com/v4-4.htm (4 sur 6) [01/03/2005 14:48:21]

Site

Comment parcourir toutes les fentres filles?


La collection MdiChildren contient toutes les fentres filles, on peut les parcourir: Dim ff As Form2 For Each ff In Me.MdiChildren ... Next

Comment avoir accs aux objets du conteneur partir de la fentre fille?


En utilisant Me.MdiParent qui contient le nom du conteneur. Dans la fentre fille le code Me.MdiParent.text ="Document 1" affichera 'Document 1' dans la barre de titre du conteneur.

Comment une routine du module conteneur appelle une routine dans la fentre fille active?
Si une routine public de la fentre fille se nomme Affiche, on peut l'appeler par: MDIFilleActive.Affiche() Il n'est pas possible d'appeler les vnement lis aux objets.

Agencement des fentres filles :


La proprit LayoutMdi de la fentre conteneur modifie lagencement des fentres filles. 0 - MdiLayout.Cascade
http://plasserre.developpez.com/v4-4.htm (5 sur 6) [01/03/2005 14:48:21]

Site

1 - MdiLayout.TileHorizontal 2 - MdiLayout.TileVertical 3 - MdiLayout.ArrangeIcons

Exemple:

Le menu Item Cascade met les fentres filles en cascade. Protected Sub CascadeWindows_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Me.LayoutMdi(System.Windows.Forms.MdiLayout.Cascade) End Sub

http://plasserre.developpez.com/v4-4.htm (6 sur 6) [01/03/2005 14:48:21]

Site

Site

Cours : VB.net

Travailler sur le temps: 4.5 dates, heure, Timers.


On a vu qu'il existe un type de variable 'DateTime' pour grer les dates et heures, comment l'utiliser ? Nous verrons aussi comment utiliser les Timers pour dclencher des vnements intervalle rgulier, Enfin comment perdre du temps?

Une variable DateTime plus lheure.

Contient une date


Elle occupe 8 octets.(64 bits)

Elle peut contenir une date comprise entre le 1er janvier de l'anne 1 et le 31 dcembre 9999 et une heure comprise entre 0:00:00 (minuit) et 23:59:59. En fait ce qui est cod dans la variable DateTime est le nombre de graduations ( Une graduation= 100 nanosecondes.) coules compter de minuit, le 1er janvier de l'anne 1 jusqu'a la date code.

http://plasserre.developpez.com/v4-5.htm (1 sur 9) [01/03/2005 14:48:23]

Site

Nb: DateTime fait partie d'une Classe .Net , il existe aussi un type nomm Date qui contient aussi une date et l'heure et qui fait partie de VB mais qui n'est pas une classe.

Saisir une date, une heure


Pour saisir une valeur DateTime en utilisant un littral: elle doit tre place entre des signes (#) et son format doit tre de type d/m/yyyy, par exemple #31/5/1998#. Dim DateNaissance As DateTime

DateNaissance= #02/12/1951# Autre manire de saisir une date, une heure: Dim date1 As New System.DateTime(1996, 6, 3, 22, 15, 0) 'Anne, mois, jour, heure, minute, seconde, et ventuellement millisecondes)

Afficher une date, une heure.


Pour afficher les dates et heures simplement, il suffit d'utiliser .ToString MsgBox(DateNaissance.ToString) 11:00:00 'Affichera 02/12/1951

C'est le format utilis par l'ordinateur (en fonction du pays) ToString peut comporter des arguments qui formatent l'affichage: Voici quelques codes de formatage: d dd ddd affiche le jour affiche le jour sur 2 chiffres affiche le jour abrg 2 02 Dim.

dddd affiche le jour complet Dimanche

http://plasserre.developpez.com/v4-5.htm (2 sur 9) [01/03/2005 14:48:23]

Site

M MM MMM

affiche le mois affiche le mois sur 2 chiffres affiche le mois abrg

12 12 dc

MMMM affiche le mois complet dcembre y, yy, yyyy affiche 1 2 chiffres, deux chiffres ou quatre chiffre 51, 51, 1951 H 24h) HH affiche l'heure sur un ou deux chiffres (format

affiche l'heure sur 2 chiffres

h et hh font de mme mais avec un format 12 h. t, tt affiche l'heure en format 12h matin, aprs midi) plus A ou P (pour

m, mm, s, ss, f, ff font de mme pour les minutes, secondes et millisecondes. : et / sont les sparateurs heure et date. Exemple: MsgBox(DateNaissance.ToString("dddd d MMMM yyyy")) 'Affichera Dimanche 2 dcembre 1951 MsgBox(DateNaissance.ToString("hh:mm") 11:00 MsgBox(DateNaissance.ToString("d/MM/yy") 02/12/51 'Affichera

'Affichera

MsgBox(DateNaissance.ToString("%h) 'Affichera 11 le caractre % est utilis quand on affiche une seule donne. On peut enfin utiliser les mthodes de la classe DateTime!! DateNaissance.ToLongDateString dcembre 1951 DateNaissance.ToShortDateString 'dimanche 02

'02/12/1951

http://plasserre.developpez.com/v4-5.htm (3 sur 9) [01/03/2005 14:48:23]

Site

DateNaissance.ToLongTimeString DateNaissance.ToShortTimeString

'11:00:00 '11:00

Variable "temps"
Un TimeSpan est une unit de temps (un intervalle de temps) exprime en jours, heures, minutes, secondes; Un TimeSpan initialis avec 1.0e+13 graduations reprsente "11.13:46:40", ce qui correspond 11 jours, 13 heures, 46 minutes et 40 secondes. L'espace de nom System.DateTime. contient une multitude de membre:

Add, Substrat
On peut ajouter ou soustraire un TimeSpan un DateTime, on obtient un DateTime. En clair on peut ajouter une date une dure, on obtient une date. ' Quel sera la date dans 36 jours?. Dim today As System.DateTime Dim duration As System.TimeSpan Dim answer As System.DateTime today = System.DateTime.Now duration = New System.TimeSpan(36, 0, 0, 0) answer = today.Add(duration) On peut ajouter ou soustraire 2 dates, on obtient une TimeSpan Dim diff1 As System.TimeSpan diff1 = date2.Subtract(date1)

AddDay, AddMouths, AddHours, AddSeconds, AddMiliseconds


Permet d'ajouter des jours, des mois, des heures, des secondes, ou des millisecondes une date, on obtient une

http://plasserre.developpez.com/v4-5.htm (4 sur 9) [01/03/2005 14:48:23]

Site

date. Answer=today.AddDay(36)

Year, Mouth, Day, Hour, Minute, Seconde, Millisecond


Permettent d'extraire l'anne, le mois, le jour, l'heure, les minutes, les secondes, les millisecondes d'une date: I=DateNaissance.Year ' => I=1951 'donne le jour d'aujourd'hui

I=System.DateTime.Now.Day (1 31)

DayOfWeek
Retourne le jour de la semaine (0 pour dimanche 6 pour samedi) I=DateNaissance.DayOfWeek un dimanche. DayForYear existe aussi. 'I=0 car le 02/12/1951 est

Now, ToDay, TimeOfDay


Now est la date et l'heure du systme.(L, maintenant) ToDay est la date du systme avec l'heure 0. TimeOfDay est l'heure actuelle.

Ticks
Donne le nombre de graduations d'un DateTime. AddTicks peut tre utilis.

Comparaison de DateTime
On utilise Compare: DateTime.Compare(t1, t2) retourne 0 si t1=t2, une valeur positive si t1>t2 ngative si t1<t2.

http://plasserre.developpez.com/v4-5.htm (5 sur 9) [01/03/2005 14:48:23]

Site

Dim t1 As New DateTime(100) Dim t2 As New DateTime(20) If DateTime.Compare(t1, t2) Console.WriteLine("t1 > End If If DateTime.Compare(t1, t2) Console.WriteLine("t1 = End If If DateTime.Compare(t1, t2) Console.WriteLine("t1 < End If > 0 Then t2") = 0 Then t2") < 0 Then t2")

On peut aussi utiliser la mthode op_Equality de l'espace de nom pour voir si 2 dates sont gales: areEqual = System.DateTime.op_Equality(april19, otherDate)

Il existe aussi op_GreaterThan et beaucoup d'autres.

Comment saisir rapidement une date dans un programme?


En ajoutant une fentre un contrle DateTimePicker En mode Run , il apparat une zone rectangulaire avec la date systme dedans:

Si l'utilisateur clique sur la flche droulante, il apparat une fentre calendrier.

Il suffit pour l'utilisateur de cliquer sur la bonne date.

http://plasserre.developpez.com/v4-5.htm (6 sur 9) [01/03/2005 14:48:23]

Site

Le programmeur rcupre la date dans DateTimePicker1.value Il existe, bien sur, de multiples proprits et plusieurs vnements, le plus remarquable tant: ValueChanged.

MonthCalendar est un contrle similaire mais qui reste toujours ouvert. De plus grce CalendarDimension on peut afficher plusieurs mois.

Les Timers.
Pour dclencher un vnement intervalle rgulier, il faut utiliser les minuteries ou 'Timer'. Prendre le contrle Timer dans le Boite outils, l'ajouter la fentre. Il apparat en bas sous la fentre dans la barre d'tat des composants. Il n'apparat pas l'utilisateur dans la fentre en mode Run. Il est trs simple utiliser. La proprit Interval contient la priodicit de l'vnement Ticks , vnement qui se dclenche rgulirement. Interval est en millisecondes. Pour Interval=500 l'vnement Ticks se dclenche toutes les 1/2 secondes. Start et Stop dclenche et arrte la minuterie. (De mme Enabled active ou non ) Exemple: Faire clignoter un label toutes les 1/2 secondes. Crer le label1 Ajouter un Timer1 (qui se place en bas sous la fentre) Private Sub Form3_Load(...) Timer1.Interval = 500 Timer1.Start() End Sub Private Sub Timer1_Tick(..) Label1.Visible = Not (Label1.Visible) End Sub

http://plasserre.developpez.com/v4-5.htm (7 sur 9) [01/03/2005 14:48:23]

Site

Un vnement Timer_Tick se produit toutes les 1/2 secondes et inverse la valeur de la proprit visible du label. (Si elle tait gale True, elle devient gale False et vice versa.) Mais attention: Timer des restrictions de taille:
q

Si votre application ou une autre demande beaucoup au systme (boucles longues, calculs complexes, accs intensifs un priphrique, un rseau ou un port, par exemple), les vnements de minuterie peuvent tre moins frquent que spcifi dans la proprit Interval. Il n'est pas garanti que l'intervalle s'coule dans le temps exact!! L'intervalle peut tre compris entre 1 et 64 767 millisecondes: l'intervalle le plus long ne dpasse pas de beaucoup la minute (64,8 secondes). Le systme gnre 18 graduations la seconde (mme si la valeur de la proprit Interval est mesure en millisecondes, la vritable prcision d'un intervalle ne dpassera pas un dix-huitime de seconde).

Donc pour faire clignoter un label :OUI Pour compter prcisment un intervalle de temps:NON Mais il y a d'autres mthodes.

Perdre du temps:
Parfois on a besoin de perdre du temps: Exemple ne rien faire pendant 3 secondes puis poursuivre..
q

Il est exclu de faire des boucles vides:

For i=0 to 100000 ' le temps coul est variable en fonction des machines.. Next i
q

Autre mthode : on boucle tant que l'heure courante est infrieure l'heure du dpart+3s

Dim t As DateTime=DateTime.Now Do While DateTime.Now <t.AddSeconds(3)

http://plasserre.developpez.com/v4-5.htm (8 sur 9) [01/03/2005 14:48:23]

Site

Loop Mais cela accapare le processeur.


q

On peut utiliser un Timer et vrifier dans la procdure Tick si le temps est coul. On peut utiliser Thread.Sleep System.Threading.Thread.Sleep(3000)

Chronomtrer:
Parfois on a besoin de chronomtrer un vnement: Voir la rubrique Chronomtrer 7-4 L'exemple sur l'horloge est aussi didactique.

http://plasserre.developpez.com/v4-5.htm (9 sur 9) [01/03/2005 14:48:23]

Site

Site

Cours : VB.net
Les fichiers.

4.6

Comment lire et crire dans des fichiers du texte, des octets, du XML du Rtf ?

Gnralits et rappels:
Le mot 'fichier' est a prendre au sens informatique: ce n'est pas un ensemble de fiches mais plutt un ensemble d'octets. Un fichier peut tre un programme (Extension .EXE), du texte (Extension .TXT ou .DOC....), une image (Extension .BMP .GIF .JPG...), une base de donnes (.MDB..) du son, de la vido.... Pour travailler avec du texte, des octets, des donnes trs simple (sans ncessit d'index, de classement..), on utilise les mthodes dcrites dans cette page: travail direct dans les fichiers squentiels, alatoires, binaires. Mais ds que les informations sont plus structures, il faut utiliser les bases de donnes (Il y a plusieurs chapitre plus loin traitant des Base de donnes). Un fichier a un nom: 'Image.GIF' , une extension: '.GIF' qui en indique gnralement le type de contenu , des attributs (Longueur, Date de cration, de modification, Fichier en lecture seule ou non..). On voit cela dans l'explorer Windows:

http://plasserre.developpez.com/v4-6.htm (1 sur 16) [01/03/2005 14:48:26]

Site

Un fichier est compos d'enregistrements qui sont des 'paquets' de donnes; suivant le type de fichier un enregistrement peut correspondre une ligne, un octet, un groupe d'octets..

Comment utiliser les fichiers? Voici le plan de cet article:

A- Il est conseill de travailler avec les Classes du Frameworks


Avec la Classe FileInfo, on obtient des renseignements sur le fichier. Pour lire crire dans un fichier (en dehors des bases de donnes), il y a plusieurs mthodes: Avec la Classe System.Io on a a notre disposition StreamReader StreamWriter BinaryReader BinaryWriter FileStream: Pour lire ou crire dans un fichier, il faut l'ouvrir (Open), lire ou crire en utilisant un flux de donnes (Stream) puis le refermer (Close). Le Stream (flux, torrent, courant) est une notion gnrale, c'est donc un flux de donnes provenant ou allant vers un fichier, un port, une connexion TCP/IP... L'accs est squentiel: les donnes sont traites la fin du fichier. du dbut

B- Il existe toujours la mthode classique du FileOpen:


On ouvre le fichier en mode squentiel, alatoire, binaire, on lit X enregistrements, on referme le fichier.

C- Avec certains objets, on grent automatiquement les lectures critures sur disque.
Comme avec le RichTextBox par exemple.

En rsum, pour travailler sur les fichiers, on dispose:

http://plasserre.developpez.com/v4-6.htm (2 sur 16) [01/03/2005 14:48:26]

Site
q

des instructions VB runtime traditionnelles: FileOpen WriteLine.. des instructions du FSO (FileObjetSystem) pour la compatibilit avec les langages de script. de l'espace de nom System.IO avec les Class et objets .NET

Les 2 premiers font appel au troisime; donc pourquoi ne pas utiliser directement les Classe .NET?

A- Classe Stream.

FileInfo et File,

Pour travailler sur les fichiers, il faut au pralable taper: Imports System.IO La classe File est utilise pour travailler sur un ensemble de fichier ou un fichier (sans instanciation pralable), la Classe FileInfo donne des renseignements sur un fichier particulier (Il faut instancer au pralable un objet FileInfo). La Classe File possde les mthodes suivantes. Exists Create Copy Delete Teste si le fichier existe. Cre le fichier Copie le fichier Efface le fichier Lire ou crire les

GetAttributes , SetAttributes attributs. Move

Dplacement de fichier

Toutes les mthodes Open (pour un FileStream) OpenRead, OpenWrite, OpenText. Exemple: Un fichier existe-t-il? Afficher True s'il existe: Label1.Text = File.Exists("vessaggi.gif").ToString

http://plasserre.developpez.com/v4-6.htm (3 sur 16) [01/03/2005 14:48:26]

Site

La Classe FileInfo possde les proprits suivantes. Name FullName Extension Length Directory DirectoryName Exists LastAccessTime aussi. Attributes Date du dernier accs, LastWriteTime existe Nom du fichier (sans extension) Nom complet avec extension Extension Longueur du (.txt par exemple) fichier.

Rpertoire parent Rpertoire ou se trouve le fichier

Attributs

Il faut faire un AND entre Attributes et une valeur de l'numration FileAttributes ( Archive, Compressed, Directory, Encrypted, Hidden, Normal, ReadOnly, System, Temporaly). Pour tester ReadOnly par exemple: Fi.Attributes And FileAttributes.ReadOnly le fichier est ReadOnly Et les mthodes suivantes: Create, Delete, MoveTo AppendTex, CopyTo Open, OpenRead, OpenWrite, OpenText.. On voit que toutes les informations sont accessibles. Retourne True si

Exemple: Pour un fichier, afficher successivement le nom, le nom avec rpertoire, le rpertoire, la longueur, la date de dernire criture et si le fichier est en ReadOnly. Dim sNom As String = "c:\monfichier.txt" Dim Fi As FileInfo Fi=New FileInfo( sNom)
http://plasserre.developpez.com/v4-6.htm (4 sur 16) [01/03/2005 14:48:26]

Site

MsgBox("Nom="& Fi.Name) MsgBox("Nom complet ="& Fi.FullName) MsgBox("Rpertoire="& Fi.DirectoryName) MsgBox("Longueur="& Fi.Lenght.ToString) MsgBox("Date der modification="& Fi.LastWriteTime.ToShortDateString) MsgBox("ReadOnly="& (Fi.Attributes And FileAttributes.ReadOnly).ToString)

Utiliser les "Stream".

Le Stream (flux, torrent, courant) est une notion gnrale, c'est donc un flux de donnes provenant ou allant vers un fichier, un port, une connexion TCP/IP... Ici on utilise un Stream pour lire ou crire dans un fichier. L'accs est squentiel: les donnes sont traites du dbut la fin du fichier.

Pour crire

dans un fichier texte:

Il faut instancer un objet de la classe StreamWriter . On crit avec Write ou WriteLine.(ajoute un saut de ligne) Enfin on ferme avec Close. On peut instancer avec le constructeur de la classe StreamWriter et avec New, ou par la Classe File. Dim SW As New StreamWriter ("MonFichier.txt") ' cre ou si existe crase

Il existe une surcharge permettant d'ajouter la fin du fichier: Dim SW As New StreamWriter ("MonFichier.txt", True) ' cre ou si existe ajoute

Avec la classe File: Dim SW As StreamWriter=File.CreateText ("MonFichier.txt") ' cre ou si existe crase Dim SW As StreamWriter = File.AppendText("MonFichier.txt") ' cre ou si existe ajoute

Ensuite pour crire 2 lignes: SW.WriteLine ("Bonjour")

http://plasserre.developpez.com/v4-6.htm (5 sur 16) [01/03/2005 14:48:26]

Site

SW.WriteLine ("Monsieur")

Enfin on ferme: SW.Close()

Pour lire

dans un fichier Texte:

Il faut instancier un objet de la classe StreamReader. On lit avec Read (un nombre d'octet) ReadLine (une ligne) ReadToEnd (de la position courante jusqu' la fin). Enfin on ferme avec Close. Avec le constructeur de la Classe Stream Reader: Dim SR As New StreamReader ("MonFichier.txt") Avec la Classe File: Dim SR As StreamReader=File.OpenText ("MonFichier.txt") '

Comment lire chaque ligne du fichier et s'arrter la fin? En effet on ne sait pas habituellement combien le fichier contient de ligne, si le fichier contient 2 lignes il faut en lire 2 et s'arrter sinon on tente de lire aprs la fin du fichier et cela dclenche une erreur. 3 solutions: 1-Utiliser ReadToEnd qui lit en bloc jusqu' la fin. 2-Avant ReadLine mettre un Try: quand l'erreur 'fin de fichier' survient elle est intercepte par Catch qui sort du cycle de lecture et ferme le fichier. 3-Utiliser Peek qui lit dans le fichier un caractre mais sans modifier la position courante de lecture. La particularit de Peek est de retourner -1 s'il n'y a plus de caractre lire sans dclencher d'erreur, d'exception. La troisime solution est la plus gnrale et la plus lgante: Do Until SR.Peek=-1 Ligne=SR.ReadLine() Loop Enfin on ferme:

http://plasserre.developpez.com/v4-6.htm (6 sur 16) [01/03/2005 14:48:26]

Site

SR.Close()

Notion de 'Buffer', utilisation de Flush.


En fait quand on crit des informations sur le disque, le logiciel travaille sur un buffer ou mmoire tampon qui est en mmoire vive. Si on crit des lignes dans le fichier, elles sont 'crites' dans le buffer en mmoire vive. Quand le buffer est plein,(ou que l'on ferme le fichier) l'enregistrement du contenu du buffer est effectu effectivement sur le disque. Ce procd est gnral l'criture et la lecture de fichier mais totalement transparent car le programmeur ne se proccupe pas des buffers. Parfois, par contre, mme si on a enregistr peu d'information, on veut tre sr qu'elle est sur le disque, il faut donc forcer l'enregistrement sur disque mme si le buffer n'est pas plein, on utilise alors la mthode Flush. SW.Flush() Le fait de fermer un fichier par Close, appelle automatiquement Flush() ce qui enregistre des donnes du buffer.

B- Utiliser "FileOpen".
Visual Basic fournit trois types d'accs au fichier :
q

l'accs squentiel, pour lire et crire des fichiers 'texte' de manire continue, chaque donne est enregistre successivement du dbut la fin ; les enregistrements n'ont pas la mme longueur, ils sont spars par un sparateur (des virgules ou des retours la ligne).

Philippe JeanFranois Louis


On ne peut qu'crire le premier enregistrement puis le second, le troisime, le quatrime... Pour lire c'est pareil: on ouvre , on lit le premier, le second, le troisime, le quatrime.... Pour lire le troisime enregistrement , il faut lire avant les 2 premiers.
http://plasserre.developpez.com/v4-6.htm (7 sur 16) [01/03/2005 14:48:26]

Site

l'accs alatoire (Random), (on le nomme parfois accs direct) pour lire et crire des fichiers texte ou binaire constitus d'enregistrements de longueur fixe ; on peut avoir directement accs un enregistrement partir de son numro.

Philippe 1 place de la gare Jean 35 rue du clotre Pierre 14 impasse du muse Louis sdf

Les enregistrements ont une longueur fixe: il faut prvoir!! si on dcide de 20 caractres pour le prnom, on ne pourra pas en mettre 21, le 21me sera tronqu, l'inverse l'enregistrement de 15 caractres sera complt par des blancs. Il n'y a pas de sparateur entre les enregistrements. Les enregistrements peuvent tre constitus d'un ensemble de variables: une structure, ici prnom et adresse. Ensuite on peut lire directement n'importe quel enregistrement,le second enregistrement par exemple, ou crire sur le 3me.

l'accs binaire, pour lire et crire dans tous les fichiers , on lit ou crit un nombre d'octet dsir..

En pratique: Les fichiers squentiels sont bien pratique pour charger une srie de ligne, (toujours la mme) dans une ListBox par exemple.

Faut-il utiliser les fichiers squentiels ou random ( accs


http://plasserre.developpez.com/v4-6.htm (8 sur 16) [01/03/2005 14:48:26]

Site

alatoire) pour crer par exemple un petit carnet d'adresse? Il y a 2 manires de faire:
q

Crer un fichier random et lire ou crire dans un enregistrement pour lire ou modifier une adresse. Crer un fichier squentiel. A l'ouverture du logiciel lire squentiellement toutes les adresses et les mettre dans un tableau (de structure). Pour lire ou modifier une adresse: lire ou modifier un lment du tableau. En sortant du programme enregistrer tous les lments du tableau squentiellement.(Enregistrer dans un nouveau fichier, effacer l'ancien, renommer le nouveau avec le nom de l'ancien). Bien sur s'il y a de nombreux lments dans une adresse, un grand nombre d'adresse, il faut utiliser une base de donnes.

Si on ouvre un fichier en criture et qu'il n'existe pas sur le disque, il est cre. Si on ouvre un fichier en lecture et qu'il n'existe exception est dclenche (une erreur). On utilisait voir si un fichier existait: on l'ouvrait, s'il n'y d'erreur c'est qu'il existait. Mais maintenant il y simple pour voir si un fichier existe. pas, une cela pour avait pas a plus

Si on ouvre un fichier et que celui-ci est dj ouvert par un autre programme, il se dclenche gnralement une erreur (sauf si on l'ouvre en Binaire, c'tait le cas en VB6, c'est vrifier en VB.NET). Pour ouvrir un fichier on utilise FileOpen FileOpen (FileNumber, FileName, Mode, Access, Share, RecordLength) Paramtres de FileOpen FileNumber A tous fichier est affect un numro unique, c'est ce numro que l'on utilisera pour indiquer sur quel fichier pratiquer une opration.. Utilisez la fonction FreeFile pour obtenir le prochain numro de fichier disponible. FileName
http://plasserre.developpez.com/v4-6.htm (9 sur 16) [01/03/2005 14:48:26]

Site

Obligatoire. Expression de type String spcifiant un nom de fichier. Peut comprendre un nom de rpertoire ou de dossier, et un nom de lecteur. Mode Obligatoire. numration OpenMode spcifiant le mode d'accs au fichier : Append, Binary, Input (squentiel en lecture), Output (squentiel en criture) ou Random (accs alatoire). Access Facultatif. Mot cl spcifiant les oprations autorises sur le fichier ouvert : Read, Write ou ReadWrite. Par dfaut, la valeur est OpenAccess.ReadWrite. Share Facultatif. Spcifiant si un autre programme peut avoir en mme temps accs au mme fichier : Shared (permet l'accs aux autres programmes), Lock Read (interdit l'accs en lecture), Lock Write (interdit l'accs en criture) et Lock Read Write (interdit totalement l'accs). Le processus OpenShare.Lock Read Write est paramtr par dfaut. RecordLength Facultatif. Nombre infrieur ou gal 32 767 (octets). Pour les fichiers ouverts en mode Random, cette valeur reprsente la longueur de l'enregistrement. Pour les fichiers squentiels, elle reprsente le nombre de caractres contenus dans la mmoire tampon. Pour crire dans un fichier on utilise Print , Write, WriteLine. dans les fichiers squentiels FilePut dans les fichiers alatoires

Pour lire dans un fichier on utilise: Input, LineInput dans les fichiers squentiels FileGet dans les fichiers alatoires. Pour fermer le fichier on utilise FileClose() Numro de fichier: Pour reprer chaque fichier, on lui donne un numro unique (de type Integer). La fonction FreeFile retourne le premier numro libre. Dim No as integer No= Freefile() Ensuite on peut utiliser No FileOpen( No, "MonFichier", OpenMode.Output)

http://plasserre.developpez.com/v4-6.htm (10 sur 16) [01/03/2005 14:48:26]

Site

Print(No,"toto") FileClose (No)

Fichier squentiel: Vous devez caractres caractres caractres spcifier si vous voulez lire (entrer) des issus du fichier (mode Input), crire (sortir) des vers le fichier (mode Output) ou ajouter des au fichier (mode Append).

Ouvrir le fichier 'MonFichier' en mode squentiel pour y crire: Dim No as integer No= Freefile FileOpen( No, "MonFichier", OpenMode.Output) Pour crire dans le fichier squentiel: on utilise Write ou WriteLine Print ou PrintLine:
q

La fonction Print crit dans le fichier sans aucun caractre de sparation. Print(1,"toto") Print(1,"tata") Print(1, 1.2) Donne le fichier 'tototata1.2'

La fonction Write insre des points-virgules entre les lments et des guillemets de part et d'autre des chanes au moment de leur criture dans le fichier, les valeurs boolens et les variables DateTime sont crites sans problmes. Write(1,"toto") Write(1,"tata") Write(1, 1.2) Donne le fichier '"toto";"tata";1.2"

Attention s'il y a des points-virgules dans les chanes , elles seront considres comme sparateurs!! ce qui entrane des erreurs la lecture; il faut mettre la chane entre "" ou bien remplacer le point-virgule par un caractre non utilis (# par exemple) avant de l'enregistrer puis aprs la lecture remplacer '#' par ';'

http://plasserre.developpez.com/v4-6.htm (11 sur 16) [01/03/2005 14:48:26]

Site

Il faut utiliser Input pour relire ces donnes (Input utilise aussi le pointvirgule comme sparateur.
q

La fonction WriteLine insre un caractre de passage la ligne, c'est--dire un retour chariot+ saut de ligne (Chr(13) + Chr(10)),On lira les donnes par LineInput. WriteLine(1,"toto") WriteLine(1,"tata") WriteLine(1, 1.2) Donne le fichier "toto" "tata" 1.2 Il faut utiliser LineInput pour relire ces donnes car il lit jusqu'au retour Chariot, saut de ligne.

Toutes les donnes crites dans le fichier l'aide de la fonction Print respectent les conventions internationales ; autrement dit, les donnes sont mises en forme l'aide du sparateur dcimal appropri. Si l'utilisateur souhaite produire des donnes en vue d'une utilisation par plusieurs paramtres rgionaux, il convient d'utiliser la fonction Write

EOF (NumroFichier) veut dire 'End Of File', (Fin de Fichier) il prend la valeur True si on est la fin du fichier et qu'il n'y a plus rien lire. LOF (NumroFichier) veut dire 'Lenght Of File', il la longueur du fichier. retourne

Exemple: Lire chaque ligne d'un fichier texte. Dim Line As String FileOpen(1, "MonFichier.txt", OpenMode.Input) ' Ouvre en lecture. While Not EOF(1) ' Boucler jusqu' la fin du fichier Line = LineInput(1) ' Lire chaque ligne Debug.WriteLine(Line) ' Afficher chaque ligne sur la console.

http://plasserre.developpez.com/v4-6.htm (12 sur 16) [01/03/2005 14:48:26]

Site

End While FileClose(1) ' Fermer.

Ici on a utilis une boucle While.. End While qui tourne tant que EOF est Faux. Quand on est la fin du fichier EOF (End of File)devient gal True et on sort de la boucle.

Fichier accs alatoire:


On ouvre le fichier avec FileOpen et le mode OpenMode.Random, ensuite on peut crire un enregistrement grce FilePut() ou en lire un grce FileGet(). On peut se positionner sur un enregistrement prcis (le 2eme, le 15me) avec Seek. Le premier enregistrement est l'enregistrement numro 1 Exemple: Fichier des adresses Crer une structure Adresse, on utilise <VBFixedString( )> pour fixer la longueur.

Public Structure Adresse <VBFixedString(20)>Dim Nom <VBFixedString(20)>Dim Rue <VBFixedString(20)>Dim Ville End Structure

As String As String As String

'Ouvrir le fichier, comme il n'existe pas, cela entrane sa cration Dim FileNum As Integer, RecLength As Long, UneAdresse As Adresse ' Calcul de la longueur de l'enregistrement RecLength = Len(UneAdresse) ' Rcuprer le premier numro de fichier libre. FileNum = FreeFile ' Ouvrir le fichier. FileOpen(FileNum, "MONFICHIER.DAT", OpenMode.Random, , , RecLength) Pour crire des donnes sur le second enregistrement par exemple: UneAdresse.Nom = "Philippe" UneAdresse.Rue = "Grande rue" UneAdresse.Ville = "Lyon" FilePut(FileNum, UneAdresse,2 )
http://plasserre.developpez.com/v4-6.htm (13 sur 16) [01/03/2005 14:48:26]

Site

Dans cette ligne de code, FileNum contient le numro utilis par la fonction FileOpen pour ouvrir le fichier, 2 est le numro de l'enregistrement ou sera copi la variable 'UneAdresse' (c'est un long si on utilise une variable) et UneAdresse, dclar en tant que type Adresse dfini par l'utilisateur, reoit le contenu de l'enregistrement. Cela crase l'enregistrement 2 s'il contenait quelque chose. Pour crire la fin du fichier, ajouter un enregistrement il faut connatre le nombre d'enregistrement et crire l'enregistrement suivant. Dim last as long un long 'noter que le numro d'enregistrement est

Pour connatre le nombre d'enregistrement, il faut diviser la longueur du fichier par la longueur d'un enregistrement. last = FileLen("MONFICHIER.DAT") / RecLength On ajoute 1 pour crer un nouvel enregistrement. FilePut(FileNum, UneAdresse,last+1 )

Pour lire un enregistrement (le premier par exemple): FileGet(FileNum, UneAdresse, 1)


Attention Option Strict doit tre false .

Si option Strict est True, la ligne qui prcde gnre une erreur car le second argument attendu ne peut pas tre une variable 'structure'. Pour que le second argument de FileGet (Une adresse) soit converti dans une variable Structure automatiquement Option Strict doit donc tre false. (Il doit bien y avoir un moyen de travailler avec Option Strict On et de convertir explicitement mais je ne l'ai pas trouv) Remarque: si le fichier contient 4 enregistrements, on peut crire le 10me enregistrement, VB ajoute entre le 4me et le 10me, 5 enregistrements vides. On peut lire un enregistrement qui n'existe pas, cela ne dclenche pas d'erreur. Le numro d'enregistrement peut tre omis dans ce cas c'est l'enregistrement courant qui est utilis. On positionne l'enregistrement courant avec Seek: Exemple: Lire le 8me enregistrement:

http://plasserre.developpez.com/v4-6.htm (14 sur 16) [01/03/2005 14:48:26]

Site

Seek(FileNum,8) FileGet(FileNum,Une Adresse) Suppression d'enregistrements Vous pouvez supprimer le contenu d'un enregistrement en effaant ses champs (enregistrer la mme position des variables vides), mais l'enregistrement existe toujours dans le fichier. Pour enlever un enregistrement supprim

1. Crez un nouveau fichier. 2. Copiez tous les enregistrements valides du fichier


d'origine dans le nouveau fichier (pas ceux qui sont vides). 3. Fermez le fichier d'origine et utilisez la fonction Kill pour le supprimer. 4. Utilisez la fonction Rename pour renommer le nouveau fichier en lui attribuant le nom du fichier d'origine.

Fichier binaire:
Dans les fichiers binaires on travaille sur les octets. La syntaxe est la mme que pour les fichiers Random, sauf qu'on travaille sur la position d'un octet et non sur un numro d'enregistrement. Pour ouvrir un fichier binaire: FileOpen(FileNumber, FileName, OpenMode.Binary) FileGet et FilePut permettent de lire ou d'crire des octets . FileOpen(iFr, ReadString, OpenMode.Binary) MyString = New String(" "c, 15) 'Crer une chane de 15 espaces FileGet(iFr, MyString) ' Lire 15 caractres dans MyString FileClose(iFr) MsgBox(MyString) Le fait de crer une variable de 15 caractres et de l'utiliser dans FileGet permet de lire 15 caractres.

C-Utilisation du Contrle RichTextBox.


http://plasserre.developpez.com/v4-6.htm (15 sur 16) [01/03/2005 14:48:26]

Site

On rappelle que du texte prsent dans un contrle RichTextBox peut tre enregistr ou lu trs simplement avec les mthodes .SaveFile et .LoadFile. Le texte peut tre du texte brut ou du RTF. richTextBox1.SaveFile(FileName, RichTextBoxStreamType.PlainText) Si on remplace .PlainText par .RichText cest le texte enrichi et non le texte brut qui est enregistr Pour lire un fichier il faut employer .LoadFile avec la mme syntaxe. Simple, non!!!

Lire ou crire des octets ou du XML:


BinaryWriter et BinaryReader des donnes binaires. XMLTextWriter et XMLTextReader permettent d'crire ou de lire crit et lit du Xml.

http://plasserre.developpez.com/v4-6.htm (16 sur 16) [01/03/2005 14:48:26]

Site

Site

Cours : VB.net
Travailler sur les rpertoires.

4.7

Comment crer, copier effacer des rpertoires (ou dossiers)?

Classe

DirectoryInfo et la Classe Directory

Pour travailler sur les dossiers (ou rpertoires), il faut au pralable taper: Imports System.IO La classe Directory est utilise pour travailler sur un ensemble de dossier, la Classe directoryInfo donne des renseignements sur un dossier particulier (Aprs instanciation ). La Classe Exists CreateDirectory Delete Move GetCurrentDirectory en cours SetCurrentDirectory GetDirectoryRoot GetDirectories spcifi. GetFiles

Directory

possde les mthodes suivantes.

Teste si le dossier existe. Cre le dossier Efface le dossier Dplacement de dossier Retourne le dossier de travail de l'application

Dfinit le dossier de travail de l'application. Retourne le dossier racine du chemin spcifi. Retourne le tableau des sous dossiers du dossier

Retourne les fichiers du dossier spcifi.

http://plasserre.developpez.com/v4-7.htm (1 sur 5) [01/03/2005 14:48:29]

Site

GetFilesSystemEntries Retourne fichier et sous dossier avec possibilit d'un filtre. GetLogicalDrives GetParent Retourne les disques Retourne le dossier parent du dossier spcifi.

La Classe Directory est statique : on l'utilise directement. Exemple: Afficher dans une listeBox l'application: les sous dossiers du rpertoire de

Dim SousDos() As String= Directory.GetDirectories(Directory.GetCurrentDirectory) Dim Dossier As String For Each Dossier In SousDos List1.Items.Add(Dossier) Next La Classe DirectoryInfo possde les proprits suivantes. Name Full Name Exists Parents Root Dossier parent Racine du dossier Nom du dossier (sans extension) Chemin et nom du dossier

La Classe DirectoryInfo n'est pas statique : il faut instancer un dossier avant de l'utiliser. Il y a aussi les mthodes suivantes: Create, Delete, MoveTo CreateSubdirectory GetDirectories GetFiles GetFileSystemInfos Exemple: Afficher le rpertoire parent d'un dossier: Dim D As DirectoryInfo D= New DirectoryInfo( MonDossier) MsgBox(D.Parent.ToString)
http://plasserre.developpez.com/v4-7.htm (2 sur 5) [01/03/2005 14:48:29]

Retourne les sous-dossiers Retourne des fichiers

Site

Classe

Path

La Classe statique Path a des mthodes simplifiant la manipulation des rpertoires: Exemple: Si C= "C:\Windows\MonFichier.txt" retourne "C:\Windows

Path.GetDirectoryName(C)

Path.GetFileName(C) retourne "Monfichier.txt" Path.GetExtension(C) retourne ".txt" Path.GetFileNameWithoutExtension(C) retourne "MonFichier" Path.PathRoot(C) retourne "c:\" Il y a aussi les mthodes ChangeExtension, Combine, HasExtension...

Classe Environment
Donne des informations concernant l'environnement et la plate-forme en cours ainsi que des moyens pour les manipuler. Par exemple: les arguments de la ligne de commande, le code de sortie, les paramtres des variables d'environnement, le contenu de la pile des appels, le temps coul depuis le dernier dmarrage du systme ou le numro de version du Common Language Runtime mais aussi certains rpertoires . Environment.CurrentDirectory processus en cours dmarre. Environment.MachineName local. 'donne le rpertoire courant : ou le

'Obtient le nom NetBIOS de l'ordinateur

Environment.OsVersion 'Obtient un objet contenant l'identificateur et le numro de version de la plate-forme en cours. Environment.SystemDirectory rpertoire du systme 'Obtient le chemin qualifi complet du

Environment.UserName 'Obtient le nom d'utilisateur de la personne qui a lanc le thread en cours. La fonction GetFolderPath avec un argument faisant partie de l'numration SpecialFolder retourne le rpertoire d'un tas de choses: Exemple: Quel est le rpertoire Systme? Environment.GetFolderPath(Environment.SpecialFolder.System)

http://plasserre.developpez.com/v4-7.htm (3 sur 5) [01/03/2005 14:48:29]

Site

Comment rcuprer le nom des disques? Dim drives As String() = Environment.GetLogicalDrives()

Comment rcuprer la ligne de commande? Dim arguments As String() = Environment.GetCommandLineArgs()

On peut aussi utiliser les anciennes mthodes VB:


CurDir() retourne le chemin d'accs en cours. MyPath = CurDir() MyPath = CurDir("C"c)

Dir() Retourne une chane reprsentant le nom d'un fichier, d'un rpertoire ou d'un dossier qui correspond un modle ou un attribut de fichier spcifi ou l'tiquette de volume d'un lecteur. 'vrifier si un fichier existe: ' Retourne "WIN.INI" si il existe. MyFile = Dir("C:\WINDOWS\WIN.INI") ' Retourne le fichier spcifi par l'extension . MyFile = Dir("C:\WINDOWS\*.INI") 'Un nouveau Dir retourne le fichier suivant MyFile = Dir() ' On peut surcharger avec un attribut qui sert de filtre . MyFile = Dir("*.TXT", vbHidden) ' affiche les fichiers cachs ' Recherche les sous rpertoires. MyPath = "c:\" ' Set the path. MyName = Dir(MyPath, vbDirectory)

ChDrive change le lecteur actif. La fonction lve une exception si le lecteur n'existe pas.

ChDrive("D")
MkDir cre un rpertoire ou un dossier. Si aucun lecteur n'est spcifi, le nouveau rpertoire ou dossier est cr sur le lecteur actif.

http://plasserre.developpez.com/v4-7.htm (4 sur 5) [01/03/2005 14:48:29]

Site

MkDir("C:\MYDIR") RmDir enlve un rpertoire ou un dossier existant. ' Vrifier que le rpertoire est vide sinon effacer les fichier avec Kill. RmDir ("MYDIR") ChDir change le rpertoire par dfaut mais pas le lecteur par dfaut. ChDir("D:\TMP") L'excution de changements relatifs de rpertoire s'effectue l'aide de "..", comme suit : ChDir("..") ' Remonte au rpertoire parent. FileCopy Copier un fichier. FileCopy(SourceFile, DestinationFile) Rename Renommer un fichier, un rpertoire ou un dossier. Rename (OldName, NewName) FileLen donne la longueur du fichier, SetAttr et GetAttr modifie ou lit les attributs du fichier
Result = GetAttr(FName) Result est une combinaison des attributs. Pour dterminer les attributs dfinis, utilisez l'oprateur And pour effectuer une comparaison d'oprations de bits entre la valeur retourne par la fonction GetAttr et la valeur de l'attribut. Si le rsultat est diffrent de zro, cet attribut est dfini pour le fichier dsign. Par exemple, la valeur de retour de l'expression And suivante est zro si l'attribut Archive n'est pas dfini : Result = GetAttr(FName) And vbArchive

http://plasserre.developpez.com/v4-7.htm (5 sur 5) [01/03/2005 14:48:29]

Site

Site

Cours VB.net

4.8

Afficher correctement.

Comment afficher du texte , du numrique suivant le format dsir ? On a vu que pour afficher du texte il fallait l'affecter la proprit 'Text' d'un label ou d'un textBox (ou pour des tests l'afficher sur la fentre 'console'). Pas de problme pour afficher des chanes de caractres, par contre, pour les valeurs numriques, il faut d'abord les transformer en 'String' et les formater (dfinir les sparateurs, le nombre de dcimales...) .

ToString
On a dj vu que pour afficher une variable numrique, il fallait la transformer en 'string' de la manire suivant: MyDouble.ToString Mais ToString peut tre surcharg par un paramtre appel chane de format. Cette chane de format peut tre standard ou personnalise.
q

Chane de format standard:

Cette chane est de la forme 'Axx' ou A donne le type de format et xx le nombre de chiffre aprs la virgule. Le format est dfini par la 'culture' en cours sur le thread courant. Imports System Imports System.Globalization Imports System.Threading Module Module1 Sub Main() Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")'changement de culture Dim UnDouble As Double = 123456789 Console.WriteLine("Cet exemple est en-US culture:") Console.WriteLine(UnDouble.ToString("C")) 'format montaire (C) affiche $123,456,789.00 Console.WriteLine(UnDouble.ToString("E")) 'format scientifique (E) affiche 1.234568E+008
http://plasserre.developpez.com/v4-8.htm (1 sur 5) [01/03/2005 14:48:31]

Site

Console.WriteLine(UnDouble.ToString("P")) affiche 12,345,678,900.00% Console.WriteLine(UnDouble.ToString("N")) affiche 123,456,789.00 Console.WriteLine(UnDouble.ToString("F")) affiche 123456789.00 End Sub End Module

'format %

(P)

'format nombre (N) 'format virgule fixe (F)

Autre exemple: S=(1.2).ToString("C") retourne en CurrentCulture Franais (par dfaut sur mon ordinateur):1,2 Il existe aussi D pour dcimal, G pour gnral X pour hexadcimal.

Chane de format personnalis:

On peut crer de toute pice un format, on utilise pour cela les caractres suivants: 0 indique une espace rserv de 0
Chaque '0' est rserv un chiffre. Affiche un chiffre ou un zro. Si le nombre contient moins de chiffres que de zros, affiche des zros non significatifs. Si le nombre contient davantage de chiffres droite du sparateur dcimal qu'il n'y a de zros droite du sparateur dcimal dans l'expression de format, arrondit le nombre autant de positions dcimales qu'il y a de zros. Si le nombre contient davantage de chiffres gauche du sparateur dcimal qu'il n'y a de zros gauche du sparateur dcimal dans l'expression de format, affiche les chiffres supplmentaires sans modification.

indique un espace rserv de chiffre.


Chaque '#' est rserv un chiffre. Affiche un chiffre ou rien. Affiche un chiffre si l'expression a un chiffre dans la position o le caractre # apparat dans la chane de format ; sinon, n'affiche rien dans cette position. Ce symbole fonctionne comme l'espace rserv au 0, sauf que les zros non significatifs et droite ne s'affichent pas si le nombre contient moins de chiffres qu'il n'y a de caractres # de part et d'autre du sparateur dcimal dans l'expression de format.

. (point) indique l'emplacement du sparateur dcimal (celui affich sera celui du pays )
Vous devriez donc utiliser le point comme espace rserv la dcimale, mme si vos paramtres rgionaux utilisent la virgule cette fin. La chane mise en forme apparatra dans le format correct pour les paramtres rgionaux.

, (virgule) indique l'emplacement du sparateur de millier.


Sparateur de milliers. Il spare les milliers des centaines dans un nombre de quatre chiffres ou plus gauche du sparateur dcimal.

"Littral" la chane sera affiche telle quelle. % affichera en pour cent.

http://plasserre.developpez.com/v4-8.htm (2 sur 5) [01/03/2005 14:48:31]

Site

Multiplie l'expression par 100. Le caractre du pourcentage (%) est insr

E0 affiche en notation scientifique. : et / sont sparateur d'heure et de date. ; est le sparateur de section : on peut donner 3 formats (un pour les positifs, un pour les ngatifs, un pour zro) spars par ; Exemple: Chane de format '0000', le chiffre 145 cela affiche Chane de format '####', le chiffre 145 cela affiche '0145' '145' '045.20' '12,345,678' '12'

Chane de format '000.00', le chiffre 45.2 cela affiche Chane de format '#,#', le chiffre 12345678 cela affiche Chane de format '#,,' le chiffre 12345678 cela affiche

La chane de formatage' #,##0.00 ' veut dire obligatoirement 2 chiffres aprs le sparateur dcimal et un avant: Si on affiche avec ce format 1.1 cela donne .5 cela donne 1,10 0,50 4 563,00

4563 cela donne

Exemple: Dim N As Double = 19.95 Dim MyString As String = N.ToString("$#,##0.00;($#,##0.00);Zero") ' En page ' En page U.S. English culture, MyString ="$19.95". Franaise , MyString ="19,95 ".

Exemple 2: Dim UnEntier As Integer = 42 MyString = UnEntier.ToString( "Mon nombre " + ControlChars.Lf + "= #" ) Affiche: Mon nombre = 42

Str() est toujours accept

http://plasserre.developpez.com/v4-8.htm (3 sur 5) [01/03/2005 14:48:31]

Site

Il permet de transformer une variable numrique et String, qui peut ensuite tre affiche. MyString=Str( LeNombre) Label1.Text=MyString Pas de formatage..

String.Format
Permet de combiner des informations littrales afficher sans modification et des zones formates. Les arguments de String.Format se dcomposent en 2 parties spares d'une virgule.
q

Chane de formatage entre guillemets: Exemple "{0} + {1} = {2}": les numros indiquent l'ordre des valeurs. Valeurs afficher dans l'ordre, la premire tant d'indice zro. Exemple= A, B, A+B

Exemple: Si A=3 et B=5 MsgBox(String.Format("{0} + {1} = {2}",A, B, A+B)) affiche 3+5=8 Autre exemple: Dim MonNom As String = "Phil" String.Format("Nom = {0}, heure = {hh}", MonNom, DateTime.Now)
Le texte fixe est "Nom =" et ", heure = ", les lments de format sont {0} et {hh} et la liste de valeurs est MonNom et DateTime.Now. Cela affiche: Nom = Phil Heure= 10

L aussi on peut utiliser les formats:


q

Prdfinis: Ils utilisent l aussi les paramtres rgionaux, . Ils utilisent C, D, E, F,G,N,P,R,X comme ToSting. MsgBox(String.Format("{0:C}",-456.45)) -456,45 MsgBox(String.Format("{0:D8}", 456)) Affiche

Affiche

http://plasserre.developpez.com/v4-8.htm (4 sur 5) [01/03/2005 14:48:31]

Site

00000456

Dcimal 8 chiffres Affiche

14%

MsgBox(String.Format("{0:P}", 0.14)) Pourcent

MsgBox(String.Format("{0:X}", 65535)) FFFF Hexadcimal


q

Affiche

Personnaliss: avec des # et des 0 MsgBox(String.Format("{0:##,##0.00}", 6553.23))

La fonction Format (pas la classe String.Format) fournit des fonctions similaires mais les arguments sont dans l'ordre inverse (valeur, chane de formatage) et il n'y a pas de numro d'ordre et de{}!! C'est pratique pour afficher une seule valeur. MyStr = Format(5459.4, "##,##0.00") ' Returns "5,459.40". MyStr = Format(334.9, "###0.00") ' Returns "334.90". MyStr = Format(5, "0.00%") ' Returns "500.00%".

CultureInfo
On se rend compte que l'affichage est dpendant de la CurrentCulture du Thread en cours. Exemple: Si la CurrentCulture est la 'CultureInfo Us' et que j'affiche avec le format 'C' (montaire) cela affiche un $ avant, si je suis en 'CurrentCulture Franais' cela affiche un aprs. Par dfaut la CultureInfo est celle dfinie dans Windows. On peut modifier la CurrentCulture par code (voir exemple plus haut). En franais par dfaut: Le sparateur de dcimal numrique est le '.' Exemple : 1.20

Le sparateur dcimal montaire est la ',' Exemple : 1,20

http://plasserre.developpez.com/v4-8.htm (5 sur 5) [01/03/2005 14:48:31]

Site

Site

Cours VB.net

Le 4.9 curseur.
Comment modifier l'apparence du curseur? Un curseur est une petite image dont l'emplacement l'cran est contrl par la souris, un stylet ou un trackball. Quand l'utilisateur dplace la souris, le systme d'exploitation dplace le curseur. Diffrentes formes de curseur sont utilises pour informer l'utilisateur de l'action que va avoir la souris.

Apparence du curseur
Pour modifier l'aspect du curseur il faut modifier l'objet Cursor.Current; l'numration Cursors contient les diffrents curseurs disponibles:

System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor
ou plus simplement pour afficher le sablier:

Cursor.Current = Cursors.WaitCursor
Pour revenir au curseur normal:

Cursor.Current = Cursors.Dfault
http://plasserre.developpez.com/v4-9.htm (1 sur 2) [01/03/2005 14:48:33]

Site

Comme d'habitude il suffit de taper Cursors. pour voir la liste des curseurs. Le curseur peut disparatre et tre de nouveau affich par Hide et Show.

Curseur sur un controle:


Un contrle dans une fentre possde une proprit Cursor; en mode design, si je donne une valeur autre que celle par dfaut, CursorWait par exemple, cela modifie le curseur quand la souris passe au dessus de l'objet (cela met un sablier dans notre exemple).

http://plasserre.developpez.com/v4-9.htm (2 sur 2) [01/03/2005 14:48:33]

Site

Site

Cours VB.net

Lancer une application, 4.10 une page Web.


Comment lancer une autre application, un autre programme ?

L'ancienne mthode toujours valable: Shell


Shell lance un programme excutable. Id=Shell (NomdeProgramme) NomdeProgramme on peut utiliser aussi: Id=Shell( NomdeProgramme, TypedeFenetre, Wait, TimeOut) TypedeFentre utilise l'numration AppWinStyle pour dfinir le type de fentre de l'application lance: AppWinStyle.MaximizedFocus ouvre par exemple l'application en plein cran. Si vous souhaitez attendre la fin du programme avant de continuer, vous devez dfinir Wait True. TimeOut est le nombre de millisecondes attendre pour la fin du programme si Wait est True. Exemple: ID = Shell("""C:\Program Files\MonFichier.exe"" -a -q", , True, 100000) 'lance l'application

http://plasserre.developpez.com/v4-10.htm (1 sur 4) [01/03/2005 14:48:35]

Site

Dans une chane une paire de guillemets doubles adjacents ("") est interprte comme un caractre de guillemet double dans la chane. Ainsi, l'exemple prcdent prsente la chane suivante la fonction Shell : "C:\Program Files\MonFichier.exe" -a -q La fonction AppActivate rend active l'application ou la fentre dfinie par son nom ou son Id (Numro indentificateur). Dim ID As Integer On peut utiliser: AppActivate("Untitled - Notepad") ou ID = Shell(NOTEPAD.EXE", AppWinStyle.MinimizedNoFocus) AppActivate(ID)

Avec la Classe Process


La Classe Process fournit l'accs des processus locaux ainsi que distants, et vous permet de dmarrer et d'arrter des processus systme locaux. Classe de nom importer :Imports System.Diagnostics
q

On peut instancer un Process

Dim monProcess As New Process()

Ensuite il faut fournir la classe fille StartInfo informations ncessaires au dmarrage. monProcess.StartInfo.FileName = "MyFile.doc" monProcess.StartInfo.Verb = "Print" monProcess.StartInfo.CreateNoWindow = True

les

Enfin on lance le process monProcess.Start()

Noter la puissance de cette classe: on donne le nom du document et VB lance l'excutable correspondant, charge le document, effectue certaines actions. Dans l'exemple du dessus on ouvre Word on y charge MyFile , on l'imprime, cela sans ouvrir de fentre.

http://plasserre.developpez.com/v4-10.htm (2 sur 4) [01/03/2005 14:48:35]

Site

On peut utiliser la classe Process en statique (sans instanciation)

Process.Start("IExplore.exe") Process.Start(MonPathFavori) ou en une ligne: Process.Start("IExplore.exe", "http//:developpez.com") En local on peut afficher un fichier html ou asp Process.Start("IExplore.exe", "C:\monPath\Fichier.htm") Process.Start("IExplore.exe", "C:\monPath\Fichier.asp")

On peut enfin utiliser un objet StartInfo

Dim startInfo As New ProcessStartInfo("IExplore.exe") startInfo.WindowStyle = ProcessWindowStyle.Minimized Process.Start(startInfo) startInfo.Arguments = "hrrp//:developpez.com" Process.Start(startInfo)

Des proprits du processus en cours permettent de connatre l'Id du processus (Id) les threads, les modules, les Dll ,la mmoire , de connatre le texte de la barre de titre (MainWindowsTitle).. On peut fermer le processus par Close ou CloseMainWindows

On peut instancer un 'Process' sur une application dj en cours d'excution avec GetProcessByName et GetProcessById: Dim P As Process() = Process.GetProcessesByName("notepad")

' On peut rcuprer le processus courant. Dim ProcessusCourant As Process = Process.GetCurrentProcess() ' Rcuprer toutes les instances de Notepad qui tourne en local. Dim localByName As Process() = Process.GetProcessesByName("notepad")

http://plasserre.developpez.com/v4-10.htm (3 sur 4) [01/03/2005 14:48:35]

Site

' Rcuprer tous les processus en cours d'excution grce GetProcesses: Dim localAll As Process() = Process.GetProcesses()

Processus sur ordinateur distant. Vous pouvez afficher des donnes statistiques et des informations sur les processus en cours d'excution sur des ordinateurs distants, mais vous ne pouvez pas appeler Kill, Start, CloseMainWindows sur ceux-ci.

http://plasserre.developpez.com/v4-10.htm (4 sur 4) [01/03/2005 14:48:35]

Site

Site

Cours VB.net
Imprimer.

4.11

Comment Imprimer ? Prvoir une longue soire, au calme, un bon sige, 1 g de paractamol et un gros thermo de caf!! On devra que l'on peut utiliser pour imprimer: Soit un composant 'PrintDocument'. Soit une instance de 'la Class PrintDocument'.

Imprimer 'Hello'avec le composant 'PrintDocument'


L'utilisateur clique sur un bouton, cela imprime 'Hello'
Cet exemple utilise un 'composant PrintDocument' Comment faire en thorie? C'est le composant PrintDocument qui imprime. En prendre un dans la boite outils, le mettre dans un formulaire. Il apparat sous le formulaire et se nomme PrintDocument1. Pour imprimer il faut utiliser la mthode Print de ce composant PrintDocument; Il faut donc crire l'instruction suivante: PrintDocument1.Print Cette instruction appelle la procdure vnement PrintDocument1_PrintPage du composant PrintDocument et qui contient la logique d'impression. Un paramtre de cet vnement PrintPage est l'objet graphique envoy l'imprimante (nomm e). C'est vous de dessiner dans l'objet graphique (e)ce que vous voulez imprimer . En fin de routine, l'objet graphique sera imprim (automatiquement).

http://plasserre.developpez.com/v4-11.htm (1 sur 11) [01/03/2005 14:48:38]

Site

En pratique:
q

Je prends un PrintDocument dans la boite outils, je le met dans un formulaire. Il apparat sous le formulaire et se nomme PrintDocument1.

Si je double-clique sur PrintDocument1 je vois apparatre la procdure PrintDocument1_PrintPage (qui a t gnre automatiquement): Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage End Sub C'est cette procdure qui est fondamentale et qui contient les routines d'impression crites par le programmeur. Les routines d'impression agissent sur l'objet graphique qui sera utilis pour imprimer , cet objet graphique est fournit dans les paramtres de la procdure(ici c'est e qui est de type PrintPageEventArgs)

Dans cette routine PrintPage, j'ajoute donc le code dessinant une texte (DrawString) sur l'objet graphique 'e': e.Graphics.DrawString("Hello", New Font("Arial", 80, FontStyle.Bold), Brushes.Black, 150, 125)

Enfin je dessine un bouton nomm 'ButtonPrint' avec une proprit Text contenant "Imprimer Hello" et dans la procdure ButtonPrint_Click j'appelle la mthode Print PrintDocument1.Print()

Voici le code complet: Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage e.Graphics.DrawString("Hello", New Font("Arial", 80, FontStyle.Bold), Brushes.Black, 150, 125) End Sub Private Sub ButtonPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click PrintDocument1.Print() End Sub

http://plasserre.developpez.com/v4-11.htm (2 sur 11) [01/03/2005 14:48:38]

Site

Si je clique sur le bouton 'ImprimerHello' cela affiche un gros 'Hello'.

La mthode Print d'un PrintDocument dclenche l'vnement PrintPage de ce PrintDocument qui contient le code dessinant sur le graphique de la page imprimer. En fin de routine PrintPage le graphique est imprimer sur la feuille de l'imprimante. Toutes les mthodes graphiques crivant, dessinant, traant des lignes... sur un graphique permettent donc d'imprimer.

Imprimer un dessin:
Crons une ellipse bleue l'intrieur d'un rectangle avec la position et les dimensions suivantes : dbut 100, 150 avec une largeur de 250 et une hauteur de 250.

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage e.Graphics.FillEllipse(Brushes.Blue, New Rectangle(100, 150, 250, 250)) End Sub

Imprimer un Message Box indiquant 'Fin d'impression'.


On a tudi l'vnement PrintPage, mais il existe aussi les vnements: BeginPrint et EndPrint respectivement dclenchs en dbut et fin d'impression

Il suffit d'utiliser l'vnement EndPrint pour prvenir que l'impression est termine:

Private Sub PrintDocument1_EndPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.EndPrint MessageBox.Show("Fin d'impression") End Sub On peut mme fignoler et afficher "Fin d'impression de Nom du document" Il faut avoir renseign le DocumentName: PrintDocument1.DocumentName = "MyTextFile" Puis crire: Private Sub PrintDocument1_EndPrint(ByVal sender As Object, ByVal e As

http://plasserre.developpez.com/v4-11.htm (3 sur 11) [01/03/2005 14:48:38]

Site

System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.EndPrint MessageBox.Show( "Fin d'impression de "+PrintDocument1.DocumentName) End Sub

Mme programme: Imprimer 'Hello' mais avec la Classe PrintDocument


L'utilisateur clique sur un bouton, cela imprime 'Hello'
Cet exemple utilise 'une instance de la Classe PrintDocument'. On ne met pas de composant 'PritDocument' dans le formulaire. Comment faire en thorie? Il faut importer l'espace de nom 'Printing' par : Imports System.Drawing.Printing Il faut crez une instance de la Classe PrintDocument dans le module.

Dim pd as PrintDocument = new PrintDocument() Il faut crer soi mme, une routine pd_PrintPage . Private Sub pd_PrintPage(sender As object, ev As System.Drawing.Printing.PrintPageEventArgs) End sub

Il faut indiquer le "lien" entre l'objet PrintPage

pd et la routine vnement

AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage

Dans la procdure Button_Click d'un bouton "Imprimer" il faut appeler la mthode Print du PrintDocument pour effectuer l'impression du document . pd.Print Cela dclenche la procdure Private Sub pd_PrintPage prcdemment crite, dans laquelle on a ajout: ev.Graphics.DrawString ("Hello", printFont, Brushes.Black, leftMargin, yPos, new StringFormat()).

Cela donne le code complet: Imports System.Drawing.Printing

http://plasserre.developpez.com/v4-11.htm (4 sur 11) [01/03/2005 14:48:38]

Site

Public Class Form1 Inherits System.Windows.Forms.Form Dim pd As PrintDocument = New PrintDocument 'Assumes the default printer Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler pd.PrintPage, AddressOf Me.Pd_PrintPage End Sub Private Sub Pd_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) e.Graphics.DrawString("Hello", New Font("Arial", 80, FontStyle.Bold), Brushes.Black, 150, 125) End Sub Private Sub ButtonPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click pd.Print() End Sub End Class

Comment choisir l'imprimante?


Le composant PrintDialog permet le choix de l'imprimante, de la zone imprimer (tout, la slection..) et donne accs aux caractristiques de l'imprimante. Comment l'utiliser? Il faut crer une instance de PrintDialog: Dim dlg As New PrintDialog Il faut indiquer au PrintDialog sur quel PrintDocument travailler: dlg.Document = pd Puis ouvrir la fentre PrintDialog avec la mthode ShowDialog. L'utilisateur choisit son imprimante puis clique sur 'Ok'. Si elle retourne Ok, on imprime. Quand l'utilisateur clique sur le bouton ButtonPrint ('Imprimer') fentre PrintDialog s'ouvre: la

Voici le code complet: Private Sub ButtonPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click Dim dlg As New PrintDialog dlg.Document = pd Dim result As DialogResult = dlg.ShowDialog() If (result = System.Windows.Forms.DialogResult.OK) Then pd.Print() End If

http://plasserre.developpez.com/v4-11.htm (5 sur 11) [01/03/2005 14:48:38]

Site

End Sub

Comment modifier la page imprimer?


Comment choisir d'imprimer en portrait ou paysage? modifier les marges.. Il faut utiliser un composant PageSetUpDialog. Pour stocker les informations sur la page (marges...) il faut un PageSetting Je lie le PageSetting au PageSetUpDialog en donnant la proprit PageSettings du PageSetUpDialog le nom du PageSetting. puis j'ouvre le PageSetUpDialog. Au retour le PageSetting contient les modifications, je les 'passe' au PrintDocument avant d'imprimer. Cela donne: Dim psDlg As New PageSetupDialog Dim LePageSettings As New PageSettings psDlg. PageSettings = LePageSettings psDlg.ShowDialog() pd.DefaultPageSettings = LePageSettings

Prvisualisation de la page imprimer?


On utilise pour cela un PrintPreviewDialog, on lui indique quel PrintDocument pr visualiser en l'assignant sa mthode document puis on l'affiche par ShowDialog(). Dim dllg As New PrintPreviewDialog dllg.Document = pd dllg.ShowDialog()

Construction d'une application d'impression complexe:


Comment imprimer le contenu d'un fichier texte? Tous les didacticiels (Microsoft compris) donnent cet exemple.
http://plasserre.developpez.com/v4-11.htm (6 sur 11) [01/03/2005 14:48:38]

Site

La premire chose que vous devez faire est d'crire votre logique d'impression. Pour cela, quand la mthode PrintDocument.Print() est appele, les vnements suivants sont dclenchs.
q q q

BeginPrint PagePrint (un ou plusieurs s'il y a plusieurs pages imprimer) EndPrint

L'argument d'vnement de PagePrint (PagePrintEventArgs) comprend une proprit HasMorePages. Si celle-ci a la valeur True lors du retour de votre gestionnaire d'vnements, PrintDocument dfinit une nouvelle page et dclenche de nouveau l'vnement PagePrint. Voyons la logique dans votre gestionnaire d'vnements PagePrint :
q

Imprimez le contenu de la page en utilisant les informations des arguments d'vnement. Les arguments d'vnement contiennent l'objet Graphics pour l'imprimante, le PageSettings pour cette page, les limites de la page, et la taille des marges. Il faut dans la procdure PagePrint imprimer ligne par ligne en se dplaant chaque fois vers le bas d'une hauteur de ligne. Pour 'simplifier', on considre que chaque ligne ne dborde pas droite!!

q q q

Dterminer s'il reste des pages imprimer. Si c'est le cas, HasMorePages doit tre gal True. S'il n'y a pas d'autres pages, HasMorePages doit tre gal False.

Public Class ExampleImpression Inherits System.Windows.Forms.Form .... private printFont As Font private streamToPrint As StreamReader Public Sub New () MyBase.New InitializeComponent() End Sub 'Evnement survenant lorsque l'utilisateur clique sur le bouton 'Imprimer' Private Sub printButton_Click(sender As object, e As System.EventArgs) Try streamToPrint = new StreamReader ("PrintMe.Txt") Try printFont = new Font("Arial", 10) Dim pd as PrintDocument = new PrintDocument() 'dclaration du PrintDocument AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage pd.Print()
http://plasserre.developpez.com/v4-11.htm (7 sur 11) [01/03/2005 14:48:38]

Site

Finally streamToPrint.Close() End Try Catch ex As Exception MessageBox.Show("Une erreur est survenue: - " + ex.Message) End Try End Sub 'Evnement survenant pour chaque page imprimer Private Sub pd_PrintPage(sender As object, ev As System.Drawing.Printing.PrintPageEventArgs) Dim Dim Dim Dim Dim Dim lpp As Single = 0 'nombre de ligne par page yPos As Single = 0 'ordonne count As Integer = 0 'numro de ligne leftMargin As Single = ev.MarginBounds.Left topMargin As Single = ev.MarginBounds.Top line as String

'calcul le nombre de ligne par page ' hauteur de la page/hauteur de la police de caractre lpp = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)

'lit une ligne dans le fichier line=streamToPrint.ReadLine()

'Boucle affichant chaque ligne while (count < lpp AND line <> Nothing) yPos = topMargin + (count * printFont.GetHeight(ev.Graphics)) 'Ecrit le texte dans l'objet graphique ev.Graphics.DrawString (line, printFont, Brushes.Black, leftMargin, _ yPos, new StringFormat()) count = count + 1 if (count < lpp) then line=streamToPrint.ReadLine() end if End While 'S'il y a encore des lignes, on rimprime une page If (line <> Nothing) Then ev.HasMorePages = True Else ev.HasMorePages = False End If End Sub .... End Class

On a vu que pour 'simplifier', on considre que chaque ligne ne dborde pas droite.
http://plasserre.developpez.com/v4-11.htm (8 sur 11) [01/03/2005 14:48:38]

Site

Dans la pratique, pour grer les retours la ligne automatiques on peut dessiner dans un rectangle.

(Voir la page sur les graphiques.)

Proprits du 'PrintDocumet':
On peut sans passer par une 'boite de dialog' grer directement l'imprimante, les marges, le nombre de copies.. Si pd est le PrintDocument: pd.PrinterSetting dsigne l'imprimante en cours

pd.PrinterSetting.PrinterName retourne ou dfinit le nom de cet imprimante pd.PrinterSetting.Printerresolution imprimante. pd.PrinterSetting.installedPrinted installes. donne la rsolution de cette

donne toutes les imprimantes

La proprit DefaultPageSetting est en rapport avec les caractristiques de la page. pd.PrinterSetting.DefaultPageSetting.Margins donne les marges pd.PrinterSetting.PrinttoFile (non test) permettrait d'imprimer dans un fichier

Imprime le formulaire en cours.


Exemple fournit par Microsoft.

Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _ hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _ Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _ hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _ ByVal dwRop As System.Int32) As Long Dim memoryImage As Bitmap Private Sub CaptureScreen() Dim mygraphics As Graphics = Me.CreateGraphics() Dim s As Size = Me.Size memoryImage = New Bitmap(s.Width, s.Height, mygraphics)

http://plasserre.developpez.com/v4-11.htm (9 sur 11) [01/03/2005 14:48:38]

Site

Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage) Dim dc1 As IntPtr = mygraphics.GetHdc Dim dc2 As IntPtr = memoryGraphics.GetHdc BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, _ Me.ClientRectangle.Height, dc1, 0, 0, 13369376) mygraphics.ReleaseHdc(dc1) memoryGraphics.ReleaseHdc(dc2) End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage e.Graphics.DrawImage(memoryImage, 0, 0) End Sub Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As _ System.EventArgs) Handles PrintButton.Click CaptureScreen() PrintDocument1.Print() End Sub

Imprime un contrle DataGrid.


Exemple fournit par Microsoft. Cet exemple ncessite :
q q q

un contrle Button, nomm ImprimerGrid, dans le formulaire ; un contrle DataGrid nomm DataGrid1 ; un composant PrintDocument nomm PrintDocument1.

Comme d'habitude PrintPage imprime e.Graphics. D'aprs ce que j'ai compris, l'vnement Paint redessine un contrle mais on peut choisir le contrle et l'endroit ou le redessiner, Je redessine donc grce Paint,le DataGrid dans e.graphics. PaintEventArgs Fournit les donnes pour l'vnement Paint:
PaintEventArgs spcifie l'objet graphics utiliser pour peindre le contrle, ainsi que le ClipRectangle dans lequel le peindre. InvokePaint dclenche l'vnement Paint

Private Sub ImprimerGrid_Click(ByVal sender As System.Object, ByVal e As _


http://plasserre.developpez.com/v4-11.htm (10 sur 11) [01/03/2005 14:48:38]

Site

System.EventArgs) Handles PrintGrid.Click PrintDocument1.Print() End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, _ ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles _ PrintDocument1.PrintPage Dim myPaintArgs As New PaintEventArgs(e.Graphics, New Rectangle(New _ Point(0, 0), Me.Size)) Me.InvokePaint(DataGrid1, myPaintArgs) End Sub

Simple, non!! Je plaisante!!

http://plasserre.developpez.com/v4-11.htm (11 sur 11) [01/03/2005 14:48:38]

Site

Site

Cours VB.net

4.12 Dessiner.

Avec GDI+ utilis par VB.NET, on utilise des objets Graphics qui sont des zones de dessin. Image (BitMap ou MetaFile) contient une image. Rectangle permet de dfinir une zone. Pen correspond un Stylet.

Font correspond une police de caractres Brush , c'est une brosse.

Sur quoi dessiner?


Il faut dfinir une zone de dessin, un objet Graphics. On peut y inclure des objets Image (des BitMap ou des MetaFile) Pour obtenir un objet Graphics, il y a plusieurs faons:

Soit on instance Graphics.

un objet

http://plasserre.developpez.com/v4-12.htm (1 sur 13) [01/03/2005 14:48:41]

Site

Dim g as Graphics 'Graphics contient Nothing, je ne peux rien en faire. Il faut donc y mettre un objet Image (un BitMap ou un MetaFile)pour pouvoir travailler dessus. Pour obtenir un BitMap par exemple, on peut: Soit crer un objet BitMap vide: Dim newBitmap As Bitmap = New Bitmap(600, 400) Dim g as Graphics = Graphics.FromImage(newBitmap) Paramtres= taille du BitMap mais il y a plein de surcharges Soit crer un BitMap partir d'un fichier sur disque C'est pratique si on veut modifier une image qui est dans un fichier: on la lit dans un BitMap puis on la passe dans l'objet Graphics. Dim myBitmap as New Bitmap("maPhoto.bmp") 'Charge maPhoto dans le BitMap Dim g as Graphics = Graphics.FromImage(myBitmap) 'Cre un Graphics et y met le BitMap

g est un Graphics contenant l'image 'maPhoto.bmp' et je peux la modifier. Attention: le Graphics n'est pas 'visible', pour le voir il faut le mettre dans un composant (un PictureBox par exemple) qui lui

http://plasserre.developpez.com/v4-12.htm (2 sur 13) [01/03/2005 14:48:41]

Site

sera visible. On verra cela plus bas.

Soit on appelle la mthode CreateGraphics d'un contrle ou d'un formulaire


On appelle la mthode CreateGraphics d'un contrle ou d'un formulaire afin d'obtenir une rfrence un objet Graphics reprsentant la surface de dessin de ce contrle ou formulaire. Cette mthode est utilise si vous voulez dessiner sur un formulaire ou un contrle existant ; Dim g as Graphics g = Me.CreateGraphics Dim g as Graphics g = Panel1.CreateGraphics Panel

'Pour un formulaire

'Pour un contrle

On peut ensuite dessiner sur g, cela sera immdiatement visible sur le contrle ou le formulaire. Il faut quand on n'utilise plus l'objet graphics, utiliser la mthode Dispose pour le librer.

Soit on rcupre l'objet Graphics argument de l'vnement Paint d'un contrle.


L'vnements Paint des contrles se dclenche lorsque le contrle est redessin, un objet Graphics est fourni comme une valeur de PaintEventArgs. Pour obtenir une rfrence un objet Graphics

http://plasserre.developpez.com/v4-12.htm (3 sur 13) [01/03/2005 14:48:41]

Site

partir des PaintEventArgs de l'vnement Paint et dessiner:

1. Dclarez l'objet Graphics 2. Assignez la variable pour qu'elle


rfrence l'objet Graphics pass dans les PaintEventArgs. 3. Dessinez dans l'objet Graphics.

Private Sub Form1_Paint(sender As Object, pe As PaintEventArgs) Handles _ MyBase.Paint Dim g As Graphics = pe. Graphics ' Dessiner dans pe ici.. End Sub

Noter bien que pe est visible uniquement dans Form1_Paint Pour forcer le dclenchement de l'vnement Paint et dessiner, on utilise la mthode OnPaint

Comment dessiner? La classe Graphics fournit des mthodes permettant de dessiner DrawImage DrawLine DrawString DrawPolygon ... En GDI+ on envoie des paramtres la mthode pour dessiner: Exemple: 'Ajoute une image (BitMap ou MetaFile) 'Trace une ligne 'Ecrit un texte 'Dessine un polygone

http://plasserre.developpez.com/v4-12.htm (4 sur 13) [01/03/2005 14:48:41]

Site

MonGraphique.DrawEllipse( New Pen(Couleur),r) dessine une ellipse

'cela

Les 2 paramtres sont: la couleur et le rectangle dans lequel on dessine l'allipse.

Pour travailler on utilise les objets:

Brush (Brosse)

Utilis pour remplir des surfaces fermes avec des motifs, des couleurs ou des bitmaps. Il y a plusieurs types de brush: La brosse peut tre pleine et ne contenir qu'une couleur. Dim SB= New SolidBrush(Color.Red) TextureBrush utilise une image pour remplir. Dim SB= New TextureBrush(MonImage) LinarGradientBrush permet des dgrads (passage progressive d'une couleur une autre). Dim SB= New LinearGradientBrush(PointDbut, PointFin,Color1, Color2) Les HatchBrush sont des brosse hachures Dim HatchBrush hb = new HatchBrush(HatchStyle.ForwardDiagonal, Color.Green,Color.FromArgb(100, Color.Yellow)) Les PathGradient sont des brosses plus complexes.

http://plasserre.developpez.com/v4-12.htm (5 sur 13) [01/03/2005 14:48:41]

Site

Pen (Stylet)

Utilis pour dessiner des lignes et des polygones, tels que des rectangles, des arcs et des secteurs. Comment crer un Stylet? Dim blackPen As New Pen(Color.Black) on donne la couleur Dim blackPen As New Pen(Color.Black, 3)on donne couleur et l'paisseur Dim blackPen As New Pen(MyBrush) on peut mme crer un stylet avec une brosse Proprits de ce Stylet: DashStyle permet de faire des pointills. StartCap et EndCap dfinissent la forme du dbut et de la fin du dessin (rond, carr, flche..)

Font (Police)

Utilis pour dcrire la police utilise pour afficher le texte. Dim Ft= New Font("Lucida sans unicode",60) 'paramtres=nom de la font et taille Il y a de nombreuse surcharge. Dim Ft= New Font("Lucida sans unicode",60, FontStyle.Bold)'pour crire en gras

Color (Couleur)

Utilis pour dcrire la couleur utilise pour afficher un objet particulier. Dans GDI+, la couleur peut tre contrle alpha. System.Drawing.Color.Red pour le rouge

http://plasserre.developpez.com/v4-12.htm (6 sur 13) [01/03/2005 14:48:41]

Site

Point

Ils ont des cordonnes x, y Dim point1 As New Point(120, 120) ' Point avec des Integer ou des PointF 'avec des Singles

Rectangle

Permet de dfinir un rectangle. Dim r As New RectangleF(0, 0, 100, 100) On remarque que le F aprs Point ou Rectangle veut dire 'Float', et ncessite l'usage de Single.

Comment faire? Dessiner une ligne sur le graphique: Pour dessiner une ligne, on utilise DrawLine. Dim blackPen As New Pen(Color.Black, 3) 'crer un stylet noir d'paisseur 3 ' Crer des points Dim point1 As New Point(120, 120) 'crer des points Dim point2 As New Point(600, 100) ' Dessine la ligne e.Graphics.DrawLine(blackPen, point1, point2)

On aurait pu utiliser une surcharge de Drawline en spcifiant directement les coordonnes des points. Dim x1 As Integer = 120 Dim y1 As Integer = 120 Dim x2 As Integer = 600 Dim y2 As Integer = 100 e.Graphics.DrawLine(blackPen, x1, y1, x2, y2)

Dessiner une ellipse: Dfinir un rectangle dans lequel sera dessin l'ellipse.

http://plasserre.developpez.com/v4-12.htm (7 sur 13) [01/03/2005 14:48:41]

Site

Dim r As New RectangleF(0, 0, 100, 100) g.DrawEllipse(New Pen(Color.Red), r)' Dessinons l' ellipse Dessiner une rectangle: myGraphics.DrawRectangle(myPen, 100, 50, 80, 40)

Comme d'habitude on peut fournir aprs le stylet des coordonnes(4), des points (2) ou un rectangle. Dessiner un polygone: Dim MyPen As New Pen(Color.Black, 3) ' Crons les points qui dfinissent le polygone Dim point1 As New Point(150, 150) Dim point2 As New Point(100, 25) Dim point3 As New Point(200, 5) Dim point4 As New Point(250, 50) Dim point5 As New Point(300, 100) Dim point6 As New Point(350, 200) Dim point7 As New Point(250, 250) Dim curvePoints As Point() = {point1, point2, point3, point4, _ point5, point6, point7} ' Dessinons le Polygone. e.Graphics.DrawPolygon(MyPen, curvePoints

Dessiner un rectangle plein: e.FillRectangle(new SolidBrush(Color.red), 300,15,50,50)

Il existe aussi DrawArc, DrawCurve, DrawBezier DrawPie..

Ecrire du texte sur le graphique: Pour cela on utilise la mthode DrawString de l'objet graphique: g.DrawString ("Salut", Me.Font, New SolidBrush (ColorBlack), 10, 10)

http://plasserre.developpez.com/v4-12.htm (8 sur 13) [01/03/2005 14:48:41]

Site

Paramtres: Texte afficher. Police de caractres Brosse , cela permet d'crire avec des textures. Coordonnes. Si on spcifie un rectangle la place des 2 derniers paramtres, le texte sera affich dans le rectangle avec passage la ligne si ncessaire: Dim rectangle As New RectangleF (100, 100, 150, 150 ) Dim T as String= "Chane de caractres trs longue" g.DrawString (T, Me.Font, New SolidBrush (ColorBlack), Rectangle) On peut mme imposer un format au texte: Exemple: centrer le texte. Dim Format As New StringFormat() Format.Aligment=StringAlignment.Center g.DrawString (T, Me.Font, New SolidBrush (ColorBlack), Rectangle, Format) On peut mesurer la longueur (ou le nombre de lignes) d'une chane: Avec MeasureString Exemple 1: centrer le texte: pour cela, calculer la longueur de la chane, puis calculer le milieu de l'cran moins la 1/2 longueur de la chane: Dim W As Double= Me.DisplayRectangle.Width/2 Dim L As SizeF= e.Graphics.MeasurString (Texte, TextFont) Dim StartPos As Double = W - (L.Width/2)

http://plasserre.developpez.com/v4-12.htm (9 sur 13) [01/03/2005 14:48:41]

Site

g.Graphics.MeasueString (T, Me.Font, New SolidBrush (ColorBlack), Rectangle, StartPos, 10) Exemple 2:Calculer le nombre de ligne et le nombre de caractres d'une chane: g.Graphics.MeasueString (T, Me.Font, New SolidBrush (ColorBlack), Rectangle,Nex StringFormat() NombredeCaractres, NombredeLignes) Ajouter une image sur le graphique: Pour cela on utilise la mthode DrawImage de l'objet graphique: g.Graphics.DrawImage(New Bitmap("sample.jpg"), 29, 20, 283, 212) On peut travailler avec des images .jpeg .png .bmp .Gif .icon .tiff .exif

Travailler sur un Objet Image


Charger une image: Si on veut afficher une image bitmap ou vectoriel, il faut fournir l'objet Graphics un objet bitmap ou vectoriel. C'est la mthode DrawImage qui reoit l'objet Metafile ou Bitmap comme argument. L'objet BitMap, si on le dsire peut charger un fichier qui sera affich. Dim myBMP As New BitMap ("MonImage.bmp") myGraphics.DrawImage(myBMP, 10, 10) Le point de destination du coin suprieur gauche de l'image, (10, 10), est spcifi par les deuxime et troisime paramtres. myGraphics.FromImage(myBMP) est aussi possible On peut utiliser plusieurs formats de fichier graphique : BMP, GIF, JPEG, EXIF, PNG, TIFF et ICON. Cloner une image: La classe Bitmap fournit une mthode Clone qui permet de crer une copie d'un objet existant. La mthode Clone

http://plasserre.developpez.com/v4-12.htm (10 sur 13) [01/03/2005 14:48:41]

Site

admet comme paramtre un rectangle source qui vous permet de spcifier la portion de la Bitmap d'origine copier. L'exemple suivant cre un objet Bitmap en clonant la moiti suprieure d'un objet Bitmap existant. Il dessine ensuite les deux images. Dim originalBitmap As New Bitmap("Spiral.png")'on charge un fichier png dans un BitMap Dim sourceRectangle As New Rectangle(0, 0, originalBitmap.Width, _ originalBitmap.Height / 2) 'on dfinit un rectangle Dim secondBitmap As Bitmap = originalBitmap.Clone(sourceRectangle, _ PixelFormat.DontCare)'on dfinit un second BitMap Clonant une partie du 1ere BitMap avec le rectangle 'On met les 2 BitMap dans un Graphics

myGraphics.DrawImage(originalBitmap, 10, 10) myGraphics.DrawImage(secondBitmap, 150, 10)

Enregistrer une image sur disque: On utilise pour cela la mthode Save. Exemple: enregistrer le BitMap newBitMap dans 'Image1.jpg' newBitmap.Save("Image1.jpg", ImageFormat.Jpeg)

Comment voir un Graphics?


Si on a instance un objet Graphics, on ne le voit pas. Pour le voir il faut le mettre dans un PictureBox par exemple: Exemple: Dim newBitmap As Bitmap = New Bitmap(200, 200) 'crons un BitMap Dim g As Graphics = Graphics.FromImage(newBitmap)'crons un Graphics et y mettre le BitMap Dim r As New RectangleF(0, 0, 100, 100)' Dessinons une

http://plasserre.developpez.com/v4-12.htm (11 sur 13) [01/03/2005 14:48:41]

Site

ellipse g.DrawEllipse(New Pen(Color.Red), r) Comment voir l'ellipse? Ajoutons un PictureBox au projet, et donnons la proprit Image de ce PictureBox le nom du BitMap du Graphics: PictureBox1.Image = newBitmap L'ellipse rouge apparat!! Si ,Si!!

Paint

dclench par Resize.

Par dfaut Paint n'est pas dclench quand un contrle ou formulaire est redimensionn, pour forcer redessiner en cas de redimensionnement, il faut mettre le style Style.Resizedraw du formulaire ou du contrle true. SetStyle (Style.Resizedraw, true) Cette syntaxe marche, la suivante aussi (pour le formulaire) Me.SetStyle (Style.Resizedraw, true) 'pour tous les objets du formulaire? Mais PictureBox1.SetStyle (Style.Resizedraw, true) n'est pas accept!!

Afficher un texte en 3D
Afficher un texte en 3d. PrivateSub TextEn3D(ByVal g As Graphics, ByVal position As PointF, ByVal text AsString, ByVal ft As Font, ByVal c1 As Color, ByVal c2 As Color) Dim rect AsNew RectangleF(position, g.MeasureString(text, ft))
http://plasserre.developpez.com/v4-12.htm (12 sur 13) [01/03/2005 14:48:41]

Site

Dim bOmbre AsNew LinearGradientBrush(rect, Color.Black, Color.Gray, 90.0F) g.DrawString(text, ft, bOmbre, position) position.X -= 2.0F position.Y -= 6.0F rect = New RectangleF(position, g.MeasureString(text, ft)) Dim bDegrade AsNew LinearGradientBrush(rect, c1, c2, 90.0F) g.DrawString(text, ft, bDegrade, position) EndSub

Espace de nom
Pour utiliser les graphiques il faut que System.Drawing soit import (ce qui est fait par dfaut). (Systm.Drawing.DLL comme rfrences de l'assembly)

http://plasserre.developpez.com/v4-12.htm (13 sur 13) [01/03/2005 14:48:41]

Site

Site

Cours VB.net

Ajouter 4.13 une aide.


Quand l'utilisateur utilise votre logiciel, il se pose parfois des questions, comment l'aider? Avec des aides que le programmeur doit crer et ajouter au programme.

Gnralises sur les 4 sortes d'aide.


La Class Help permet d'ouvrir un fichier d'aide.

Le composant HelpProvider offre 2 types d'aide.


q

Le premier consiste ouvrir un fichier d'aide grce F1. Quant au second, il peut afficher une aide brve pour chacun des contrles en utilisant le bouton d'aide (?). Il s'avre particulirement utile dans les botes de dialogue modale.

Le composant ToolTip offre lui:


q

une aide propre chaque contrle des Windows Forms.

Les fichiers d'aide:


On peut utiliser les formats:

http://plasserre.developpez.com/v4-13.htm (1 sur 7) [01/03/2005 14:48:44]

Site

HTML Fichier .htm HTMLHelp 1.x ou version ultrieure) Fichier .chm HLP Fichier .hlp les plus anciens. Comment crer ces fichiers: Pour les fichiers HTM: Utiliser Word, ou FontPage, ou Netscape Composeur... Pour les fichiers HLP: Utiliser Microsoft HelpWorkshop livr avec VB6 Pour les fichiers CHM: Thierry AIM fournit sur le site developpez.com un excellent:

Cours pour crer un fichier CHM


On conseille d'utiliser les fichiers chm.

Utilisation des fichiers d'aide: Appel direct:


La classe Help permet d'ouvrir directement par code un fichier d'aide. C'est ce qu'on utilise dans le menu '?' d'un programme (sous menu 'Aide'); dans la procdure correspondante (Sub Aide_Click) on crit: Help.ShowHelp (Me, "MonAide.html") MonAide.html doit tre dans le rpertoire de l'application (rpertoire Bin) Cela peut tre un URL , l'adresse d'une page sur Internet!! Il peut y avoir un 3me paramtre: on verra cela plus bas (C'est le mme paramtre que la proprit HelpNagigator

http://plasserre.developpez.com/v4-13.htm (2 sur 7) [01/03/2005 14:48:44]

Site

de HelpProvider).

Appel par F1:


Vous pouvez utiliser le composant HelpProvider pour attacher des rubriques d'aide figurant dans un fichier d'aide (au format HTML, HTMLHelp 1.x ou ultrieur) des contrles de l'interface utilisateur. Quand on met un composant dans un formulaire (avec dans la proprit HelpNamespace, le nom de fichier d'aide), cela ajoute aux contrles de ce formulaire les proprits:
q

HelpNavigator qui dterminent le type d'appel (par numro de rubrique, mot cl..) HelpKeyword qui contient le paramtre de recherche (le numro de rubrique, le mot cl..)

Quand l'utilisateur est sur le contrle et qu'il clique sur F1 la rubrique d'aide s'ouvre. Pour crer cette aide: Faites glisser un composant HelpProvider de la bote outils vers votre formulaire. Le composant se place dans la barre d'tat situe au bas de la fentre.

http://plasserre.developpez.com/v4-13.htm (3 sur 7) [01/03/2005 14:48:44]

Site

Dans la fentre Proprits du HelpProvider , donner la proprit HelpNamespace, un nom de fichier d'aide .chm, ou .htm. Dans la fentre Proprits du contrle de l'interface qui doit dclencher l'aide, donner la proprit HelpNavigator une valeur de l'numration HelpNavigator. Cette valeur dtermine la faon dont la proprit HelpKeyword est passe au systme d'aide. HelpNagigator peut prendre la valeur:

AssociateIndex

Find

Index KeywordIndex

TableOfContents

Topic

Indique que l'index d'une rubrique spcifie est excut dans l'URL spcifie. Indique que la page de recherche d'une URL spcifie est affiche. Indique que l'index d'une URL spcifie est affich. Spcifie un mot cl rechercher et l'action effectuer dans l'URL spcifie. Indique que le sommaire du fichier d'aide HTML 1.0 est affich. Indique que la rubrique laquelle l'URL spcifie fait rfrence est affiche.

Dfinisser la proprit HelpKeyword dans la fentre Proprits. (la valeur de cette proprit sera pass au fichier d'aide afin de dterminer la rubrique d'aide afficher) Au moment de l'excution, le fait d'appuyer sur F1 lorsque le contrle (dont vous avez dfini les proprits HelpKeyword et HelpNavigator) a le focus ouvre le fichier d'aide associ ce composant HelpProvider. Remarque Vous pouvez dfinir, pour proprit HelpNamespace, une adresse (telle qu'une page Web). Cela permet le navigateur par dfaut sur la page la chane indique dans la proprit la http:// d'ouvrir Web avec

http://plasserre.developpez.com/v4-13.htm (4 sur 7) [01/03/2005 14:48:44]

Site

HelpKeyword utilise comme ancre (pour accder une section spcifique d'une page HTML). Dans le code il faut utiliser la syntaxe HelpProvider.SetHelpKeyword=".." Exemple: Pour afficher la page d'aide sur les formes ovales, slectionnez la valeur HelpNavigator.KeyWordIndex dans la liste droulante Help Navigator ; dans la zone de texte HelpKeyword, 'tapez ovales (sans chevrons).

Utilisation du bouton d'aide:


Vous pouvez afficher l'aide pour un contrle via le bouton Aide (?) situ dans la partie droite de la barre de titre . Il faut que l'utilisateur clique sur le bouton d'aide (?) puis sur le contrle qui ncessite une aide, ce qui entrane l'ouverture d'un carr blanc contenant un message d'aide.

L'affichage de l'aide de cette faon convient particulirement aux botes de dialogue. En effet, avec un affichage modal des botes de dialogue, il n'est pas facile d'ouvrir des systmes d'aide externes, dans la mesure o les botes de dialogue modales doivent tre fermes avant que le focus puisse passer une autre fentre. Le bouton Rduire ou Agrandir ne doit pas tre affich dans la barre de titre. Il s'agit d'une convention pour les botes de dialogue alors que les formulaires disposent gnralement de boutons Rduire et Agrandir.

http://plasserre.developpez.com/v4-13.htm (5 sur 7) [01/03/2005 14:48:44]

Site

Pour afficher l'aide contextuelle Faites glisser un composant HelpProvider de la bote outils vers votre formulaire. Le contrle est plac dans la barre d'tat des composants situe au bas de la fentre. Attribuer aux proprits Minimize et Maximize de la fentre la valeur false. Puis, Dans la fentre Proprits de la fentre, donner la proprit HelpButton la valeur true. Cette configuration permet d'afficher dans la partie droite de la barre de titre du formulaire un bouton contenant un point d'interrogation.

Slectionnez le contrle pour lequel vous souhaitez afficher l'aide dans votre formulaire et mettre dans la proprit HelpString la chane de texte qui sera affiche dans une fentre de type ToolTip. Test: Appuyez sur F5. Appuyez sur le bouton Aide (?) de la barre de titre et cliquez sur le contrle dont vous avez dfini la proprit HelpString. Le toolTip apparat.

Utilisation des info bulles.


Le composant ToolTip peut servir afficher des messages d'aide courts et spcialiss relatifs des contrles individuels. Cela ouvre une petite fentre indpendante rectangulaire dans laquelle s'affiche une brve description de la raison d'tre d'un contrle lorsque le curseur de la souris pointe sur celui-ci. Il fournit une proprit qui prcise le texte affich
http://plasserre.developpez.com/v4-13.htm (6 sur 7) [01/03/2005 14:48:44]

Site

pour chaque contrle du formulaire. En outre, il est possible de configurer, pour le composant ToolTip, le dlai qui doit s'couler avant qu'il ne s'affiche. Comment faire: Ajoutez le contrle ToolTip au formulaire.

Chaque contrle maintenant une proprit ToolTip ou on peut mettre le texte a afficher dans l'info bulle Utilisez la mthode SetToolTip du composant ToolTip.

On peut aussi le faire par code: ToolTip1.SetToolTip(Button1, "Save changes")

Par code crons de toute pice un ToolTip. Dim toolTip1 As New ToolTip() ' modifions les dlais du ToolTip. toolTip1.AutoPopDelay = 6000 toolTip1.InitialDelay = 2000 toolTip1.ReshowDelay = 500 ' Force le ToolTip a tre visible que la fentre soit active ou non . toolTip1.ShowAlways = True ' donne le texte de l'info bulle 2 contrles. toolTip1.SetToolTip(Me.button1, "My button1") toolTip1.SetToolTip(Me.checkBox1, "My checkBox1")

http://plasserre.developpez.com/v4-13.htm (7 sur 7) [01/03/2005 14:48:44]

Site

Site

Cours VB.net

4.14

Appel d'une API.

Les Api (Application Programming Interface) sont des bibliothques de liaisons dynamiques (DLL, Dynamic-Link Libraries), se sont des fonctions (gnralement crites en C) et qui sont compiles dans une DLL. Elles
q

font : soit partie intgrante du systme d'exploitation Windows.(API Windows) Ce sont ces Api (Kernel32.Dll=coeur du systme, User32Dll= fonctionnement des applications, gdi32..dll=interface graphique) que Windows utilise pour fonctionner. Les fonctions sont donc crites pour Windows; parfois on n'a pas d'quivalent VB, aussi, plutt que de les rcrire quand on en a besoin, on appelle celles de Windows. Elles permettent d'effectuer des tches lorsqu'il s'avre difficile d'crire des procdures quivalentes. Par exemple, Windows propose une fonction nomme FlashWindowEx qui vous permet de varier l'aspect de la barre de titre d'une application entre des tons clairs et foncs. Il faut avouer que, le Framework fournissant des milliers de classes permettant de faire pratiquement tout ce que font les Api Windows, on a trs peu utiliser les Api Windows. Chaque fois que cela est possible, vous devez utiliser du code manag partir du .NET Framework plutt que les appels API Windows pour effectuer des tches.

soit partie de dll spcifiques fournies par des tiers pour permettre d'appeler des fonctions n'existant pas dans VB ni Windows. Par exemple , il existe des Api MySql qui donnent accs

http://plasserre.developpez.com/v4-14.htm (1 sur 8) [01/03/2005 14:48:46]

Site

aux divers fonctions permettant d'utiliser une base de donnes MySql. (Ces Api contiennent 'le moteur' de la base de donnes.) Les Api sont en code non manag. De plus elles n'utilisent souvent pas les mmes types de donnes que VB . L'appel des Api se faisant avec des passages de paramtres, il y a des prcautions prendre!! Sinon cela plante!!!cela plante vraiment.

Les Api Windows


L'avantage de l'utilisation d'API Windows dans votre code rside dans le gain de temps de dveloppement, car elles contiennent des centaines de fonctions utiles dj crites et prtes tre utilises. L'inconvnient des API Windows est qu'elles peuvent tre complexes utiliser et implacables lorsqu'une opration se droule mal. Pour plus d'informations sur les API Windows, consultez la documentation du kit de dveloppement Win32 SDK dans les API Windows du kit de dveloppement Platform SDK. Pour plus d'informations sur les constantes utilises par les API Windows, examinez les fichiers d'en-tte, tels que Windows.h, fournis avec le kit de dveloppement Platform SDK. MSDN donne aussi une description des Api Appels API avec Declare La faon la plus courante d'appeler les API Windows consiste utiliser l'instruction Declare. Exemple ( repris de chez Microsoft): appel de la fonction Windows 'MessageBox' qui est dans user32.dll et qui affiche une MessageBox.
q

Rechercher de la documentation de la fonction: MSDN et les Api donne la dfinition de la fonction MesssageBox:

int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
Parameters hWnd [in] Handle to the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.

http://plasserre.developpez.com/v4-14.htm (2 sur 8) [01/03/2005 14:48:46]

Site

lpText [in] Pointer to a nullterminated string that contains the message to be displayed. lpCaption [in] Pointer to a nullterminated string that contains the dialog box title. If this parameter is NULL, the default title Error is used. uType [in] Specifies the contents and behavior of the dialog box. This parameter can be a combination of flags from the following groups of flags.

Constantes API Windows : Vous pouvez dterminer la valeur numrique de des constantes utiliser dans les Api par l'examen des instructions #define dans le fichier WinUser.h. Les valeurs numriques sont gnralement affiches au format hexadcimal. Par consquent, vous pouvez les convertir au format dcimal. Par exemple, si vous voulez combiner les constantes pour le style exclamation MB_ICONEXCLAMATION 0x00000030 et le style Oui/Non MB_YESNO 0x00000004, vous pouvez ajouter les nombres et obtenir un rsultat de 0x00000034, ou 52 dcimales. Return Value Abort button was selected. Cancel button was selected. Continue button was selected. Ignore button was selected. No button was selected. OK button was selected. Retry button was selected.

IDABORT IDCANCEL IDCONTINUE IDIGNORE IDNO IDOK IDRETRY

http://plasserre.developpez.com/v4-14.htm (3 sur 8) [01/03/2005 14:48:46]

Site

IDTRYAGAIN IDYES

Try Again button was selected. Yes button was selected.

Il faut dclarer la procdure DLL Ajoutez la fonction Declare suivante la section de dclaration du formulaire de dpart de votre projet ou celle de la classe ou du module o vous voulez utiliser la DLL :

Declare Auto Function MBox Lib "user32.dll" _ Alias "MessageBox" (ByVal hWnd As Integer, _ ByVal txt As String, ByVal caption As String, _ ByVal Typ As Integer) As Integer
Declare comprend les lments suivants. Le modificateur Auto indique de suivre les rgles du Common Language Runtime. Le nom qui suit Function est celui que votre programme utilise pour accder la fonction importe. Le mot cl Alias indique le nom rel de cette fonction. Lib suivi du nom et de l'emplacement de la DLL qui contient la fonction que vous appelez. Vous n'avez pas besoin d'indiquer le chemin d'accs des fichiers situs dans les rpertoires systme Windows. Utilisez le mot cl Alias si le nom de la fonction que vous appelez n'est pas un nom de procdure Visual Basic valide ou est en conflit avec le nom d'autres lments de votre application. Alias indique le nom rel de la fonction appele. Les types de donnes que Windows utilise ne correspondent pas ceux de Visual Studio. Visual Basic effectue la plupart des tches votre place en convertissant les arguments en types de donnes compatibles, processus appel marshaling. Vous pouvez contrler de manire explicite la faon dont les arguments sont marshals en utilisant l'attribut MarshalAs dfini dans l'espace de noms System.Runtime.InteropServices.

http://plasserre.developpez.com/v4-14.htm (4 sur 8) [01/03/2005 14:48:46]

Site

Remarque Les versions antrieures de Visual Basic vous autorisaient dclarer des paramtres As Any (tout type). Visual Basic .NET ne le permet pas.

Ajoutez des instructions Const la section des dclarations de votre classe ou module pour rendre ces constantes disponibles pour l'application. Par exemple :

Const Const Const Const

MB_ICONQUESTION = &H20L MB_YESNO = &H4 IDYES = 6 IDNO = 7

Pour appeler la procdure DLL

Dim RetVal As Integer ' Valeur de retour.

RetVal = MBox(0, "Test DLL", "Windows API MessageBox", _ MB_ICONQUESTION Or MB_YESNO) If RetVal = IDYES Then MsgBox("Vous avez cliqu sur OUI") Else MsgBox("Vous avez cliqu sur NON") End If

Visual Basic .NET convertit automatiquement les types de donnes des paramtres et valeurs de retour pour les appels API Windows, mais vous pouvez utiliser l'attribut MarshalAs pour indiquer de faon explicite les types de donnes non manags attendus par une API. On peut aussi appeler une API Windows l'aide de l'attribut DllImport mais c'est compliqu.

Autre exemple classique.


Utilisation de la routine BitBlt qui dplace des octets. La documentation donne les renseignements suivants:

Declare Function BitBlt Lib "gdi32" ( _ ByVal hDestDC As Long, _ ByVal x As Long, _
http://plasserre.developpez.com/v4-14.htm (5 sur 8) [01/03/2005 14:48:46]

Site

ByVal y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hSrcDC As Long, _ ByVal xSrc As Long, _ ByVal ySrc As Long, _ ByVal dwRop As RasterOps _ ) As Long

Parameter Information hdcDest Identifies the destination device context. nXDest Specifies the logical x-coordinate of the upper-left corner of the destination rectangle. nYDest Specifies the logical y-coordinate of the upper-left corner of the destination rectangle. nWidth Specifies the logical width of the source and destination rectangles. nHeight Specifies the logical height of the source and the destination rectangles. hdcSrc Identifies the source device context. nXSrc Specifies the logical x-coordinate of the upper-left corner of the source rectangle. nYSrc Specifies the logical y-coordinate of the upper-left corner of the source rectangle. dwRop Specifies a raster-operation code.

Les Constantes dwRop

' Copies the source bitmap to destination bitmap SRCCOPY = &HCC0020 ' ' Combines pixels of the destination with source bitmap using the Boolean AND operator. SRCAND = &H8800C6 ' ' Combines pixels of the destination with source bitmap using the Boolean XOR operator. SRCINVERT = &H660046 '
http://plasserre.developpez.com/v4-14.htm (6 sur 8) [01/03/2005 14:48:46]

Site

' Combines pixels of the destination with source bitmap using the Boolean OR operator. SRCPAINT = &HEE0086 ' ' Inverts the destination bitmap and then combines the results with the source bitmap ' using the Boolean AND operator. SRCERASE = &H4400328 ' ' Turns all output white. WHITENESS = &HFF0062 ' ' Turn output black. BLACKNESS = &H42

Return Values If the function succeeds, the return value is nonzero.

Ici on va utiliser cette routine pour copier l'image de l'cran dans un graphics. Private Declare Function BitBlt Lib "gdi32.dll" Alias "BitBlt" (ByVal _ hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As _ Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal _ hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, _ ByVal dwRop As System.Int32) As Long Dim memoryImage As Bitmap Private Sub CaptureScreen() Dim mygraphics As Graphics = Me.CreateGraphics() Dim s As Size = Me.Size memoryImage = New Bitmap(s.Width, s.Height, mygraphics) Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage) Dim dc1 As IntPtr = mygraphics.GetHdc Dim dc2 As IntPtr = memoryGraphics.GetHdc

BitBlt(dc2, 0, 0, Me.ClientRectangle.Width, Me.ClientRectangle.Height, dc1, 0, 0, 13369376)

mygraphics.ReleaseHdc(dc1) memoryGraphics.ReleaseHdc(dc2) End Sub

http://plasserre.developpez.com/v4-14.htm (7 sur 8) [01/03/2005 14:48:46]

Site

Le dernier paramtre a pour valeur= 13369376= SRCCOPY = &HCC0020 et correspond 'Copies the source bitmap to destination bitmap'.

http://plasserre.developpez.com/v4-14.htm (8 sur 8) [01/03/2005 14:48:46]

Site

Site

Cours VB.net
Drag and Drop.
(Drag ans Drop) peut tre

4.15

L'excution d'oprations glisser-dplacer ajoute dans un programme.

La mthode DoDragDrop du contrle de dpart autorise la collecte des donnes au dbut de l'opration. Les vnement DragEnter, DragLeave et DragDrop. permettent de 'poser' les donnes dans le contrle d'arrive.

Exemple No 1 (simple)
Exemple: Le contrle de dpart est un contrle Button, les donnes faire glisser sont la chane reprsentant la proprit Text du contrle Button, et les effets autoriss sont la copie ou le dplacement. Le texte sera dpos dans un textBox: Le contrle de dpart. La fonctionnalit qui autorise la collecte des donnes au dbut de l'opration glisser dans la mthode DoDragDrop. L'vnement MouseDown du contrle de dpart est gnralement utilis pour dmarrer l'opration glisser parce qu'il est le plus intuitif (la plupart des glisser-dplacer commencent par un appuie sur le bouton de la souris). Mais, souvenez-vous que n'importe quel vnement peut servir initialiser une procdure glisser-dplacer. Remarque Les contrles ListView et TreeView, , ont un vnement ItemDrag qui est spcifique .

Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown Button1.DoDragDrop(Button1.Text, DragDropEffects.Copy Or DragDropEffects.Move) End Sub Le premier argument indique les donnes dplacer.

http://plasserre.developpez.com/v4-15.htm (1 sur 4) [01/03/2005 14:48:48]

Site

Le second les effets permis = copier ou dplacer. Le contrle d'arrive Toute zone d'un Windows Form ou d'un contrle peut tre configure pour accepter les donnes dplaces en dfinissant la proprit AllowDrop et en grant les vnements DragEnter et DragDrop. Dans notre exemple, c'est un contrle TextBox1 qui est le contrle d'arrive. TextBox1.AllowDrop =True. 'autorise le contrle TextBox recevoir

Dans l'vnement DragEnter du contrle qui doit recevoir les donnes dplaces Vrifier que le type des donnes est compatible avec le contrle d'arrive (ici, vrifier que c'est bien du texte). Dfinir ensuite l'effet produit lorsque le dplacement a lieu en lui attribuant une valeur de l'numration DragDropEffects.(ici il faut copier)

Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub

Dans l'vnement DragDrop du contrle d'arrive, utilisez la mthode GetData pour extraire les donnes que vous faites glisser.

Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text).ToString End Sub

Exemple No 2 plus complexe:


Glisser dplacer une ligne d'une listBox 'ListBox1' vers une listBox 'ListBox2'. Crer une ListBox1 Crer une listBox2 avec sa proprit AllowDrop=True 'listBox2 accepte le 'lcher'

http://plasserre.developpez.com/v4-15.htm (2 sur 4) [01/03/2005 14:48:48]

Site

Dans l'en-tte du module ajouter:


Public IndexdInsertion As Integer sera insr la ligne ' Variable contenant l'index ou

'Eventuellement pour l'exemple charger les 2 ListBox avec des chiffres pour pouvoir tester. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase Dim i As Integer For i = 1 To 100 ListBox1.Items.Add(i.ToString) Next For i = 1 To 100 ListBox2.Items.Add(i.ToString) Next End Sub 'Dans le listBox de dpart, l'vnement MouseDown dplacer par DoDragDrop. dclenche le glisser

Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown ListBox1.DoDragDrop(ListBox1.Items(ListBox1.IndexFromPoint(e.X, e.Y)), DragDropEffects.Copy Or DragDropEffects.Move) End Sub 'ListBox1.IndexFromPoint(e.X, e.Y) retourne l'Index de l'item ou se trouve la souris partir des coordonnes e.x et e.y du pointeur) 'DoDragDrop a 2 arguments: l'lment draguer et le mode

'DragOver qui survient quand la souris se balade sur le contrle d'arriv, vrifie si le Drop reoit bien du texte et met dans IndexdInsertion le listItem qui est sous la souris. 'Noter que e.x et e.y sont les coordonnes cran , il faut les transformer en coordonnes client (du contrle) par PointToClient afin d'obtenir l'index de l'item ou se trouve la souris (en utilisant IndexFromPoint. Private Sub ListBox2_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListBox2.DragOver If Not (e.Data.GetDataPresent(GetType(System.String))) Then e.Effect = DragDropEffects.None Else IndexdInsertion = ListBox2.IndexFromPoint(ListBox2.PointToClient(New Point(e.X, e.Y))) e.Effect = DragDropEffects.Copy End If End Sub 'Enfin dans DragDrop, on rcupre le texte dans Item et on ajoute un item aprs l'item point. Private Sub ListBox2_DragDrop(ByVal sender As Object, ByVal e As
http://plasserre.developpez.com/v4-15.htm (3 sur 4) [01/03/2005 14:48:48]

Site

System.Windows.Forms.DragEventArgs) Handles ListBox2.DragDrop Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object) ListBox2.Items.Insert(IndexdInsertion + 1, item) End Sub

http://plasserre.developpez.com/v4-15.htm (4 sur 4) [01/03/2005 14:48:48]

Site

Site

Cours : VB.net

4.20Dboguage.

Le dboguage est la recherche des bugs.(voir 4-3 Traiter les erreurs) Pour dboguer, il faut lancer l'excution du programme, suspendre l'excution certains endroits du code et voir ce qui se passe puis faire avancer le programme pas pas: Pour dmarrer et arrter l'excution, on utilise les boutons suivants:

On lance le programme avec le premier bouton,on le suspend avec le second, on l'arrte dfinitivement avec le troisime..

On peut suspendre (l'arrter temporairement) le programme:


q

avec le second bouton grce des points d'arrt (pour dfinir un point d'arrt en mode de conception, cliquez en face d'une ligne dans la marge grise: la ligne est surligne en marron. Quand le code est excut , il s'arrte sur cette ligne marron). For i= 1 To 6 q Tableau(i)=i*i

http://plasserre.developpez.com/v4-20.htm (1 sur 7) [01/03/2005 14:48:50]

Site

Next i En plus si on clique sur le rond de gauche avec le bouton droit de la souris, on ouvre un menu permettant de modifier les proprits de ce point d'arrt (il y a la possibilit d'arrter au premier ou au Xime passage sur le point d'arrt, ou arrter si une expression est True ou chang)
q q

en appuyant sur Ctrl-Alt-Pause en incluant dans le code une instruction Stop

Attention: Si vous utilisez des instructions Stop dans votre programme, vous devez les supprimer avant de gnrer la version finale. Les transformer en commentaire : ' Stop ou utiliser des instructions conditionnelles : #If DEBUG Then Stop #End If

Dboguage
Quand le programme est suspendu, on peut observer variables, dplacer le point d'excution, on peut faire marcher le programme pas pas (instruction instruction) et observer l'volution de la valeur variables, on peut enfin modifier la valeur d'une afin de tester le logiciel avec cette valeur. les aussi par des variable

F11 permet l'excution pas pas (y compris des procdures appeles: si il y a appel une autre procdure, le pas pas saute dans l'autre procdure) F10 permet le pas pas (sans dtailler les procdures appeles: excute la procdure appele en une fois) Maj+F11 excute jusqu' la fin de la procdure en cours.

http://plasserre.developpez.com/v4-20.htm (2 sur 7) [01/03/2005 14:48:50]

Site

On peut afficher ou dfinir l'instruction suivante, excuter jusqu'au curseur, insrer un point d'arrt ou un espion en cliquant sur le bouton droit de la souris et en choisissant une ligne du menu.

Espion express permet de saisir une expression (variable, calcul de variables) et de voir ensuite dans une fentre 'espion' les modifications de cet expression au cours du droulement du programme. On peut grce au menu 'Dboguage' puis 'Fentre' ouvrir les fentres: Automatique, qui affiche les valeurs des variables de l'instruction en cours et des instructions voisines. Immdiat ou il est possible de taper des instructions ou expressions pour les excuter ou voir des valeurs. Taper "?I" (c'est l'quivalent de "Print I" qui veut dire: afficher la valeur de la variable I) puis valider, cela affiche la valeur de la variable I. Autre exemple, pour voir le contenu d'un tableau A(), tapez sur une seule ligne: "For i=0 to 10: ?i: Next i" Enfin, il est possible de modifier la valeur d'une variable: Taper" I=10" puis valider, cela

http://plasserre.developpez.com/v4-20.htm (3 sur 7) [01/03/2005 14:48:50]

Site

modifie la valeur de la variable. Espions permettant d'afficher le contenu de variables ou d'expressions. Espions Express permet d'afficher la valeur de l'expression slectionne. Points d'arrts permet de modifier les proprits des points d'arrts. on peut mettre un point d'arrt en cliquant dans la marge grise gauche: l'instruction correspondante s'affiche en marron et l'excution s'arrtera sur cette ligne. Me affiche les donnes du module en cours. Variables locales affiche les variables locales. Modules affiche les dll ou .exe utiliss. Mmoire, Pile d'appels, Thread, Registres, Code Machine permettent d'tudier le fonctionnement du programme un niveau plus spcialis et technique.

Comment voir rapidement la valeur de proprits ou de variables. Il est toujours possible de voir la valeur d'une proprit d'un objet en la slectionnant avec la souris: Exemple on slectionne label1.Text et on voit apparatre sa valeur.

Pour les variables, il suffit que le curseur soit sur une variable pour voir la valeur de cette variable. On peut aussi copier une expression dans la fentre 'immdiat' , mettre un ? avant et valider pour voir la valeur de l'expression.

http://plasserre.developpez.com/v4-20.htm (4 sur 7) [01/03/2005 14:48:50]

Site

Attention l'affichage: Parfois en mode pas pas on regarde le rsultat d'une instruction dans la fentre du programme. Par exemple on modifie la proprit text d'un label et on regarde si le label bien chang. Parfois la mise jour n'est pas effectue car le programme met jour certains contrles seulement en fin de procdure. pour palier cela et afficher au fur et mesure, mme si la procdure n'est pas termine, on utilise la mthode Refresh de l'objet qui 'met jour'. Exemple: Label1.text="A" Label1.Refresh Cela ne semble pas toujours fonctionner. Avez-vous une explication?

Objet Console
On peut crire sur la fentre console, quand on a parfois besoin d'afficher des informations, mais uniquement pour le programmeur: Console.WriteLine( myKeys(i)) Mais dans un programme Windows, il n'y a pas de console!! la sortie est donc envoye vers la fentre de sortie (voir Debug)(Menu Affichage>Autres fentres>Sortie pour voir la fentre) Autre exemple: Dim amis() As String = {"pierre", "jean", "jacques", "toto"} For Each nom As String In amis Console.Out.WriteLine(nom) Next

Objet Debug
L'espace de noms Systems.Diagnostics est ncessaire.

http://plasserre.developpez.com/v4-20.htm (5 sur 7) [01/03/2005 14:48:50]

Site

Pour dboguer du code, on a parfois besoin d'afficher des informations, mais uniquement pour le programmeur, en mode debug afin de suivre le cheminement du programme ou la valeur d'une variable ou si une condition se ralise; pour cela on utilise une fentre nomme 'Sortie'(Output). (Menu Affichage>Autres fentres>Sortie) Pour crire dans la fentre Output (sans arrter le programme):
q

Du texte:

Debug.Write(Message) et pour ajouter un passage la ligne: Debug.WriteLine(Message)


q

Le contenu d'une variable:

Debug.Write(Variable)
q

Les proprits d'un objet:

Debug.Write(Objet) Exemple: Debug.Write("a marche") Dim A as Integer=2 Debug.Write(A) Debug.Write(A+2) 'Affiche 2 'Affiche 4 'Affiche 'a marche'

On voit que s'il y a une expression, elle est value. On peut aussi afficher un message si une condition est remplie en utilisant WriteLineIf ou WriteIf: Debug.WriteLineIf(i = 2, "i=2") Affiche 'i=2' si i=2

Cela vous permet, sans arrter le programme (comme le fait Assert), d'tre inform quand une condition est vrifie. Debug.Assert par contre affiche une fentre Windows et

http://plasserre.developpez.com/v4-20.htm (6 sur 7) [01/03/2005 14:48:50]

Site

stoppe le programme si une assertion(une condition) passe False. Debub.Assert(Assertion) Debub.Assert(Assertion, Message1) Debub.Assert(Assertion, Message1, Message2) L'exemple suivant vrifie si le paramtre 'type' est valide. Si le type pass est une rfrence null (Nothing dans Visual Basic), Assert ouvre une boite de dialogue nomm 'Echec Assertion' avec 3 boutons 'Abandonner, Recommencer' 'Ignorer'.. La liste des appels est affiche dans la fentre (procdure en cours en tte de liste, module et numro de ligne en premire ligne) Public Shared Sub UneMethode (type As Type, Typedeux As Type) Debug.Assert( Not (type Is Nothing), "Le paramtre Type est=Nothing ", "Je ne peux pas utiliser un Nothing") .... End Sub UneMethode

Debug.Fail Fait pareil mais sans condition.

Trace:
Trace possde les mmes fonctions que Debug (Write, WriteIf, Assert, Fail..) mais la diffrence est que Trace permet d'afficher l'utilisateur final par dfaut. Trace est activ par dfaut. Par consquent, du code est gnr pour toutes les mthodes Trace dans les versions release et debug. Ceci permet un utilisateur final dactiver le traage pour faciliter lidentification du problme sans que le programme ait tre recompil. Par opposition, Debug est dsactiv par dfaut dans les versions release, donc aucun code excutable nest gnr pour les mthodes Debug.

http://plasserre.developpez.com/v4-20.htm (7 sur 7) [01/03/2005 14:48:50]

Site

Site

Cours : VB.net

Comprendre D 1.1 le FrameWork.


Comment fonctionne un programme VB.NET ? Le Framework.NET Pour qu'un programme fonctionne, il faut installer le Framework.NET: C'est une plate-forme informatique, une couche entre Windows et l'application VB. Cette infrastructure offre un vaste accs :

1. l'ensemble du systme d'exploitation. 2. une collection d'objets utilisables pour crer des
programmes.

3. des routines d'excution de programme.


de manire homogne et trs fiable.

Systme d'exploitation:Windows Framework:CLR et Classes Visual Basic


L'excutable en Visual Basic

1. utilise les objets (WindowsForms, Contrles, type de


variable,..)du Framework.

2. appelle les fonctions (excution, affichage, gestion de la


mmoire, lecture dans une base de donne..)du Framework.

http://plasserre.developpez.com/vd1-1.htm (1 sur 5) [01/03/2005 14:48:52]

Site

A la limite on peut considr le Framework comme une machine virtuelle (comme celle de Java). Il suffirait de porter le FrameWork sous Linux pour que les programmes VB fonctionnent. (Info? Intox?) Inconvnients? La couche supplmentaire ralentie le programme? A peine, cela serait insignifiant. Et s'il y a une nouvelle version du Framework? Les versions successives devront tre compatible ascendante et descendante!! Intrts? On installe une seule fois le Framework. Une fois le Framework install, il suffit pour installer un nouveau programme de n'installer que l'excutable. On peut utiliser plusieurs langages. Nous appelons les fonctions du FrameWork avec Visual Basic mais on peut aussi le faire avec C# et 30 autres langages. La vitesse d'excution sera la mme, les types de variables, les objets seront les mmes. Plus de problmes de transfert de paramtres. Il est mme possible de faire cohabiter plusieurs langages dans une mme application. Le code est homogne. Plus de bidouille, de ficelle de programmation pour contourner les lacunes du langage et l'accs limit au systme d'exploitation: Les milliers de Classes du FrameWork donne accs une multitude de fonctions et aux services du systme d'exploitation, cela nativement. Revoyons en dtails le contenu du Framework: Il contient deux composants principaux :
q

Le Common Language Runtime. Le runtime peut tre considr comme un agent qui manage le code au moment de l'excution, qui l'excute, fournit des services essentiels comme la gestion de la mmoire, la gestion des threads, et l'accs distant. La bibliothque de classes du .NET FrameWork. C'est une collection complte oriente objet, de types rutilisables que vous pouvez utiliser pour dvelopper des applications allant des traditionnelles applications ligne de commande

http://plasserre.developpez.com/vd1-1.htm (2 sur 5) [01/03/2005 14:48:52]

Site

ou interface graphique utilisateur (GUI, Graphical User Interface) jusqu' des applications qui exploitent les dernires innovations fournies par ASP.NET, comme les services Web XML et Web Forms. Par exemple, les classes Windows Forms sont un ensemble complet de types rutilisables qui simplifient grandement le dveloppement Windows. Si vous crivez une application Web Form ASP.NET, vous pouvez utiliser les classes Web Forms. Il existe un ventail de tches courantes de programmation y compris des tches comme la gestion de chanes, la collection de donnes, la connectivit de bases de donnes, et l'accs aux fichiers. Il y a 3300 Classes!! Plus d'appel aux Api Windows, on fait tout directement en utilisant les classes du Framework.

Code manag: Le code crit pour le FrameWork est dit manag (ou gr): il bnficie des avantages du Framework: gestion de la mmoire, optimisation de cette mmoire, rgles communes, utilisation de plusieurs langages.. Les anciens composants COM sont utilisables mais non manags. L'interoprabilit entre les codes manags et non manags permet aux dveloppeurs de continuer utiliser des composants COM et des DLL ncessaires. Compilation: Lors de la gnration du projet, un code (IL: Intermdiaire Langage), ce code est langages. Lors de la premire excution, binaire. Les excutions suivantes seront Installation: Les applications et contrles crits pour le .NET Framework imposent que celui-ci soit install sur l'ordinateur o ils s'excutent. Microsoft fournit un programme d'installation redistribuable, Dotnetfx.exe , qui contient les composants Common Language Runtime et .NET Framework ncessaires l'excution des applications .NET Framework. Pour installer le FrameWork, il faut au moins:
q

intermdiaire est produit commun tous les le code est compil en plus rapides.

Microsoft Windows 98

http://plasserre.developpez.com/vd1-1.htm (3 sur 5) [01/03/2005 14:48:52]

Site
q q q

q q q

Microsoft Windows 98 Deuxime dition Microsoft Windows Millennium Edition (Windows Me) Microsoft Windows NT 4 (Workstation ou Server) avec le Service Pack 6a Microsoft Windows 2000 (Professionnel) avec MAJ. Microsoft Windows XP (dition familiale ou Professionnel) Famille Microsoft Windows Server 2003

Ou le trouver: Dans le MSDN Download Center sur Internet: http://msdn.microsoft.com/downloads/ puis http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3f589-4842-8157-034d1e7cf3a3&displaylang=fr

(ou http://msdn.microsoft.com/downloads/list/netdevframework.asp) Choisir autre langue=Franais puis charger le FrameWork 1.1 Franais (23.6 Mo) puis lancer l'installation avec Dotnetfx.exe. (Bien choisir la version franaise car on ne peut pas installer plusieurs versions de langue diffrente) Pour dvelopper il faut ensuite installer Visual Studio.Net. L'utilisateur final de l'excutable installera le FrameWork et l'excutable (programme simple). Ou est le Framework? dans: c:\Windows\Microsoft.NET\Framework\v1.1 4322\ On voit les DLL qui composent le Framework: System.dll, System.Drawing.dll.. La version 1.1 fait 73 Mo sur le disque On peut installer cot la version 1.0; Pourquoi installer les 2 si il y a compatibilit ascendante? c'est une question!! Nouvelle version 2: VisualStudio 2005 utilise le Framework 2.0, bien sur il y a un SDK 2.0 Ce sont des versions beta. (11/2004)

http://plasserre.developpez.com/vd1-1.htm (4 sur 5) [01/03/2005 14:48:52]

Site

http://plasserre.developpez.com/vd1-1.htm (5 sur 5) [01/03/2005 14:48:52]

Site

Site

Cours : VB.net

Distribution D 1.2 d' une application.


Comment distribuer un programme VB.NET ? Programme simple

Le dveloppeur

doit compiler son application, la gnrer,

- Il indique les proprits du programme gnrer:Menu Projet>Proprit du projet.


q q

Gnration en mode Release (et pas en mode Debug) On peut choisir de gnrer ou non des informations de dbogage.

- Puis, il gnre en utilisant le Menu Gnrer-> Gnrer la Solution Le programme excutable ainsi cre se trouve dans le rpertoire \bin.

Chez l'utilisateur:
q q

Il faut installer le Framework.NET: Copier l'excutable (et ventuellement les fichiers de donnes) dans un rpertoire.

Pour utiliser le programme, l'utilisateur lance l'excutable. Crer un programme d'installation automatique: Il est bien sur plus simple de crer un programme d'installation automatique:

http://plasserre.developpez.com/vd1-2.htm (1 sur 5) [01/03/2005 14:48:54]

Site

L'utilisateur lance Setup.exe qui est sur un cd d'installation et ce programme installe le logiciel. L'assistant la cration du programme d'installation est dans VB: Pour cela il faut crer un projet de configuration et dploiement, en modifier certaines proprits puis le gnrer. Menu Fichiers->Ajouter un projet->Nouveau Projet-> Cliquez dans la liste sur 'Projet de configuration et de dploiement.' puis sur l'icne 'Assistant de configuration'. Il faut vrifier en bas de la fentre 'Ajouter un nouveau projet' le chemin.

Suivez les divers crans en vous rappelant que vous utiliser une application Windows en sortie principale, n'oubliez pas de rajouter si ncessaire certains fichiers (les fichiers de donnes ncessaires ). Aprs le bouton 'Terminez', il est ajout dans la fentre de l'explorateur de solution une ligne nomm par dfaut 'Setup1' correspondant au projet de l'installateur. Il est cre un onglet 'Systme de fichiers' dans la fentre principale. Vous venez de crer votre projet de configuration et dploiement, vous pouvez maintenant le modifier.

http://plasserre.developpez.com/vd1-2.htm (2 sur 5) [01/03/2005 14:48:54]

Site

Le fait de cliquer sur le 'dossier d'application' ou sur sur ligne dans l'explorateur de solution affiche dans la fentre de proprits, les proprits de l'installation. La proprit DefaultLocation donne par exemple l'emplacement, le rpertoire d'installation. Il y a bien d'autres proprits permettant de personnaliser votre installateur (Auteur, nom de l'entreprise, Version...) Enfin quand on clique sur Setup1 dans l'explorateur de solutions, il apparat des boutons donnant accs des diteurs de registre, de d'interface de l'installateur, de condition de lancement.. Si on clique sur le 3eme bouton on ouvre l'diteur d'interface qui donne accs au droulement de l'installateur. En cliquant sur la premire fentre ('Bienvenue') on a accs aux proprits de cette fentre: texte, image..

http://plasserre.developpez.com/vd1-2.htm (3 sur 5) [01/03/2005 14:48:54]

Site

Pour crer effectivement l'installateur il faudra enregistrer puis utiliser le Menu Gnrer-> Gnrer Setup1. Un rpertoire nomm dans notre exemple 'SeptUp1' est cre; il contient Setup.exe Setup1.msi Setup.ini il suffit de mettre ces fichiers sur un cd et de le donner l'utilisateur final qui installera votre logiciel en lanant Setup.exe. Le logiciel d'installation vrifie si le FrameWork est bien install. Les assembly Pour les installations de programme , mises jour, utilisation de composants propres au programme ou partags avec d'autres programmes; pour grer les versions, viter les problmes de conflit de composants, on utilisa les assembly (ou assemblage). Dans l'explorateur de solution, double-cliquer sur

http://plasserre.developpez.com/vd1-2.htm (4 sur 5) [01/03/2005 14:48:54]

Site

Assemblyinfo.vb, dans la fentre principale s'ouvre permettant d'avoir accs certaines donnes.

http://plasserre.developpez.com/vd1-2.htm (5 sur 5) [01/03/2005 14:48:54]

Site

Site

Cours : VB.net

E Exemples: 4.1 Horloge.


Trs Simple: Comment crer une horloge numrique?

15:21:45
Dans la fentre Form1. Mettre un Timer (Timer1) Mettre un label (Label1) Ajouter le code Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 1000 toutes les secondes. Timer1.Start() End Sub Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = Now.ToLongTimeString format long. 'Affiche l'heure 'Timer1_Tick sera dclench

'On dmarre le Timer

http://plasserre.developpez.com/ve4-1.htm (1 sur 2) [01/03/2005 14:48:55]

Site

End Sub Simple!! non!!

http://plasserre.developpez.com/ve4-1.htm (2 sur 2) [01/03/2005 14:48:55]

Site

Site

Cours : VB.net

Programmation 5.1 Oriente Objet =POO.


VB.NET permet maintenant de faire de la POO (Programmation Oriente Objet) part entire: Les Classes prdfinies dj existantes dans le FrameWork, obissent la POO, les classes que l'on cre soi mme dans des modules de Classe suivront elles aussi les rgles de la POO :

Pour ce chapitre, nous sommes du cot de l'application utilisatrice des objets (et non dans les objets).

Interface et implmentation:
Nous savons dj: On utilise une Classe (le moule) pour instancer (crer) un objet. Une classe est une combinaison de code et de donnes.
q

Le code et la dfinition des donnes constituent l'implmentation. L'interface de l'objet est l'ensemble de ses membres visibles et utilisables (les membres se sont les proprits, les mthodes, les vnements).

Exemple:
http://plasserre.developpez.com/v5-1.htm (1 sur 4) [01/03/2005 14:48:57]

Site

Prenons un objet d'une classe ListBox:


q

L'interface c'est ListBox.Visible la vois , je peux l'utiliser.

ListBox.AddItem...Je

L'implmentation, je ne la vois pas, c'est le code qui gre la ListBox, la dfinition des lments; c'est une 'boite noire', je ne sais pas ce qui s'y passe, je n'y est pas accs, et c'est tant mieux!!!

Encapsulation:
Le fait de ne pas voir l'implmentation (le code), c'est l'encapsulation. Le code, les dfinitions de donnes sont privs l'objet et non accessibles, ils sont enferms, encapsuls dans une boite noire.

L'encapsulation permet donc d'exposer aux applications clientes uniquement l'interface. Les applications clientes n'ont pas se soucier fonctionnement interne. du

Cela a une consquence, si je modifie le code mais pas l'interface, l'application cliente n'a pas tre modifie.

Hritage:
On a vu d'un objet issu d'une Classe hrite des membres de la classe parent, cela cre une relation mre/fille (parent/enfant); la classe fille pouvant rutiliser les membres de la classe mre. A noter qu'une classe ne peut hriter que d'une classe en VB.NET. La Classe fille peut utiliser les membres de la classe mre, mais aussi ajouter ses propres membres ou redfinir certains membres de la classe mre. Exemple:

http://plasserre.developpez.com/v5-1.htm (2 sur 4) [01/03/2005 14:48:57]

Site

On a vu que quand on dessine une Form1, cela cre une Classe 'Form1' qui hrite des Windows.Forms (Inherits System.Windows.Forms.Form)

Polymorphisme:
Le nom de polymorphisme signifie qui peut prendre plusieurs formes. Il y a 3 sortes de polymorphisme:
q

Le polymorphisme de surcharge ou en anglais overloading.

Le polymorphisme de surcharge permet d'avoir des fonctions de mme nom, avec des fonctionnalits similaires, dans des classes sans aucun rapport entre elles . Par exemple, la classe Texte, la classe image et la classe Titre peuvent avoir une fonction affiche.
q

Le polymorphisme d'hritage (redfinition, spcialisation ou en anglais overriding)

C'est la forme la plus naturelle du polymorphisme: elle permet d'appeler la mthode d'un objet sans devoir connatre son type.
q

Le polymorphisme paramtrique (galement gnricit ou en anglais template)

Le polymorphisme paramtrique, reprsente la possibilit de dfinir plusieurs fonctions de mme nom mais possdant des paramtres diffrents (en nombre et/ou en type). Ainsi, on peut par exemple dfinir plusieurs mthodes effectuant une somme.
q

add()

La mthode int add(int, int) retourne la somme de deux entiers La mthode char add(char, char) retourne la somme de deux caractres La mthode int add(int, int, int) retourne la somme de trois entiers

On appelle signature chaque combinaison d'arguments d'une fonction (combinaison en nombre et en type). Une fonction a donc autant de signature que de manire d'appeler cette fonction C'est donc la signature d'une mthode qui dtermine quel code sera appel.

http://plasserre.developpez.com/v5-1.htm (3 sur 4) [01/03/2005 14:48:57]

Site

Constructeur, destructeur:
Un constructeur est une fonction effectue lors de l'instanciation d'un objet de la Classe; il sert gnralement 'initialiser' l'objet. Souvent il y a plusieurs signatures. Exemple: pour crer un objet graphique Point, j'utilise un constructeur permettant de dfinir les coordonnes du point: Dim P As New Point(45, 78) La destruction d'un objet est effectu lorsqu'on lui affecte la valeur Nothing ou lorsqu'on quitte la porte o il a t dfini.

http://plasserre.developpez.com/v5-1.htm (4 sur 4) [01/03/2005 14:48:57]

Site

Site

Cours : VB.net
Module de Classe.

5.2

On a vu qu'il existait des classes prdfinies (celle du Framework par exemple) mais on peut soi mme CREER SES PROPRES CLASSES: Prenons un exemple: On va crer une classe 'Mdicament'( c'est l'objet de ce chapitre). Une fois cette classe cre, du cot utilisateur, comment l'utiliser? Pour instancer un objet Medicament: Dim M As New Medicament Donner une valeur une proprit: M.Nom= "Aspirine": M.Laboratoire="RP" Rcuprer la valeur d'une proprit: LeNom=M.Nom : Nb= M.NombreMedicament

Mais il faut la crer avant cette Classe 'Mdicament': C'est l'objet de ce chapitre.

http://plasserre.developpez.com/v5-2.htm (1 sur 10) [01/03/2005 14:48:59]

Site

Pour la suite de ce chapitre, nous sommes DANS la Classe de l'objet ( et non dans l'application utilisatrice).

Crer une Classe


Menu Projet puis Ajouter une Classe. Entre 'Medicament' dans la zone nom puis OK Une nouvelle fentre de module est ajoute notre projet, contenant le code suivant: Public Class Medicament End Class Le mot avant Class indique la porte de la classe: Public (Classe instancable dans et hors du projet, utilisable par un autre programme) Private (Classe instancable que dans elle mme!!) Friend (Classe instancable dans le projet ) Protected (Classe instancable uniquement dans les classes drives) On peut ajouter: MustInherit: Cela donne une classe non instancable, on ne peut pas crer d'objet avec!! Alors quoi cela sert!! A fournir une base pour des classes qui en hriteront. NotInheritable: Cette classe ne peut-tre hrite.

Ajouter des variables dans le module de classe:


La variable peut tre 'Prive' et non visible l'extrieur:

http://plasserre.developpez.com/v5-2.htm (2 sur 10) [01/03/2005 14:48:59]

Site

Private mNom As String Elle peut tre 'Public' , visible l'extrieur et donc non encapsule. Public Laboratoire As String (A l'extrieur , si on instance M comme un mdicament, M.laboratoire sera valide)

On peut dfinir un champ 'Public' en lecture seule qui a une valeur constante: Public ReadOnly NombreMedicament=2000

Vous pouvez ajouter votre variable : Shared. Cela signifie que la variable dclare comme Shared est partage par toutes les instances de la classe : Public Shared Societe as String La proprit Societe de toutes les instances de Medicament aura la mme valeur (alors que chaque instance aura sa propre proprit Nom.)

Ajouter des membres grce 'Property'


Il faut ajouter des proprits et des mthodes (les membres) la Classe. Tapez 'Property Nom' puis validez, la dfinition de la proprit est gnre en faisant apparatre
q

un bloc Get qui correspond la lecture de la proprit par l'utilisateur. un bloc Set qui correspond l'criture de la proprit par l'utilisateur, on rcupre la valeur dans le paramtre value.

Property Nom() Get End Get

http://plasserre.developpez.com/v5-2.htm (3 sur 10) [01/03/2005 14:48:59]

Site

Set (By Val Value) End Set End Property J'ajoute Public pour que cette proprit soit accessible hors de la classe, j'indique que c'est une String. Lors de la lecture de la proprit (par l'utilisateur de l'instance) Get retourne (grce Return) la valeur mNom qui est une variable prive de la classe et qui sert stocker la valeur de la proprit. Lors de l'criture de la variable, Set rcupre la valeur dans Value et la met dans mNom: Public Property Nom() as String Get Return mNom End Get Set(By Val Value) mNom=value End Set End Property Encapsulation: La proprit 'Nom' est encapsule: l'utilisateur qui utilise une instance de la classe, ne voit pas ce qui se passe (ici c'est trs simple) quand il lit la proprit Nom, il ne voit pas l'implmentation (l'implmentation c'est Get...Set...), il ne voit que l'interface c'est dire .Nom Une proprit peut tre en lecture seule: Public ReadOnly Property InitialeNom() As String Get Return Left(mNom,1) End Get End Property Mais aussi en criture seule grce WriteOnly. Les proprits comme les mthodes peuvent tre Public, Private, Protected, Friend, ProtectedFrient: Vous pouvez ajouter votre membre : Shared. Cela signifie que la proprit ou la mthode dclare comme Shared est partage par toutes les instances de la classe.

Constructeur:
Un constructeur est une procdure excute lors de

http://plasserre.developpez.com/v5-2.htm (4 sur 10) [01/03/2005 14:48:59]

Site

l'instanciation. Dans le module de classe, elle est dfinie par: Sub New() End sub On peut ajouter des paramtres qui serviront instancer. Par exemple pour instancer et donner le nom en mme temps: Sub New(ByVal LeNom As String) nNom=LeNom End sub Cela permet Dim M As New Medicament("Aspirine")

On peut dfinir plusieurs constructeurs avec un nombre de paramtres diffrents (plusieurs signatures), dans ce cas il y a surcharge, le constructeur par dfaut tant celui sans paramtres.

Donnons un autre exemple: je veux savoir combien il a t cre d'instance de 'Mdicament': Crons une variable commune toutes les instances Private Shared Nb as Integer=0 Le constructeur va l'incrmenter chaque instanciation: Sub New() Nb+=1 End sub Il suffit de lire sa valeur pour savoir le nombre d'objet Medicament qui existent: Public ReadOnly Property NbInstance() Get NbInstance=Nb End Get End Property

Destructeur:
Il est toujours prfrable de dtruire un objet qui n'est
http://plasserre.developpez.com/v5-2.htm (5 sur 10) [01/03/2005 14:48:59]

Site

plus utilis en lui affectant la valeur Nothing. L'objet est aussi dtruit si on sort de sa porte. Comme on le fait avec New on peut utiliser une procdure Finalize qui est automatiquement appele quand l'objet est dtruit. Protected Overrides Sub Finalize () Ens Sub On peut y mettre le code librant les ressources ou d'autres choses. Noter que la procdure Finalize est ici la redfinition (d'ou 'Overrides') de la procdure Finalize (qui est Overridable) de la Classe Objet. Attention la mthode Finalize est excute quand l'objet est rellement dtruit(Objet=Nothing le rend inutilisable mais il est toujours prsent). C'est parfois trs tardivement que l'objet est dtruit: quand il y a besoin de mmoire (c'est le Garbage Collector qui entre en action) ou la sortie du programme. Pour forcer la destruction on peut utiliser l'interface IDisposable: Il faut mettre dans l'entte de la classe Implements IDisposable et mettre dans le code de la classe Public Sub Dispose() Implements System.IDisposable.Dispose End sub C'est une mthode Public, on peut l'appeler de l'application cliente: M.Dispose() M=Nothing Dans la pratique quelle est d'utilit de grer la destruction autrement que par Objet=Nothing si le Garbage Collector nettoie la mmoire? C'est une question. Rponse donne par Microsoft: Votre composant a besoin d'une mthode Dispose s'il alloue des objets systme, des connexions la base de donnes et d'autres ressources rares qui doivent tre libres ds qu'un utilisateur a fini de se servir d'un composant. Vous devez galement implmenter une mthode Dispose si votre composant contient des rfrences d'autres objets possdant des mthodes Dispose.

http://plasserre.developpez.com/v5-2.htm (6 sur 10) [01/03/2005 14:48:59]

Site

Dlgation:
Si dans le module de classe j'ai besoin de connatre le nombre d'instance de mdicament, je peux, bien sur, regarder la valeur de Nb mais je peux aussi utiliser Me.NbInstance ; cela revient utiliser un membre de la classe au sein d'une classe; cela s'appelle une dlgation.

Surcharge
On peut surcharger un constructeur. Pour cela il suffit de rajouter autant de procdure New que l'on veut avec pour chacune un nombre de paramtre diffrent (signatures diffrentes). Exemple surchargeons un constructeur: Class Figure Sub New() Bla Bla End Sub Sub New( ByVal X As Integer, ByVal Y As Integer) Blabla End Sub. End Class On peut donc instancer la classe correspondante de 2 manires: Dim A As New Figure ou Dim A As New Figure(100,150) On peut surcharger une property. Pour cela il suffit de rajouter des procdure Property ayant le mme nom de mthode avec pour chacune un nombre de paramtre diffrent (signature diffrente) On peut ajouter Overloads mais c'est facultatif. Exemple surchargeons un membre: Class Figure Public Overloads Property Calcul() Bla Bla End Sub Public Overloads Property Calcul( ByVal X As Integer, ByVal Y As Integer) Blabla End Sub. End Class 'Constructeur par dfaut

http://plasserre.developpez.com/v5-2.htm (7 sur 10) [01/03/2005 14:48:59]

Site

Evnement:
On peut dfinir un vnement pour la classe. Dans la classe:
q q

Il faut dclarer l'vnement, avec le mot Event Il faut utilisez l'instruction RaiseEvent pour le dclencher lorsqu'un tat ou une condition le ncessite.

Exemple: je cre une classe nomm 'Class1' qui contient un membre 'Texte'( Property Texte), si 'Texte' change, alors on dclenche l'vnement TextChange:

Public Class Class1 Private mTexte As String ' Dclare un vnement Public Event TextChange(ByVal UserName As String) Public Property Texte() Get Return mTexte End Get Set(ByVal Value) If Value <> mTexte Then RaiseEvent TextChange("hello") End If mTexte = Value End Set End Property End Class

Si l'application cliente modifie la proprit .Texte d'un objet Class1 alors on compare l'ancien et le nouveau texte, s'il est diffrent on dclenche un vnement TextChange. Dans l'application cliente:
q

Il faut dfinir dans la partie dclaration l'objet M de classe Class1 en indiquant qu'il gre des vnements. Private WithEvents M As Class1

http://plasserre.developpez.com/v5-2.htm (8 sur 10) [01/03/2005 14:48:59]

Site

Dans Form_Load par exemple il faut instancer l'objet: M= New Class1()

Il faut crire la procdure vnement avec son code: Private Sub M_TexteChange(ByVal v As String) Handles M.TextChange MsgBox("le texte a chang") End Sub

Ici on demande simplement quand le texte change, d'ouvrir une MessageBox. Lors de l'utilisation: M.Text="Nouveau text" 'dclenche la Sub M.TextChange qui dans notre exemple simple ouvre une MessageBox indiquant que le texte changer.

On remarque que la Classe dfini l'vnement, la procdure correspondant l'vnement est dans l'application cliente.(De la mme manire que quand on clique sur un objet bouton cela dclenche la procdure Bouton-Click.)

Hritage
Une classe peut hriter d'une autre classe, il suffit d'utiliser :'Inherits Nom de la classe mre' La classe fille possde tous les membres de la classe mre. Il est possible en plus de redfinir un des membres (de crer une nouvelle dfinition du membre dans la classe fille et uniquement pour cette classe fille) pour que cela marche il faut que le membre de la classe mre soit modifiable (overridable) et que le membre de mme nom de la classe fille soit modifi (Overrides) Crons une Classe Salari1 avec une mthode 'Salaire annuel sur 13 mois' Class Salari1 Public Overridable ReadOnly Property SalaireAnnuel() As

http://plasserre.developpez.com/v5-2.htm (9 sur 10) [01/03/2005 14:48:59]

Site

Integer Get SalaireAnnuel = SalaireMensuel * 13 End Get End Property End Class

Crons maintenant une classe Salari2 qui hrite de toutes les proprits de la classe salari1 mais donc la mthode SalaireAnnuel est sur 12 mois: Public Class Salari2 Inherits Salari1 Public Overrides ReadOnly Property SalaireAnnuel() As Integer Get SalaireAnnuel = SalaireMensuel * 12 End Get End Property End Class

http://plasserre.developpez.com/v5-2.htm (10 sur 10) [01/03/2005 14:48:59]

Site

Site

Cours : VB.net
Crer un composant.

5.3

On a vu qu'on pouvait CREER SES PROPRES CLASSES dans un projet, mais on peut aussi:
q

crer une Classe autonome qui sera utilise par plusieurs autres programmes, c'est une Bibliothque de Classe. crer un contrle utilisateur utilis lui aussi par d'autres programmes.

Jusqu'a prsent , on chargeait et utilisait, dans notre application cliente, des composants (classe ou contrles) tout faits. Maintenant nous allons crer ces classes ou contrles, ils seront utiliss par l'application cliente.

Bibliothque de Classe:
Pour crer une bibliothque de Classe, il faut faire menu Fichier, Nouveau, Projet :

Cliquer sur l'icne 'Bibliothque de Classes. Le nom par dfaut est ClassLibrary1 , valider sur Ok.

http://plasserre.developpez.com/v5-3.htm (1 sur 4) [01/03/2005 14:49:02]

Site

Dans la fentre principale, il y a: Public Class Class1 End Class On peut crire le code, la description d'une classe avec ses proprits, ses mthodes, ses constructeurs...(Voir page prcdente) On peut ajouter une autre Classe (Menu Projet, ajouter une Classe), ou importer une Classe (Menu Projet, Ajouter un lment existant)

Il n'y a pas de procdure Sub Main. (c'est vident, un composant n'est jamais autonome; c'est l'application cliente qui a cette procdure). Une bibliothque de classe ne possde pas les composants que possde une application Windows, il n'y a pas d'interface utilisateur, pas de MessageBox, pas de gestion du curseur; c'est l'application cliente qui s'occupe de grer l'interface.

Il faut enfin enregistrer la bibliothque, la compiler.

Comment utiliser ce composant?


q

Si la bibliothque de Classe a t compile, on obtient une DLL: -Il faut la rfrencer: Ajouter la Dll au projet (Menu Projet, Ajouter une rfrence) -Importer l'espace de nom par Imports Espace de nom au dbut du module. -On peut ensuite utiliser la Classe dans l'application cliente.

On peut travailler en mme temps sur l'application cliente et le projet de la bibliothque de Classe en les chargeant tous les 2 dans une solution.

Contrle utilisateur:
Permet de crer des contrles spcifiques qui enrichiront la 'Boite outils' : (Pour les 'anciens' c'est comme les contrles OCX, sauf que c'est des contrles .NET et qu'il sont dans des fichiers .dll)

http://plasserre.developpez.com/v5-3.htm (2 sur 4) [01/03/2005 14:49:02]

Site

Exemple: on veut avoir une TextBox qui a une comportement diffrent de la TextBox habituelle. Pour crer une bibliothque de Contrle, il faut faire menu Fichier, Nouveau, Projet, Icne 'Bibliothque de contrle Windows' : On obtient une fentre qui ressemble un formulaire mais sans bord,on peut y ajouter un contrle (un TextBox par exemple comme ici)

Si on regarde le code correspondant, Vb a cre une Classe UserControl1 qui hrite de la classe Forms.UserControl Public Class UserControl1 Inherits System.Windows.Forms.UserControl End Class

Dans ce Usercontrol il y a les procdures prives des vnements des composants,( ici le TextBox1 et Private TextBox1_Changed par exemple si on double clique sur le TexBox1); bien sur, elles ne seront pas visibles ni accessibles par l'utilisateur du composant. L'interface du Usercontrol (ce que verra l'utilisateur du composant) est crer de toute pice comme dans un module de Class. Si on double-clique sur le fond, on voit quand mme apparatre: Private Sub UserControl1_Load(.. End Sub Mais on rajoutera des membres publiques qui seront accessibles l'utilisateur du composant. On utilise pour cela les 'Property', 'Sub' et 'variables' publiques pour crer une interface. Le code contenu dans ces procdures de l'interface ira 'piloter' le ou les contrles (comme le TextBox). Ce code modifiera (dans notre exemple) le comportement du TextBox initial.

http://plasserre.developpez.com/v5-3.htm (3 sur 4) [01/03/2005 14:49:02]

Site

http://plasserre.developpez.com/v5-3.htm (4 sur 4) [01/03/2005 14:49:02]

Site

Site

Cours : VB.net
Les interfaces.

5.4

Dfinition: Interface et implmentation:


Ce que je vois de l'objet, c'est son interface (le nom des proprits, le nom des mthodes..) exemple: le nom de la mthode Clear fait partie de l'interface d'une ListBox. Par contre le code qui effectue la mthode (celui qui efface physiquement toutes les lignes de la listeBox), ce code se nomme implmentation, lui n'est ni visible ni accessible (Quand on est du cot du dveloppeur qui utilise l'objet). Un objet a donc une interface et une implmentation. Quand maintenant on est du cot du crateur d'objet, dans un module de classe, si on a cre un objet et ses membres, sans le savoir, on cre en mme temps l'interface et l'implmentation. Mais il est possible de dissocier les 2. Quel intrt d'utiliser les interfaces? Vous pouvez dvelopper des implmentations avances pour vos interfaces sans endommager le code existant, ce qui limite les problmes de compatibilit. Vous pouvez galement ajouter de nouvelles fonctionnalits tout moment en dveloppant des interfaces et implmentations supplmentaires. Diffrences entre Classe et Interface: Tout comme les classes, les interfaces dfinissent un ensemble de proprits, mthodes et vnements. Cependant, contrairement aux classes, les interfaces n'assurent pas l'implmentation. Elles sont implmentes par les classes et dfinies en tant qu'entits distinctes des classes. Les interfaces ne peuvent pas tre modifies aprs publication. En effet, toute modification apporte une interface publie risque d'endommager le code existant. Il faut partir du principe qu'une interface est une sorte de contrat.(La partie qui publie une interface accepte de ne jamais modifier cette dernire et l'implmenteur accepte de l'implmenter exactement comme elle a t conue.)

http://plasserre.developpez.com/v5-4.htm (1 sur 5) [01/03/2005 14:49:04]

Site

Comme d'habitude: Il y a -les interfaces prsentes dans les classes du Framework (IList, ICollection...) -les interfaces que vous crez de toutes pices pour crer des objets. Visual Basic .NET vous permet de dfinir des interfaces l'aide de l'instruction Interface et de les implmenter avec le mot cl Implements.

Les interfaces prsentes dans les classes du Framework.


Pour 'uniformiser' le comportement des objets, les interfaces sont largement utilises dans VB. Prenons l'exemple des collections: Plutt que de rendre communs toutes les collections une mthodes( Clear par exemple), Vb donne la mme interface plusieurs types de Collections, ce qui uniformise la totalit des membres. Les collections reposent sur l'interface ICollection, IList ou IDictionary. Les interfaces IList et IDictionary sont toutes les deux drives de l'interface ICollection.

Le nom des interfaces commence toujours par 'I'. Dans les collections fondes sur l'interface IList ou directement sur l'interface ICollection (telles que Array, ArrayList, Queue ou Stack), chaque lment contient une valeur unique. Dans les collections reposant sur l'interface IDictionary (telles que Hashtable ou SortedList), chaque lment contient la fois une cl et une valeur. Dtaillons l'interface Ilist: L'interface Ilist permet de prsenter une collection d'objets accessibles sparment par index. Les mthodes de l'interface IList sont rpertories ici. Mthodes publiques Add Clear Contains Ajoute un lment. Supprime tous les lments. Dtermine si la liste contient une valeur spcifique.

http://plasserre.developpez.com/v5-4.htm (2 sur 5) [01/03/2005 14:49:04]

Site

IndexOf Insert Remove RemoveAt

Dtermine l'index d'un lment spcifique. Insre un lment dans la liste la position spcifie. Supprime la premire occurrence d'un objet spcifique. Supprime l'lment correspondant l'index spcifi.

Proprits publiques IsFixedSide IsReadOnly Item Obtient une valeur indiquant si IList est de taille fixe. Obtient une valeur indiquant si IList est en lecture seule. Obtient ou dfinit l'lment correspondant l'index spcifi.

Les tableaux (Array) utilisent l'interface Ilist, mais aussi les collections (ArrayList) , des contrles utilisent aussi cette interface (les ListBox, ComboBox), mais aussi les DataView... Les ListBox possdent donc l'interface Ilist , on s'en doutait car on utilisait les mthodes Clear, Insert, Item... Il y a plein d'autres interface.

Les interfaces cres par vous:


De mme que vous savez crer des classes, il est possible de crer de toutes pices des interfaces. Pour crer une Interface

1. Dans un nouveau Module, dfinissez votre Interface en commenant


par le mot cl Interface et le nom de l'interface et se terminant par l'instruction End Interface. Par exemple, le code suivant dfinit une Interface appele Cryptage :

Interface Cryptage End Interface 2. Ajoutez des instructions dfinissant les proprits, mthodes et
vnements pris en charge par votre Interface. Par exemple, le code suivant dfinit deux mthodes, une proprit et un vnement :

Interface Cryptage Function Encrypt(ByVal estring As String) As String Function Decrypt(ByVal dstring As String) As String Property CledeCodage() As Integer Event FinDecoding(ByVal RetVal As Integer) End Interface L'interface est cre.

http://plasserre.developpez.com/v5-4.htm (3 sur 5) [01/03/2005 14:49:04]

Site

Pour implmenter une Interface

1. Si l'interface que vous implmentez ne fait pas partie de votre


projet, ajoutez une rfrence l'assembly qui contient l'interface. 2. Crez une nouvelle classe qui implmente votre Interface et ajoutez le mot cl Implements dans la ligne la suite du nom de la classe. Par exemple, pour implmenter l'interface Cryptage , vous pouvez nommer la classe d'implmentation MonEncrypte, comme dans le code suivant :

Class MonEncrypte Implements Cryptage End Class 3. Ajoutez des procdures pour implmenter les proprits, mthodes
et vnements de la classe :

Class MonEncrypte Implements Cryptage Event FinDecoding(ByVal RetVal As Integer) _ Implements Cryptage.FinDecoding Function Encrypt(ByVal estring As String) _ As String Implements Cryptage.Encrypt ' Placer le code de cryptage ici. End Function Function Decrypt(ByVal dstring As String) _ As String Implements Cryptage.Decrypt ' Placer le code de dcryptage ici. End Function Property CledeCodage() As Integer _ Implements Cryptage.CledeCodage Get 'Placer ici le code qui retourne la valeur de la proprit. End Get Set 'Placer ici le code qui donne une valeur la proprit. End Set End Property End Class
Noter que : Pour chaque membre implment dans ce code, une instruction Implements indique le nom de l'interface et du membre implment. Tous les membres de l'interface doivent tre implments.

Enfin utiliser la classe MonEncrypte dans votre programme.

http://plasserre.developpez.com/v5-4.htm (4 sur 5) [01/03/2005 14:49:04]

Site

Dim C As New MonEncrypte() C.CledeCodage=3 ChaineEncrypte= C.Encrypt( ChaineAEncrypter) ou Il faut crer une instance de la classe qui implmente MonEncrypte, cre une variable du type de l'interface, qui associe un gestionnaire d'vnements l'vnement dclench par l'instance, qui dfinit une proprit et excute une mthode via l'interface. Dim C As New MonEncrypte() 'Classe Dim I As New Cryptage()'Variable d'interface I=C I.CledeCodage=3 ChaineEncrypte= I.Encrypt( ChaineAEncrypter) Les 2 versions marchent-elles? S'il y a un RaiseEvent dans une procdure qui dclenche un vnement de la classe il faut aussi ajouter une ligne AddHandles.

Il peut y avoir hritage de plusieurs interface:

Interface IComboBox Inherits ITextBox, IListBox End Interface

Public Class EditBox Inherits Control Implements ITextBox Implements IListBox Public Sub Paint()Implements ITextBox.Paint ... End Sub Public Sub Bind(b As string) Implements IListBox.Clear End Sub End Class

http://plasserre.developpez.com/v5-4.htm (5 sur 5) [01/03/2005 14:49:04]

Site

Site

Cours : VB.net

Approche 'fonctionnelle', 5.10 approche 'Objet'.


On a vu qu'on pouvait crer des programmes avec des Sub et des Functions mais aussi avec des objets. Dtaillons.

Approche fonctionnelle:
Elle dcoupe le problme en fonctions: Chaque fonction effectue une tache prcise. Avec l'aide de variables et de structures. Il y a donc Une logique de classification de donnes en structures. variables ,

Une logique de traitement: les Fonctions et Sub contiennent le code.

Exemple: Calcul du salaire d'un employ. (Nombre d'heure * Taux horaire)

Il faut crire une Fonction CalculSalaire: Public Function CalculSalaire(Taux As Single, Heure As Single) As Single Return Taux*Heure End Function

Pour calculer un salaire il faut appeler la fonction avec les bons paramtres. Dim TauxHoraire As Single Dim HeuresTravailles As Single
http://plasserre.developpez.com/v5-10.htm (1 sur 4) [01/03/2005 14:49:06]

Site

Dim Salaire As Single TauxHoraire=30 HeureTravailles=70 Salaire=CalculSalaire(TauxHoraire,HeuresTravailles)

Pour structurer le programme, on utilise, en plus des modules de formulaire, des 'Modules Standards' contenant les divers fonctions.

Le point d'entre du programme est:

Module main1 Sub main() .... End Sub End Module

Approche Objet:
Elle ncessite de crer une Classe Avec l'aide de la classe on peut dclarer des objets. Chaque Objet des proprits, des mthodes. Les donnes sont dans les proprits des l'objets. est implment dans les mthodes de l'objet.

Le traitement

Exemple: Calcul du salaire d'un employ. (Nombre d'heure * Taux horaire)

Il faut crire dans un module de Class une Class Employ: Public Class Employ Private T As Single 'proprits prives la classe pour stocker les heures et taux horaires Private H As Single Public Property Taux As Single 'proprit Taux Get Return T End Get Set(By Val Value) T=value End Set End Property Public Property Heure As Single 'proprit heure Get Return H End Get
http://plasserre.developpez.com/v5-10.htm (2 sur 4) [01/03/2005 14:49:06]

Site

Set(By Val Value) H=value End Set End Property

Public Property Salaire As Single 'mthode Salaire Get Return T*H End Get End Property End Class

Pour calculer un salaire il faut crer un objet employ,donner les bonnes valeurs aux proprits et appeler la mthode salaire. Dim UnEmploy As new Employ UnEmploy.Taux=30 UnEmploy.Heure=70 Dim Salaire As Single =UnEmploy.Salaire

On voit donc qu'il faut crer des modules de Classe pour y mettre les nouveaux objets. On vitera les modules standards qui ne sont pas dans l'esprit 'Objet'. Les routines 'public', les fonctions des modules deviennent des mthodes 'statiques' d'objet.

Le point d'entre du programme pourrait tre une Classe statique:

Public Class main2 Public Shared Sub main() ... End Sub End Class

Que choisir?
La mthode fonctionnelle est plus intuitive, on a l'impression d'tre plus proche de la ralit 'physique', le code est probablement plus rapide. L'emploi d'objet permet une abstraction plus importante, une puissance ingale. Consquence pratique: On peut par exemple crer une classe qui hrite des proprits d'une autre classe: Dans notre exemple en programmation Objet, on crera une Class 'Patron'
http://plasserre.developpez.com/v5-10.htm (3 sur 4) [01/03/2005 14:49:06]

Site

qui hritera de la classe 'Employ', mais dont la mthode Salaire sera diffrente, en programmation fonctionnelle il faudra crire une nouvelle fonction SalairePatron.

http://plasserre.developpez.com/v5-10.htm (4 sur 4) [01/03/2005 14:49:06]

Site

Site

Cours : VB.net

Les 6.1 bases de donnes.


Comment lire et crire des informations complexes et structures?

Gnralits:
Pour travailler avec du texte, des octets, des donnes trs simple (sans ncessit d'index, de classement..), on utilise les fichiers squentiels, alatoires, binaires (chapitre 4-6). Mais ds que les informations sont plus structures, il faut utiliser les bases de donnes (Data Base en anglais). Une base de donnes peut tre:
q

locale: utilisable sur un ordinateur par un utilisateur. rpartie, c'est--dire que la base est stocke sur des machines distantes et accessibles par rseau.

Plusieurs utilisateurs peuvent accds la base simultanment.

Exemple de type de base de donnes:

http://plasserre.developpez.com/v6-1.htm (1 sur 11) [01/03/2005 14:49:09]

Site

Dbase Format trs utilis, qui date maintenant un peu, les fichiers contenant ses bases ont l'extension .dbf Paradox FileMaker FoxPro Interbase Access Format trs rpandu, bases ont l'extension .mdb les fichiers contenant ses

SQLServeur les fichiers contenant ses bases ont l'extension .dbo SyBase MySql Oracle.. Pour pouvoir contrler les donnes, l'accs ces donnes et les utilisateurs utilisant une base de donnes, un systme de gestion est ncessaire. La gestion de la base de donnes se fait grce un systme appel SGBD (systme de gestion de bases de donnes), si la base de donnes est relationnelle (Existence de relation entre les tables) on parle de SGBDR (systme de gestion de bases de donnes relationnelles)

Un SGBD est un logiciel qui joue le rle d'interface entre les utilisateurs et la base de donnes. Un SGBD permet de dcrire, manipuler et interroger les donnes d'une 'Base de Donnes'.

Tables:
Dans une base de donnes, il y a des tables: Une table sert stocker physiquement des donnes sous forme d'un tableau comportant des lignes (rows) et des colonnes (columns).

http://plasserre.developpez.com/v6-1.htm (2 sur 11) [01/03/2005 14:49:09]

Site

Exemple: Une base de donnes Access nomme Cabinet.mdb contient les patients d'un cabinet, leurs consultations, les ordonnances, les mdicaments.. Dans cette base il y a plusieurs tables: une table patient, une table consultation...

Examinons la table patient: Sur chaque ligne, il y a un patient,. Chaque colonne reprsente un type de donnes (premire colonne= civilit, seconde=nom, troisime=prnom, quatrime= numro interne propre chaque patient. ) L'ancienne terminologie parlait d'enregistrements (lignes) et de champs (colonnes)

Champs Civilit Champ Nom

Champ Prnom

Champ Numro Interne 1 2 3

M. Mme M.

Durand Dupont Thomas

Luc Josette Guy

Ici la seconde ligne (le 2eme enregistrement) contient la civilit, le nom, le prnom, le numro du patient Dupont Josette. Chaque colonne un type bien dfinie: dans notre cas la premire colonne contient du texte, ainsi que la seconde, la troisime; la quatrime colonne contient un numrique long par exemple.

Examinons la table consultation: Sur chaque ligne, il y a une consultation,. Chaque colonne reprsente un type de donnes (premire colonne= numro correspondant au patient, seconde=date, troisime=texte de la consultation, quatrime= Courrier. )

Champs Numro Champ Date Interne

Champ Texte

Champ Courrier

http://plasserre.developpez.com/v6-1.htm (3 sur 11) [01/03/2005 14:49:09]

Site

1 2 1

02/12/2003 02/02/2004 05/04/2004

Angine Hta Bronchite

Il n'est pas question pour chaque consultation d'enregistrer de nouveau le nom et le prnom du patient, cela enregistrerait 2 fois la mme information puisque le nom et le prnom du patient sont dj dans la table 'patient'. On va donc, pour viter les redondances, utiliser un numro interne: chaque patient a un numro unique (4me champ de la table 'nom'); il suffit de noter dans chaque consultation le numro du patient. Ensuite, si je consulte le patient Durand Luc, sachant que son numro interne est '1', il suffit de rechercher dans la table consultation les consultations dont le premier champ est 1: Durand Luc 2 consultations.

Type de colonne:
Il existe des types de colonne (de champs) alphanumriques
q

de longueur fixe (pour le champ 'nom' je prvois 30 caractres par exemple). de longueur variable (champ mmo dans la base Dbase par exemple)

Il existe aussi
q q q

des champs numriques, des champs dates et dans certains base de donnes des champs boolens, image...

Cl primaire
Quand il est ncessaire de diffrencier chaque enregistrement de manire unique, il faut dfinir un champ comme cl primaire. Ce champ doit tre unique pour chaque enregistrement (il ne doit pas y avoir de doublons: 2 enregistrements ne peuvent pas avoir la mme cl primaire), et la valeur de la cl primaire ne peut pas tre gale null.

http://plasserre.developpez.com/v6-1.htm (4 sur 11) [01/03/2005 14:49:09]

Site

Dans notre exemple de la table patient, on ne peut pas utiliser le champ 'nom' comme cl primaire car plusieurs patients peuvent avoir le mme nom, il est judicieux de choisir le champ 'numro interne' comme cl primaire car chaque patient (donc chaque enregistrement) un numro interne unique.

Quand on enregistre une nouvelle fiche patient, il faut donc donner un nouveau 'numro interne' qui n'a jamais t utilis, en pratique:
q

On gre soi mme les numros: numro interne (on cherche la rcupre le numro ou bien on t enregistr quelque part), le nouveau numro.

on prend le dernier dernire fiche dont on lit ce numro qui a on ajoute 1 pour avoir

On utilise un champ qui s'incrment automatiquement a chaque fois que l'on cre une enregistrement (NumeroAuto dans Access)

Index
Un index permet d'optimiser les recherches dans une table, de les rendre beaucoup plus rapide. Expliquons: Si j'ai une table contenant les noms des mdecins utilisateurs et que je veux chercher un nom, comme il y a au maximum 5 6 mdecins dans un cabinet, pour rechercher un nom, il suffit de lire successivement chaque enregistrement et de voir si c'est celui recherch. C'est suffisamment rapide. Par contre si je recherche dans la table patient un patient, comme il y a 4000 8000 enregistrements, je ne peux pas les lire un un , c'est trop long, aussi je cre un index: c'est comme l'index d'un livre, le nom me donne directement l'endroit ou se trouve l'enregistrement correspondant. On peut combiner plusieurs champs pour en faire la base d'un index. Pour ma table 'patient', je peux crer un index nomm IndexPatient qui sera index sur Nom +Prenom. Il peut y a voir plusieurs index sur une mme table.

Les index acclrent les recherches mais s'il y en a

http://plasserre.developpez.com/v6-1.htm (5 sur 11) [01/03/2005 14:49:09]

Site

trop, cela alourdit le fonctionnement; on ne peut pas tout indexer!!

Relations entre les tables: diffrents types de relations.


On a dj vu que 2 tables peuvent tre lies et avoir un champ commun prsent dans les 2 tables. Sur ce champ commun, il peut exister plusieurs types de relation: Relation 1 N Relation 1 1 Relation N M Voyons cela en dtail:

1 N

(relation un plusieurs)

Dans notre exemple la table 'patient' et la table 'consultation' ont chacune un champ numro interne. Ce qui permet de lier l'enregistrement du patient de numro interne X toutes les consultations pour ce patient (elles ont dans leurs champs 'numro interne' la valeur X. Comme pour UN patient il peut y avoir N consultations, on parle de relation 1 N. Un enregistrement unique est li plusieurs enregistrements de l'autre table par un champ prsent dans les 2 tables. On remarque que le champ du cot patient est une cl primaire.

Table 'patients' Champ Numro Interne M. Mme M. Durand Dupont Thomas Luc Josette Guy 1 2 3

Table 'consultations'

http://plasserre.developpez.com/v6-1.htm (6 sur 11) [01/03/2005 14:49:09]

Site

Champ Numro Interne 1 2 1 02/12/2003 02/02/2004 05/04/2004 Angine Hta Bronchite

Le patient Durand Luc a 2 consultations : le 02/12/2003 et le 05/04/2004 (Le numro interne de ce patient est 1, mais l'utilisateur final n'a pas le savoir ni le grer: la relation utilisant le numro interne est transparente pour l'utilisateur final)

Il existe aussi les relations:

1 1
Un enregistrement unique est li un autre enregistrement unique par un champ prsent dans les 2 tables. On peut imaginer dans notre exemple, crer une table Antcdents contenant aussi un champ numro interne; pour chaque enregistrement de la table patient, il y a un enregistrement unique dans la table Antcdents, de mme numro interne contenant les antcdents du patient.

Table 'patient' M. Mme M.

Durand Dupont Thomas

Luc Josette Guy

1 2 3

Table 'antcdents' Champ Numro interne. 1 02/01/2003 2 02/02/2004 3 05/05/2004 appendicite Hta Cancer du colon

Enfin existe les relations:

N M
Relation plusieurs plusieurs. Plusieurs enregistrements de la premire table peuvent tre lis plusieurs de la seconde table et vice versa.

http://plasserre.developpez.com/v6-1.htm (7 sur 11) [01/03/2005 14:49:09]

Site

Exemple: J'ai une table 'ordonnances' qui peut contenir plusieurs mdicaments, et une table 'mdicaments' dont les mdicaments peuvent tre utilis dans plusieurs ordonnances diffrentes. Il faut dans ce cas avoir la table 'ordonnances' avec une cl primaire sur un numro d'ordonnance (numro d'ordonnance unique s'incrmentant chaque nouvelle ordonnance), une table 'mdicaments' avec une cl primaire sur le numro unique du mdicament, et crer une troisime table grant la relation ordonnance-mdicament.

Table 'Ordonnances' 'Numro 'Numro Interne Champ' date' ordonnance' patient' 1 2 3 2 3 2 02/05/2002 02/04/2003 06/05/2004

Table 'Mdicaments' 'Numro 'Libelle mdicament' mdicament' 1 2 3 Amoxicilline Omeprazone Allopurinol

Code CIP'

65897 66589 78456

Table supplmentaire 'Contenu ordonnance' 'Numro ordonnance' 'Numro mdicament' 1 1 2 1 2 2

Ici le patient de numro interne 2 (Dupont Josette) a une ordonnance visible dans la table 'Ordonnances'(numro interne: 2; numro de l'ordonnance: 1); si on cherche dans la table 'Contenu ordonnance' (Index cre sur le numro d'ordonnance) on retrouve 2 enregistrements (ayant un numro d'ordonnance 1), on constate que l'ordonnance contient les mdicaments 1 et 2 qui correspondent (table

http://plasserre.developpez.com/v6-1.htm (8 sur 11) [01/03/2005 14:49:09]

Site

'mdicaments') de l'amoxicilline et de l'omprazone. On remarque qu'une ordonnance peut avoir autant de mdicaments que l'on veut.

Relation N M avec

N fixe et petit

Dernier cas non dcrit dans les livres: J'explique: si chaque ordonnance au maximum 3 mdicaments ( que la scu serait contente si c'tait vrai!!), il est possible de crer une table 'ordonnances' contenant 3 champs mdicaments. Dans ce cas on se passe de la 3eme table.

Table 'Ordonnances' 'Numro 'Numro Interne Champ' ordonnance' patient' date' 1 2 3 2 3 2 02/05/2002 1 02/04/2003 06/05/2004 2

3 champs mdicaments

Table 'Mdicaments' 'Numro 'Libelle mdicament' mdicament' 1 2 3 Amoxicilline Omeprazone Allopurinol

Code CIP'

65897 66589 78456

Contraintes
Un champ peut avoir certaines contraintes:
q

On peut interdire la valeur Null: Cela empche d'enregistrer un champ vide. On peut aussi donner une valeur par dfaut. On peut empcher les doublons. On peut exiger l'intgrit rfrentielle: La valeur d'un champ doit exister dans le champ d'une autre

q q

http://plasserre.developpez.com/v6-1.htm (9 sur 11) [01/03/2005 14:49:09]

Site

table.(On ne peut pas enregistrer une consultation pour le patient de numro interne 2000 s'il n'existe pas de fiche patient ayant le numro 2000)
q

On peut exiger des rgles de validation pour un champ: interdire les valeurs ngatives par exemple.

Serveur de fichier, Client serveur.


Si plusieurs utilisateurs sont connects une base Access travers un rseau, chaque utilisateur a sur son poste un 'moteur' Access, qui rcupre l'ensemble des donnes utiliser et qui les traite en local. On parle de serveur de fichier. Le moteur d'accs est prsent sur chaque poste.

Si plusieurs utilisateurs sont connects une base SQLServer: la base est sur le serveur avec le logiciel SQLServeur. Un logiciel utilisateur(le client) envoie au serveur une requte. Le logiciel SQLServer traite la requte sur le serveur et retourne au logiciel client uniquement le rsultat de la requte. On parle d'architecture Client-serveur. Le moteur d'accs est prsent uniquement sur le serveur.

Si on cherche un enregistrement parmi 60 000 enregistrements, en serveur de fichiers, les 60 000 enregistrements sont envoyes par le rseau vers le moteur Access de l'utilisateur ; le moteur les traite pour en sortir un. En client serveur, le logiciel utilisateur envoie une requte au serveur, le logiciel serveur cherche sur le serveur dans la base l'enregistrement, il le trouve et envoie travers le rseau vers le logiciel client uniquement un enregistrement.

Oprations sur les enregistrements


De manire gnrale, on peut: Ouvrir une base de donnes (Open) Ajouter un enregistrement (Add)

http://plasserre.developpez.com/v6-1.htm (10 sur 11) [01/03/2005 14:49:09]

Site

Effacer un enregistrement

(Delete)

Modifier un enregistrement (Update) Chercher un ou des enregistrements. Fermer la base. (Close)

Avant:
Il y a bien longtemps, on choisissait un index, on cherchait un enregistrement (avec Seek), on le lisait, le modifiait, on avanait (MoveNext) ou on reculait (MovePrevious) dans la base, mais c'est de l'histoire ancienne!!

Avec ADO.NET: Maintenant quelle que soit la base de donnes, on utilise un langage unique: le 'SQL' pour faire une requte sur une base de donne (extraction de certains enregistrements ou de certains champs en fonction de critres), le rsultat (un ensemble d'enregistrements ou de champs) se retrouve dans un DataSet.

http://plasserre.developpez.com/v6-1.htm (11 sur 11) [01/03/2005 14:49:09]

Site

Site

Cours : VB.net
ADO.NET

6.2

Comment travailler sur les Base de donnes en VB.NET? Avec ADO.NET

Gnralits:
Pour avoir accs partir de VB.NET aux bases de donnes il faut utiliser ADO.NET. ADO veut dire Activex Database Objet . C'est la couche d'accs aux bases de donnes, le SGBD (Systme de Gestion de Base de Donnes) de VB. ADO.NET est ".NET" donc manag et gr par le CLR. Il est indpendant de la base de donne: alors que initialement chaque type de gestionnaire de base de donnes avait ses instructions, sa manire de fonctionner, ADO.NET un langage unique pour ouvrir, interroger, modifier une base de donnes quelle que soit la base de donnes. Le langage de requte est le SQL.

Les Managed Providers


Pour avoir accs aux donnes il faut charger les DRIVERS

http://plasserre.developpez.com/v6-2.htm (1 sur 4) [01/03/2005 14:49:11]

Site

(ou providers). Comme d'habitude, il faut:


q q

Charger les rfrences des drivers (les Dll) Importer les espaces de nom.

Ainsi on a accs aux objets.

Voyons cela:
q

OLE DB Managed Provider est fourni; aprs avoir import le NameSpace System.Data.OLEDB, on peut travailler sur des base Access par exemple. SQL Server Managed Provider est fourni; aprs avoir import le NameSpace System.Data.SqlClient, on peut travailler sur des base SqlServeur. Un composant ODBC et un composant ORACLE sont disponible sur le site MSDN. Pour travailler sur une base MySQL lisez le trs bon didacticiel MySQLDotNet (sur developpez.com bien sur);il utilise le Managed Provider ByteFX

Les Objets ADO.NET


Il faut disposer d'un objet Connexion pour avoir accs la base de donnes, on met dans la proprit ConnectionString les paramtres de la base de donnes. Avec la mthodes Open et Close, on ouvre et on ferme la base. on peut ensuite travailler de 3 manires:
q

Avec un objet DataReader on extrait les donnes en lecture seule: c'est rapide; on peut lire uniquement les donnes et aller l'enregistrement suivant. Il travaille en mode connect. Pour grer un DataReader on a besoin d'un objet Command. Avec un objet DataSet on manipule les donnes: une requte SQL charge le DataSet avec des enregistrements ou des champs, on travaille sur les lignes et colonnes du DataSet en local, en mode dconnect(une fois que le DataSet est charg, la connexion la base de donnes est libre). Pour

http://plasserre.developpez.com/v6-2.htm (2 sur 4) [01/03/2005 14:49:11]

Site

alimenter un DataSet on a besoin d'un objet DataAdapter qui fait l'intermdiaire entre la BD et le DataSet. Avec un objet Command on peut manipuler directement la BD (Update, Insert, Delete)

Rsumons les diffrents objets ncessaires pour travailler sur une BD:

Noter bien le sens des flches: le DataReader est en lecture seule, le DataSet peut lire et crire, l'objet Command peut modifier la BD. Ce schma souligne aussi les objets intermdiaire ncessaire: un objet connexion dans tous les cas, un objet Command pour le DataReader, un objet DataAdapter pour le DataSet. Enfin certains contrles comme le DataGrid par exemple peuvent afficher des donnes partir d'un DatSet. On peut aussi crer une DataTable partir d'un DataSet et alimenter une listbox ou une comboBox.

DataSet
Une requte SQL charge le DataSet en local avec des enregistrements ou des champs, on travaille sur les lignes et colonnes du DataSet en local, en mode dconnect(une fois que le DataSet est charg, la connexion la base de donnes est libre).

http://plasserre.developpez.com/v6-2.htm (3 sur 4) [01/03/2005 14:49:11]

Site

Le DataSet a la structure d'une base de donnes: Exemple : Avec ADO.NET je lance une requte SQL demandant toutes les fiches de la table 'nom' dont le champ 'prnom' est 'Philippe', je rcupre un DataSet local contenant tous les fiches (Le DataColumn "Prnom" ne contient que des 'Philippe'). Je peux modifier en local le DataSet, (modifier une date de naissance par exemple) et mettre jour automatiquement la base de donnes distante.

http://plasserre.developpez.com/v6-2.htm (4 sur 4) [01/03/2005 14:49:11]

Site

Site

Cours : VB.net
SQL.

6.3

Comment adresser une requte vers une Base de donnes de ADO.NET? Avec SQL

Gnralits:
SQL veut dire Structured Query Language d'interrogation structure : Langage

SQL grce au couplage avec un SGBD relationnelle permet un traitement interactif des requtes.

SQL est le langage unique qui permet de dcrire, manipuler, contrler l'accs et interroger les bases de donnes relationnelles. C'est un langage dclaratif, qui est rgi par une norme (ANSI/ISO) qui assure la portabilit du langage sur diffrentes plates-formes aussi bien matrielles que logicielles. Une commande SQL crite dans un environnement Windows sous ACCESS peut, souvent sans modification, tre utilise directement dans un environnement ORACLE sous Unix... SQL est utilis dans ADO.NET pour manipuler toutes les bases de donnes.

Les commandes SQL


Catgorie Commandes SQL

http://plasserre.developpez.com/v6-3.htm (1 sur 8) [01/03/2005 14:49:14]

Site

CREATE Manipulation ALTER des tables DROP

Cration de tables Modification de tables Suppression de tables Insertion de lignes dans une table Mise jour de lignes dans une table Suppression de lignes dans une table Attribution de droits d'accs Suppression de droits d'accs Prise en compte des mises jour Suppression des mises jour

INSERT Manipulation UPDATE des donnes DELETE

GRANT REVOKE COMMIT ROLLBACK

Contrle des donnes

Interrogation SELECT des donnes

Interrogations diverses

SELECT
Permet d'extraire ,de slectionner des donnes. Ces donnes extraites partir d'une base de donnes grce l'instruction SQL vont se retrouver dans un DataSet. Syntaxe simplifie: SELECT champ FROM table WHERE condition Dans la table 'table' slectionner les enregistrements vrifiant la condition 'condition' et en afficher les champs 'champs' Exemple

SELECT

Prcise les colonnes qui vont apparatre dans la rponse

http://plasserre.developpez.com/v6-3.htm (2 sur 8) [01/03/2005 14:49:14]

Site

FROM

Prcise la (ou les) table intervenant dans l'interrogation Prcise les conditions appliquer sur les enregistrements. On peut utiliser : - Des comparateurs : =, >, <, >=, <=,<> - Des oprateurs logiques : AND, OR, NOT - Les prdicats : IN, LIKE, NULL, ALL, SOME, ANY, EXISTS... Prcise la (ou les) colonne de regroupement Prcise la (ou les) conditions associes un regroupement Prcise l'ordre dans lequel vont apparatre les lignes de la rponse : - ASC : En ordre ascendant (par dfaut) - DESC: En ordre descendant

WHERE

GROUP BY HAVING

ORDER BY

Exemple:

Soit la table patient:

Champs 'Civilit' M. Mme M.

Champ Champ Champ Datenais 'Nom' 'Prnom' Num Int Durand Luc 1 Dupont Josette 2 Thomas Guy 3 12/02/1952 M 06/04/1936 F 08/02/1980 M

Sexe

SELECT

Nom FROM Patient

Cela signifie: dans la table Patient extraire les champs 'nom' On obtient:

Durand Dupont Thomas

http://plasserre.developpez.com/v6-3.htm (3 sur 8) [01/03/2005 14:49:14]

Site

SELECT

Nom FROM Patient WHERE

Prenom='Luc'

WHERE ajoute un critre de slection. Cela signifie: dans la table Patient extraire le champ Nom de tous les enregistrements dont le prnom est "Luc" . Dans l'exemple on obtient :

Durand

SELECT

Nom, Prenom

FROM Patient WHERE

Sexe='F'

Cela signifie: dans la table Patient extraire le champ Nom et prnom de tous les enregistrements dont le champ sexe est "F"( F comme fminin) . Dans l'exemple on obtient :

Dupont

Josette

SELECT

FROM Patient WHERE

Datenais>=#01/01/1950#

Cela signifie: dans la table Patient extraire tous les champs de tous les enregistrements dont le champ date de naissance est suprieur ou gal 01/01/1950 . Dans l'exemple on obtient

M. M.

Durand Luc Thomas Guy

1 3

12/02/1952 M 08/02/1980 M

On remarque que * signifie : extraire tous les champs. Pour utiliser les dates , il faut les entourer de "#". Les dates sont au format mm/jj/aaaa En ADO.NET: Notez bien que le rsultat de la requte, les 2 enregistrements ci-dessus, se retrouvent dans un Dataset qui comporte des lignes et des colonnes.

SELECT * FROM Patient WHERE AND Datenais<= #01/01/1980#

Datenais>= #01/01/1950#

Cela signifie: dans la table Patient extraire tous les

http://plasserre.developpez.com/v6-3.htm (4 sur 8) [01/03/2005 14:49:14]

Site

champs de tous les enregistrements dont le champ date de naissance est suprieur ou gal 01/01/1950 et infrieur ou gal 01/01/1980 . On remarque que on peut utiliser avec Where, les oprandes AND OR NOT.

Il est bien sur possible de combiner des conditions sur des champs diffrents: Sexe='M' AND Prenom='Luc"

SELECT * FROM Patient WHERE #01/01/1980#

BETWEEN #01/01/1950# AND

Mme signification que le prcdent mais en utilisant BETWEN AND qui est plus performant.

SELECT Nom FROM Patient WHERE 'Pierre', 'Paul')

Prenom IN ('Luc' ,

Cela signifie qu'il faut extraire les enregistrements dont le prnom est Luc, Pierre ou Paul .

SELECT

Nom FROM Patient WHERE

Prenom LIKE

'D%'

Cela signifie qu'il faut extraire les enregistrements dont le prnom commence par un 'D'. LIKE recherche des chanes de caractres avec l'aide de caractres gnriques: % reprsente vide. _ reprsente une chane de caractres mme un caractre.

On peut spcifier une srie de caractres en les mettant entre "" Exemple : LIKE 'D%' LIKE '%D%' LIKE '[DF]%' LIKE '___' commence par D contient D

commence par D ou F contient 3 caractres

http://plasserre.developpez.com/v6-3.htm (5 sur 8) [01/03/2005 14:49:14]

Site

SELECT

Nom FROM Patient WHERE

SEXE IS NULL

Cela signifie qu'il faut extraire les enregistrements dont le sexe n'a pas t enregistr.

SELECT DISTINCT Nom FROM Patient WHERE DISTINCT permet d'viter les doublons

SEXE IS NULL

Si dans les Noms extraits il y a 2 fois le mme (2 membres d'une mme famille) , il n'en est gard qu'un.

TRI des enregistrements:


ORDER BY sert trier les enregistrements. Il est plac la fin. DESC sert trier par ordre dcroissant.

SELECT Nom, Prenom , Sexe, DateNais Sexe='F' ORDER BY DateNais

FROM Patient WHERE

Trie les enregistrements de sexe 'F' par date de naissance

SELECT Nom, Prenom, DatNais, NumInt FROM Patient WHERE Sexe='F' ORDER BY DateNais DESC, NumInt Trie les enregistrements de sexe 'F' par date de naissance mais dcroissante et pour une mme date de naissance par numro interne croissant.

Statistiques:
SELECT COUNT(*) AS NombrePatient FROM Patient

Compte le nombre total d'enregistrement dans la table Patient et met le rsultat dans le champ NombrePatient On peut aussi utiliser: MIN MAX retourner la plus petite valeur. retourner la plus grande valeur.

SUM retourner la somme. AVG retourner la moyenne. VAR retourner la variance


http://plasserre.developpez.com/v6-3.htm (6 sur 8) [01/03/2005 14:49:14]

Site

STDEV retourner l'cart type.

SELECT Prenom ,COUNT(*) AS GROUP BY Prenom

NombrePrenom

FROM Patient

Extrait la liste des prnom avec le nombre de fois que le prnom est utilis. GROUP BY regroupe les enregistrements par valeur.

SELECT Prenom ,COUNT(*) AS NombrePrenom GROUP BY Prenom HAVING CONT(*)>3

FROM Patient

Extrait la liste des prnoms avec le nombre de fois que le prnom est utilis S'il est utilis plus de 3 fois.. HAVING rajoute un critre au regroupement.

Extraction de donnes sur plusieurs tables:


Parfois on a besoin d'extraire des champs de plusieurs tables diffrentes, mais ayant une relation (un champ commun); pour cela on utilise une jointure. Pour chaque enregistrement de la premire table, on affiche en regard les enregistrements de la 2eme table qui ont la mme valeur de jointure. Exemple: Soit la table patient:

Champs 'Civilit' M. Mme M.

Champ Champ Numro Datenais 'Nom' 'Prnom' Ville Durand Luc 1 Dupont Josette 2 Thomas Guy 3 12/02/1952 M 06/04/1936 F 08/02/1980 M

Sexe

Soit la table Ville: Nom ville Numro ville Paris Lyon Marseille 1 2 3

http://plasserre.developpez.com/v6-3.htm (7 sur 8) [01/03/2005 14:49:14]

Site

Comment rcuprer nom et ville (en clair, pas son numro) SELECT Patient.Nom, Ville.NomVille From Patient INNER JOIN Ville ON Patient.NumroVille= Ville.NumroVille On obtient: Durand Paris Dupont Lyon Thomas Paris

http://plasserre.developpez.com/v6-3.htm (8 sur 8) [01/03/2005 14:49:14]

Site

Site

Cours : VB.net

Travailler 6.4 avec un DataReader.


Comment lire rapidement des enregistrements? Avec un DataReader.

Gnralits:
Un objet DataReader fournit des donnes en lecture seule en un temps record. La seule possibilit est de se dplacer en avant. En contrepartie de sa rapidit il monopolise la connexion. Il faut ensuite l'objet avec la crer un objet Connexion puis un objet Command, on excute la proprit ExecuteReader pour crer DataReader; enfin on parcourt les enregistrements mthode Read.

Exemple avec une base access. Il existe une base Access nomme 'consultation.mdb', elle contient une table 'QUESTIONS', dans cette table existe un champ 'NOM', je veux rcuprer tous les noms et les afficher rapidement dans une ListBox.

http://plasserre.developpez.com/v6-4.htm (1 sur 6) [01/03/2005 14:49:16]

Site

Il faut Imports Imports Imports Imports

importer les NameSpaces ncessaires. System System.Data System.Data.OleDb Microsoft.VisualBasic

Il faut crer un objet connexion: Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _ "C:\consultation.mdb") Il faut donner les paramtres Provider= et Data source= Dans le cas d'une base Access le provider (le moteur utiliser est le moteur OLEDB Jet 4.

Il faut crer un objet Command: Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()

Il faut donner dans la proprit CommandText la requte SQL permettant d'extraire ce que l'on dsire. Mycommand.CommandText = "SELECT NOM FROM QUESTIONS" Ici dans la table QUESTIONS, on extrait le champ NOM Il faut ouvrir la connexion: MyConnexion.Open()

Il faut crer un objet DataReader: Dim myReader As OleDbDataReader = Mycommand.ExecuteReader()

On cre une boucle permettant de lire les enregistrements les uns aprs les autres, on rcupre le champ (0) qui est une String, on la met dans la ListBox Do While myReader.Read() ListBox1.Items.Add(myReader.GetString(0)) Loop Remarquons que le champ rcupr est rcupr typ (ici une string grce GeString); il y a d'autres types: GetDateTime, GetDouble, GetGuid, GetInt32, GetBoolean, GetChar, GetFloat, GetByte, GetDecimal etc..; on aurait pu rcupr sans typage: on aurait crit myReader(0). Read avance la lecture des donnes l'enregistrement suivant , il retourne True s'il y a encore des enregistrements et False quand il est en fin de fichier; cela est utilis pour sortir de la boucle Do Loop.

http://plasserre.developpez.com/v6-4.htm (2 sur 6) [01/03/2005 14:49:16]

Site

On ferme pour ne pas monopoliser. myReader.Close() MyConnexion.Close()

Simple, non!!

(Je rigole!!)

Cela donne:

Imports System Imports System.Data Imports System.Data.OleDb Imports Microsoft.VisualBasic Public Class Form1 Inherits System.Windows.Forms.Form Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim MyConnexion As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" & _ "C:\consultation.mdb") Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand() Mycommand.CommandText = "SELECT NOM FROM QUESTIONS" MyConnexion.Open() Dim myReader As OleDbDataReader = Mycommand.ExecuteReader() Do While myReader.Read() ListBox1.Items.Add(myReader.GetString(0)) Loop myReader.Close() MyConnexion.Close() End Sub End Class

Dans le cas d'une base SQLSERVEUR, on aurait les changements suivant: Imports System.Data.SqlClient Dim MyConnexion As SqlConnection = New SqlConnection("Data Source=localhost;" & _ "Integrated Security=SSPI;Initial Catalog=northwind") Dim Mycommand As SqlCommand = MyConnexion.CreateCommand() Dim myReader As SqlDataReader = Mycommand.ExecuteReader()

Voyons en dtail les objets utiliss:

http://plasserre.developpez.com/v6-4.htm (3 sur 6) [01/03/2005 14:49:16]

Site

L'objet Connection:
Il permet de dfinir une connexion. Il faut donner les paramtres 'Provider='indiquant le moteur de BD et 'Data source=' indiquant le chemin et le nom de la BD. Il peut tre ncessaire de donner aussi 'Password=' le mot de passe , 'User ID=' Admin pour l'administrateur par exemple. Il faut mettre ces paramtres avec le constructeur, ou dans la proprit ConnectionString. Dans le cas d'une base Access le provider (le moteur utiliser) est le moteur OLEDB Jet 4. Il y a d'autres proprits: State tat de la connexion (Open, Close, Connecting, Executing, Fetching, Broken) Open, Close ConnectionTimeOut, BeginTransaction, ..

L'objet Command:
Pour chaque provider il y a un objet Command spcifique: SqlCommand, OleDbCommand, mais tous les objets 'Command' on la mme interface, les mmes membres. Command permet de dfinir la commande excuter: SELECT UPDATE, INSERT, DELETE. en utilisant le membre CommandText (Seul SELECT retourne des donnes) CommandType indique comment doit tre trait la commande CommandText:
q

Text ; par dfaut (excution direct des instructions SQL contenues dans CommandText) StoredProcedure: excution de procdure stocke dont le nom est dans CommandText. Tabledirect. qu'une

CommandTimeOut indique la dure en secondes avant requte qui plante soit abandonne. ExecuteReader excute le code SQL de CommandText et retourne un DataReader.

ExecuteScalar fait de mme mais retourne les champs de la

http://plasserre.developpez.com/v6-4.htm (4 sur 6) [01/03/2005 14:49:16]

Site

premier colonne pour une fonction Count ou Sum. ExecuteNoQuery excute le code SQL de CommandText (gnralement une mise jour par UPDATE, INSERT, DELETE) sans retourner de donnes.

L'objet DataReader
Pour chaque provider il y a un objet 'DataReader' spcifique: SqlDatReader, OleDbDataReader

On a vu le membre Read qui avance la lecture des donnes l'enregistrement suivant , il retourne True s'il y a encore des enregistrements et False quand il est en fin de fichier. On a vu GetDateTime, GetDouble, GetGuid, GetInt32, GetBoolean, GetChar, GetFloat, GetByte, GetDecimal permettant de rcuprer les valeurs types des champs. Il a bien d'autres proprits: GetName retourne le nom du champ (numro du champ en paramtre) GetOrdinal fait l'inverse: retourne le numro du champ (nom en paramtre) FieldCount retourne le nombre de colonne. GetDataTypeName retourne le nom du type de donns. IsDBNull retourne True si le champ est vide ......

Exceptions:
Chaque SGDB a des erreurs spcifiques. Pour les dtecter il faut utiliser les types d'erreur spcifique: SqlException et OleDbException par exemple: Exemple d'interception d'erreur: Try MyConnection.Open() Catch ex As OleDbException

MsgBox(ex.Message) End Try

http://plasserre.developpez.com/v6-4.htm (5 sur 6) [01/03/2005 14:49:16]

Site

http://plasserre.developpez.com/v6-4.htm (6 sur 6) [01/03/2005 14:49:16]

Site

Site

Cours : VB.net

Travailler 6.5 avec un DataSet.


Comment travailler(lire crire, modifier, trier..) sur des enregistrements? Avec un DataSet

Gnralits:
Pour obtenir un ensemble de donnes modifiables, qui permet le tri et la recherche de donnes, il faut utiliser un DataSet. Le DataSet est une reprsentation en mmoire des donnes; Une fois charg on peut travailler en mode dconnect. Pour le remplir il faut un DataAdapter.

Il faut crer un objet Connexion puis un objet Adapter qui par sa proprit Fill charge le DataSet. On pourra charger dans le DataSet des donnes extraites l'aide de requte SQL.

http://plasserre.developpez.com/v6-5.htm (1 sur 7) [01/03/2005 14:49:19]

Site

Le DataSet est organis comme une base de donnes, il possde:


q

Une proprit Tables qui contient des DataTable (Comme les tables d'un BD) Chaque DataTable contient une proprit Columns qui contient les DataColomn (les colonnes ou champs des BD) et une proprit Rows compos de DataRow (Les lignes ou enregistrements des BD)

DataColumn contient des informations sur le type du champ. DataRow permet d'accder aux donnes. Un DataSet possde aussi la proprit Constraints qui contient les Constraint (Cl primaire ou cl trangre), et la proprit Relations qui contient les DataRelations (Relation entre les tables)

En pratique:
Soit une base de donnes Access nomme 'Nom.mdb', elle contient une table 'FichePatient' qui contient les champs (ou colonnes) 'Nom', 'Prenom'. Je vais me connecter cette base, extraire les enregistrements de la table 'FichePatient' et les mettre dans un DataSet; Chaque ligne du DataSet contiendra un patient. Je travaillerais sur ces lignes. En tte du module, il faut importer l'espace de nom correspondant OleDB. Imports System.Data.OleDb Dans la zone Gnral, Dclarations du module, il faut dclarer les objets Ado: ' Dclaration Objet Connexion Private ObjetConnection As OleDbConnection
http://plasserre.developpez.com/v6-5.htm (2 sur 7) [01/03/2005 14:49:19]

Site

' Dclaration Objet Commande Private ObjetCommand As OleDbCommand ' Dclaration Objet DataAdapter Private ObjetDataAdapter As OleDbDataAdapter ' Dclaration Objet DataSet Private ObjetDataSet As New DataSet() 'String contenant la 'Requte SQL' Private strSql As String ' Dclaration Objet DataTable Private ObjetDataTable As DataTable ' Dclaration Objet DataRow (ligne) Private ObjetDataRow As DataRow 'Numro de la ligne en cours Private RowNumber As Integer 'Paramtres de connexion la DB Private strConn As String 'Pour recompiler les donnes modifies avant de les remettre dans le '"DataAdapter" Private ObjetCommandBuilder As OleDbCommandBuilder

'Ouverture
'Initialisation de la chane de paramtres pour la connexion strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source= c:\nom.mdb;" 'Initialisation de la chane contenant l'instruction SQL strSql = "SELECT FICHEPATIENT.* FROM FICHEPATIENT" 'Instanciation d'un Objet Connexion ObjetConnection = New OleDbConnection() 'Donner la proprit ConnectionString les paramtres de connexion ObjetConnection.ConnectionString = strConn 'Ouvrir la connexion ObjetConnection.Open() 'Instancer un objet Commande ObjetCommand = New OleDbCommand(strSql) 'Instancer un objet Adapter ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand) 'initialiser l'objet Command ObjetCommand.Connection() = ObjetConnection 'Avec l'aide de la proprit Fill du DataAdapter charger le DataSet ObjetDataAdapter.Fill(ObjetDataSet, "FICHEPATIENT") 'Mettre dans un Objet DataTable une table du DataSet ObjetDataTable = ObjetDataSet.Tables("FICHEPATIENT")

Voir un enregistrement:
Routine affichant un enregistrement: Une TextBox nomme 'Nom' et une TextBox 'Prenom' afficheront les noms et prnom des patients. On rappelle que RowNumber est une variable contenant le numro de la ligne en cours ( allant de 0 Rows.Count-1) If RowNumber < 0 Then Exit Sub
http://plasserre.developpez.com/v6-5.htm (3 sur 7) [01/03/2005 14:49:19]

Site

'Lors de l'ouverture de la BD, s'il n'y a aucun enregistrement If RowNumber > ObjetDataTable.Rows.Count - 1 Then Exit Sub ' ObjetTable.Rows(Numro de lignes).Item( Nom de colonne) donne le contenu d'un champ dans une ligne donne Me.Nom.Text = ObjetDataTable.Rows(RowNumber).Item("Nom") Me.Prenom.Text = ObjetDataTable.Rows(RowNumber).Item("Prenom") 'Item peut avoir en paramtre le nom de la colonne ou sont index

Pour se dplacer: Voir la ligne suivante par exemple: RowNumber += 1 incrmente le numro de la ligne en cours puis on affiche. RowNumber -= 1 pour la prcdente. RowNumber = 0 RowNumber = dernire. pour la premire. ObjetDataTable.Rows.Count - 1 pour la

Modifier un enregistrement: ' Extraire l'enregistrement courant ObjetDataRow = ObjetDataSet.Tables("FICHEPATIENT").Rows(intRowNumber) 'Modifier les valeurs des champs en rcuprant le contenu des TextBox ObjetDataRow("Nom") = Me.Nom.Text ObjetDataRow("Prenom") = Me.Prenom.Text 'Pour modifier les valeurs changes dans le DataAdapter ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter) 'Mise jour ObjetDataAdapter.Update(ObjetDataSet, "FICHEPATIENT") 'On vide le DataSet et on le 'recharge' de nouveau. ObjetDataSet.Clear() ObjetDataAdapter.Fill(ObjetDataSet, "FICHEPATIENT") ObjetDataTable = ObjetDataSet.Tables("FICHEPATIENT")

Attention: quand la commande Update est effectue, si l'enregistrement ne rpond pas au spcification de la base ( doublon alors que c'est interdit, pas de valeur pour une cl
http://plasserre.developpez.com/v6-5.htm (4 sur 7) [01/03/2005 14:49:19]

Site

primaire, Champ ayant la valeur Null alors que c'est interdit..), une exception est leve; si vous ne l'avez pas prvue cela plante!! Ajouter un enregistrement: ObjetDataRow = ObjetDataSet.Tables("FICHEPATIENT").NewRow() ObjetDataRow("Nom") = Me.Nom.Text ObjetDataRow("Prenom") = Me.Prenom.Text ObjetDataSet.Tables("FICHEPATIENT").Rows.Add(ObjetDataRow) 'Pour modifier les valeurs changes dans le DataAdapter ObjetCommandBuilder = New OleDbCommandBuilder(ObjetDataAdapter) 'Mise jour ObjetDataAdapter.Update(ObjetDataSet, "FICHEPATIENT") 'On vide le DataSet et on le 'recharge' de nouveau. ObjetDataSet.Clear() ObjetDataAdapter.Fill(ObjetDataSet, "FICHEPATIENT") ObjetDataTable = ObjetDataSet.Tables("FICHEPATIENT")

Effacer l'enregistrement en cours: ObjetDataSet.Tables("FICHEPATIENT").Rows(RowNumber).Delete() ObjetCommandBuilder = New OleDbCommandBuilder(objetDataAdapter) ObjetDataAdapter.Update(objetDataSet, "FICHEPATIENT") Fermer 'Objet connecte ObjetConnection = Nothing ObjetCommand = Nothing ObjetDataAdapter = Nothing 'Objet dconnecte ObjetDataSet = Nothing ObjetDataTable = Nothing ObjetDataRow = Nothing

Remplir un DataGrid avec un DataSet:


Une fois le dataSet existant, en UNE lignede code, on peut l'afficher dans un DataGrid.(Grille avec des lignes et des colonnes comme un tableur) DataGrid1.SetDataBinding(ObjetDataSet, "FICHEPATIENT")

http://plasserre.developpez.com/v6-5.htm (5 sur 7) [01/03/2005 14:49:19]

Site

On peut modifier un DataSet:


Un DataSet est un groupe de donnes. On a vu qu'on pouvait le remplir avec une base de donnes mais on peut imaginer le crer de toute pice et le remplir en crant des tables, des colonnes, des donnes. Dans un DataSet on peut donc ajouter des tables, les columns, des enregistrements crer de toute pice. L'exemple suivant cre un objet DataTable, qui sera ajouter au DataSet. private myDataSet As DataSet ' Crer une nouvelle DataTable. Dim myDataTable As DataTable = new DataTable("ParentTable") ' Declaration de variables DataColumn et DataRow objects. Dim myDataColumn As DataColumn Dim myDataRow As DataRow ' Crer un nouveau DataColumn, lui donner un DataType, un nom, divers valeur pour ses proprits et l'ajouter la DatTable. myDataColumn = New DataColumn() myDataColumn.DataType = System.Type.GetType("System.Int32") myDataColumn.ColumnName = "id" myDataColumn.ReadOnly = True myDataColumn.Unique = True myDataTable.Columns.Add(myDataColumn) ' Crer une seconde column. myDataColumn = New DataColumn() myDataColumn.DataType = System.Type.GetType("System.String") myDataColumn.ColumnName = "ParentItem" myDataColumn.AutoIncrement = False myDataColumn.Caption = "ParentItem" myDataColumn.ReadOnly = False myDataColumn.Unique = False myDataTable.Columns.Add(myDataColumn) 'La colonne id doit tre une cl primaire. Dim PrimaryKeyColumns(0) As DataColumn PrimaryKeyColumns(0)= myDataTable.Columns("id") myDataTable.PrimaryKey = PrimaryKeyColumns ' Crer un objet DataSet myDataSet = New DataSet() ' Ajouter la Table au DataSet. myDataSet.Tables.Add(myDataTable) ' Crer 3 DataRow objects (3 lignes) DatTable et les ajouter la

http://plasserre.developpez.com/v6-5.htm (6 sur 7) [01/03/2005 14:49:19]

Site

Dim i As Integer For i = 0 to 2 myDataRow = myDataTable.NewRow() myDataRow("id") = i myDataRow("ParentItem") = "ParentItem " + i.ToString() myDataTable.Rows.Add(myDataRow) Next i End Sub Travailler avec la Base MySQL Pour travailler sur une base MySQL lisez le trs bon didacticiel MySQLDotNet (sur developpez.com bien sur)

http://plasserre.developpez.com/v6-5.htm (7 sur 7) [01/03/2005 14:49:19]

Site

Site

Cours : VB.net

Charger des 6.6 contrles avec des SGBD.


Comment remplir des listBox ComboBox, DataGrid avec des tables venant de base de donnes.

Remplir une ListBox avec une colonne d'une table d'une BD:
Exemple: Dans une base de donnes Accs nomm 'BaseNom', j'ai une table 'NomPatient' avec plusieurs colonnes, je veux afficher la liste des noms:

Champs Civilit Champ Nom

Champ Prnom

Champ Numro Interne 1 2 3

M. Mme M.

Durand Dupont Thomas

Luc Josette Guy

http://plasserre.developpez.com/v6-6.htm (1 sur 6) [01/03/2005 14:49:21]

Site

On peut utiliser un 'DataReader'


Voir la page 6-4 DataReader Lire rapidement en lecture seule: le

C'est de la 'lecture seule' trs rapide.

On peut utiliser un 'DataSet', crer un 'DataTable' et la lier au contrle.


Le DataSet est une reprsentation en mmoire des donnes; Une fois charg on peut travailler en mode dconnect. Pour le remplir il faut un DataAdapter.

Bien sur il faut importer des espaces de nom:

Imports System Imports System.Data Imports System.Data.OleDb

Dans la zone dclaration de la fentre: 'Dclarer la connexion Private ObjetConnection As OleDbConnection ' Dclaration l'Objet Commande Private ObjetCommand As OleDbCommand ' Dclaration Objet DataAdapter Private ObjetDataAdapter As OleDbDataAdapter ' Dclaration Objet DataSet Private ObjetDataSet As New DataSet 'String contenant la 'Requte SQL' Private strSql As String ' Dclaration Objet DataTable Private ObjetDataTable As DataTable
http://plasserre.developpez.com/v6-6.htm (2 sur 6) [01/03/2005 14:49:21]

Site

'Paramtres de connexion la DB Private strConn As String

Dans une routine Button1_Click crer les divers objets et remplir la listbox.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Initialisation de la chane de paramtres pour la connexion strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= c:\Basenom.mdb;" 'Initialisation de la chane contenant l'instruction SQL strSql = "SELECT FICHEPATIENT.* FROM FICHEPATIENT" 'Instanciation d'un Objet Connexion ObjetConnection = New OleDbConnection 'Donner la proprit ConnectionString les paramtres de connexion ObjetConnection.ConnectionString = strConn 'Ouvrir la connexion ObjetConnection.Open() 'Instancer un objet Commande ObjetCommand = New OleDbCommand(strSql) 'Instancer un objet Adapter ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand) 'initialiser l'objet Command ObjetCommand.Connection() = ObjetConnection 'Avec l'aide de la proprit Fill du DataAdapter charger le DataSet ObjetDataAdapter.Fill(ObjetDataSet, "FICHEPATIENT") 'Mettre dans un Objet DataTable une table du DataSet ObjetDataTable = ObjetDataSet.Tables("FICHEPATIENT") 'Indiquer au ListBox d'afficher la table "fichepatient" (indiquer la source) ListBox1.DataSource = ObjetDataSet.Tables("FICHEPATIENT") 'Indiquer quelle colonne afficher ListBox1.DisplayMember = "NOM" End Sub Voil, cela affiche la liste des noms. Bien respecter les minuscules et majuscules dans les noms de tables et de champs+++

Rcuprer la valeur d'un autre champ


On a vu que dans la table, chaque enregistrement avait un champ 'Nom' mais aussi un champ 'NumInt' (numro interne) Dans les programmes, on a souvent besoin de rcuprer le

http://plasserre.developpez.com/v6-6.htm (3 sur 6) [01/03/2005 14:49:21]

Site

numro interne (un ID) quand l'utilisateur clique sur un des noms; le numro interne servira a travaille sur ce patient. Exemple: comment rcuprer le numro interne 3 quand l'utilisateur clique sur 'Thomas'? Il faut indiquer la ListBox que la Value de chaque ligne est 'NumInt' en utilisant la proprit ListBox1.ValueMember. Quand l'utilisateur clique sur une ligne de la ListBox, cela dclenche l'vnement ListBox1_SelectedIndexChanged, l on rcupre la valeur de NumInt correspondant; elle se trouve dans ListBox1.SelectedValue. (C'est un Int32) Attention: Les exemples de Microsoft ne fonctionnent pas!! car, on n'explique nulle part l'importance de l'ordre des lignes remplissant la ListBox. C'est DataSource qui semble dclencher le chargement de la ListBox avec la prise en compte de DisplayMember et ValueMember. Si on fait comme Microsoft (renseigner ListBox1.DataSource en premier): ListBox1.DataSource = ObjetDataSet.Tables("FICHEPATIENT") ListBox1.DisplayMember = "NOM" ListBox1.ValueMember = "NUMINT" ValueMember ne fonctionne pas bien, (liaison tardive?) et ListBox1.SelectedValue retourne un objet de type DataRowView impossible utiliser. Il faut donc renseigner le DataSource en dernier. ListBox1.DisplayMember = "NOM" ListBox1.ValueMember = "NUMINT" ListBox1.DataSource = ObjetDataSet.Tables("FICHEPATIENT")

Dans ce cas ListBox1.SelectedValue contient bien un Int32


correspondant au 'NutInt' selectionn. 'Ensuite on peut rcuprer sans problme NumInt (et l'afficher par exemple dans une TextBox) Private Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Dim o As New Object If ListBox1.SelectedIndex <> -1 Then TextBox1.Text = CType(ListBox1.SelectedValue, String) End If End Sub

http://plasserre.developpez.com/v6-6.htm (4 sur 6) [01/03/2005 14:49:21]

Site

Remplir un DataGrid avec un DataSet:


Il faut crer une Connection, un DataAdapter et un DataSet, puis en UNE ligne de code, on peut l'afficher dans un DataGrid.(Grille avec des lignes et des colonnes comme un tableur) DataGrid1.SetDataBinding(ObjetDataSet, "FICHEPATIENT")

Les lignes, colonnes, nom des champs, ascenseurs... sont cres automatiquement!! Gnial. On peut aussi remplir le DataSet avec:

DataGrid1.DataSource = ObjetDataSet DataGrid1.DataMember = "FICHEPATIENT"

On peut modifier l'aspect du DataGrid dans la fentre de proprit ou en utilisant la mise en forme automatique (lien en bas de la fentre de proprits.)

http://plasserre.developpez.com/v6-6.htm (5 sur 6) [01/03/2005 14:49:21]

Site

http://plasserre.developpez.com/v6-6.htm (6 sur 6) [01/03/2005 14:49:21]

Site

Site

Cours : VB.net
Diffrence entre VB6 et VB.NET

7.1

Cela concerne surtout ceux qui passent de VB6 VB.NET, pour les autres c'est une rvision.
Les petits nouveaux qui ne connaissaient pas VB6 (prcdente version de VB) ne doivent pas lire ce qui est en vert.

Les Objets
En VB.NET tout est objet: les fentres, les contrles, les variables.... Set et Let ne sont plus pris en charge. Les objets peuvent tre assigns par une simple opration d'assignation :

Object1 = Object2
Pour dfinir une proprit par dfaut d'un objet, vous devez dsormais rfrencer explicitement la proprit. Exemple :

Object1.Text = Object2.Text Vous pouvez dfinir vous mme un nouveau type d'objet, une Classe. Puis instancer des objets partir de cette Classe. VB.NETpermet une vraie programmation objet: hritage, polymorphisme, surcharge, Interface ...

http://plasserre.developpez.com/v7-1.htm (1 sur 9) [01/03/2005 14:49:24]

Site

Les formulaires ou

fentres:

On se rend compte que quand on dessine une fentre Form2 par exemple, VB cre une nouvelle classe 'Class Form2' Public Class Form2 Inherits Systeme.Windows.Forms.Form End Class Elle hrite de System.Windows.Forms.Form: on le voit bien dans le code.

Pour utiliser cette fentre, il faut crer une instance de cette fentre l'aide de la Classe :

Dim f As New Form2(), on cre une instance de la Class Form2.


On tape Enfin la fentre sera ouverte grce la mthode ShowDialog ou Show. Comme pour un Objet en gnral, la fentre cre sera visible dans sa porte. Si une fentre est instance dans une procdure, l'objet fentre f ne sera visible que dans cette procdure. Comment passer de VB6 VB.net?
q

Avant en VB6, on avait: Form2.Load Form2.Show

Avec le programme de conversion VB6=>VB.Net on a: Form2.DefInstance.Show() car il ajoute une routine qui cre automatiquement une instance de form2:
#Region "Prise en charge de la mise niveau " Private Shared m_vb6FormDefInstance As form2 Private Shared m_InitializingDefInstance As Boolean Public Shared Property DefInstance() As form2 Get If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then m_InitializingDefInstance = True m_vb6FormDefInstance = New form2() m_InitializingDefInstance = False End If DefInstance = m_vb6FormDefInstance End Get Set m_vb6FormDefInstance = Value End Set

http://plasserre.developpez.com/v7-1.htm (2 sur 9) [01/03/2005 14:49:24]

Site
End Property #End Region

En fait il faut mieux avec VB.net crire: Dim F As New Form2 F.Show

On remarque que Load n'existe plus, par contre, le Dim cre le formulaire sans l'afficher, c'est peu prt quivalent..

Les Forms ont 2 contrles menu: Les MainMenu Les ContextMenu. Visual Basic .NET ne prend pas en charge la mthode Form.PrintForm.

Les Contrles
La plupart des objets ne possdent plus de proprits par dfaut.

En VB6: Dim str As String = TextBox1 Maintenant il faut crire: Dim str As String = TextBox1.Text
Visual Basic .NET ne prend pas en charge le contrle conteneur OLE . Il n'existe pas de contrle carr rectangulaire ligne . On peut les remplacer sous la forme d'tiquettes (Label), tandis que les ovales et les cercles qui n'existent pas non plus, ne peuvent pas tre mis niveau. Visual Basic .NET est dot d'un nouvel ensemble de commandes graphiques faisant partie de GDI+. Circle, CLS, PSet, Line et Point n'existent plus. tant donn que le nouveau modle objet est assez diffrent de celui de Visual Basic 6.0,il faut tout rcrire. Visual Basic .NET ne prend pas en charge l'change dynamique de donnes (DDE, Dynamic Data Exchange). Bien que Visual Basic .NET prenne en charge la fonctionnalit de glisser-dplacer, le modle objet est diffrent de celui de Visual Basic 6.0. Il faut tout rcrire.

http://plasserre.developpez.com/v7-1.htm (3 sur 9) [01/03/2005 14:49:24]

Site

Le .NET Framework est dot d'un objet Clipboard amlior (System.Windows.Forms.Clipboard) qui offre plus de fonctionnalits et prend en charge un plus grand nombre de formats de Presse-papiers que l'objet Clipboard de Visual Basic 6.0. Il faut tout rcrire. Les groupe de contrle n'existent plus. Il y a des moyens de les remplacer.

Les Variables.
Option Explicit tant activ par dfaut, toutes les variables doivent tre dclares avant d'tre utilises. Le type de donnes Variant n'existe plus. Celui-ci a t remplac par le type Object. Le type de donnes Integer est dsormais de 32 bits ; le type de donnes Long est de 64 bits. On peut utiliser les type Boolens qui ne peuvent prendre que 2 valeurs :True et False (pas 0 et -1) En VB.NET Option Strict tant activ, il faut convertir explicitement une donne d'un type vers un autre si c'est ncessaire.

Response.Write("Le total est " & CStr(total)) on attend des String, la variable total qui est numrique est donc transforme en String par CStr.
Les variables cres dans la mme instruction Dim seront du mme type. Par exemple, dans VB.NET, l'instruction Dim i, j, k As Integer cre chacun des trois objets (i, j, et k) comme Integer. Les versions prcdentes de VB craient i et j comme Variants et k comme Integer (c'tait nul!!). Il existe une type Char qui contient un seul caractre. Le type Currency est remplac par le type Decimal. Les String de longueur fixe n'existent plus. Il y a quelques ficelles pour contourner cela mais bonjour la simplicit!! Les String et Char sont en Unicode (chaque caractre est cod sur 2 octets). Une variable peut avoir une porte locale, publique ou, et c'est nouveau, une porte au niveau d'un bloc: For i=0 to 100 Dim Str As String 'Str est visible uniquement entre For et Next ... next i

http://plasserre.developpez.com/v7-1.htm (4 sur 9) [01/03/2005 14:49:24]

Site

Les Tableaux
Le premier lment d'un tableau a l'indice 0 obligatoirement; plus d'Option Base. On peut initialiser un tableau en mme temps qu'on le dclare:

Dim Tableau(3) As Integer ={2,3,5}


A noter que ce tableau contient 4 lment d'index 0, 1, 2, 3. Dim S(4 to 15) n'est plus accept. Dim est utilis pour la dclaration initiale, Redim pour le redimensionnement uniquement. Les tableaux font partie de la Classe Array, ce qui autorise l'utilisation de mthodes bien pratiques: Sort par exemple trie automatiquement le tableau.

Les Collections:
Elles sont omniprsentes. C'est fondamental de bien comprendre leur fonctionnement: Ce sont des listes ayant un nombre d'lment non dfini, on peut y ajouter des lments, en retirer, il y a des mthodes pour trier, rechercher.. Cela peut tre : Des listes d'objet: ArrayList Des listes de boolens: BitArray Des listes Cl-Valeur :HashTable Des Queue Des Piles :Stack La notion de collections est gnralise et utilise dans beaucoup d'objet: Une ListeBox possde une collection d'Item (les lments de la listBox)

Les Structures:
Elles remplacent les "Types dfinies par l'utilisateur".

Structure MaStructure Public i As Integer


http://plasserre.developpez.com/v7-1.htm (5 sur 9) [01/03/2005 14:49:24]

Site

Public c As String End Structure

Les Fonctions et Sub


Les parenthses sont dsormais requises autour de la liste de paramtres dans tous les appels de mthodes y compris pour les mthodes qui ne prennent pas de paramtres. Exemple :

If Flag = False Then AfficheMessage() End If

Par dfaut, les arguments sont passs par valeur, et non pas rfrence . Si vous voulez passer des arguments par rfrence, vous devez utiliser le mot cl ByRef devant l'argument comme dans l'exemple suivant :

Call MaFunction(argbyvalue, ByRef argbyref)

Il peut y avoir des paramtres optionnels.

Return est un nouveau mot cl qui permet une fonction de retourner une valeur. Private Function MaFonction (Byval Chaine As String) Return Chaine.ToLower() End Function

Dans le Code:
Simplification d'criture: A= +=2 est quivalent A=A+2

Nouveau type de boucle While condition End While Boucle tant que condition est vraie.
http://plasserre.developpez.com/v7-1.htm (6 sur 9) [01/03/2005 14:49:24]

Site

Wend n'existe plus. Le Multithreading est possible.

Gestion des erreurs:


La gestion des erreurs est structures: Elle utilise Try Code a tester Catch interception de l'erreur Finally suite End Try

On error goto reste utilisable.

Les graphiques:
En GDI (VB6) on utilisait les handles(HDC) pour spcifier un image. En GDI+ (VB.Net) on travaille sur les Graphics et leurs mthodes. Graphics.DrawLine.. L'unit de mesure est le pixels. (Plus de Twips)

Les bases de donnes:


Visual Basic .NET contient une version amliore des objets de donnes actifs (ADO, Active Data Objects) appele ADO.NET. DAO, RDO et ADO peuvent toujours tre utiliss dans du code Visual Basic .NET, avec toutefois quelques petites modifications . Toutefois, Visual Basic .NET ne prend pas en charge la liaison de donnes DAO et RDO aux contrles ou contrles de donnes ni la connexion utilisateur RDO.

http://plasserre.developpez.com/v7-1.htm (7 sur 9) [01/03/2005 14:49:24]

Site

Les Classes:
La syntaxe des proprits de classe a chang et ne contient plus Property Let, Property Get, et Property Set. La nouvelle syntaxe des proprits est analogue celle de C#.

Public Property ThisProperty As String Get ThisProperty = InternalValue End Get Set InternalValue = value End Set End Property
Les classes sont totalement objet et acceptent le polymorphisme, la surcharge , l'hritage..

GOSUB et ON GOSUB n'existent plus


Il faut remplacer une une routine qui tait appele par gosub par une sub ou une fonction. Remplacer Sub Mon Programme .. Gosub Routine .. End SuB Routine: Code de la routine Return Par Sub Mon Programme .. Call Routine() .. End Sub Sub Routine() code de la routine End Sub

Il faudra simplement faire attention aux variables, les variables locales Mon Programme ne seront pas accessible dans la Routine. Pour On Gosub, il faut remplacer par un SelectCase.

http://plasserre.developpez.com/v7-1.htm (8 sur 9) [01/03/2005 14:49:24]

Site

Les Timers
S'agissant du contrle Timer, le fait d'affecter la proprit Interval la valeur 0 ne dsactive pas la minuterie ; l'intervalle est rinitialis 1. Dans vos projets Visual Basic 6.0, vous devez affecter la proprit Enabled la valeur False plutt que d'affecter Interval la valeur 0.

Conversion VB6 vers VB.NET


Il existe un outil de conversion (Menu Fichier, Ouvrir, Convertir, Assistant de mise niveau de VB.NET) pour convertir un source VB6 en VB.NET. Le problme est qu'il donne un code inutilisable avec:
q q

Conversion des instructions VB6=>VB.NET quand il le peut. Conversion en utilisant une classe de compatibilit contenant des instructions spcifiques VB6 (qui ne sont PAS du VB.NET) produisant un code hybride. Cette classe de compatibilit disparatra probablement dans les prochaines versions. Des instructions impossible convertir automatiquement et qui seront rcrire la main.

Il faut convertir les programmes VB6 avec l'outil de conversion pour voir ce que cela donne: c'est instructif de voir le nouveau code. Mais il faut rcrire totalement une bonne partie du code: l'appel des fentres en particulier.. Il faut rapidement ne pas utiliser du tout la classe de compatibilit VB 6 , viter les instructions hrites de VB6, privilgier l'usage des classes du FrameWork.

http://plasserre.developpez.com/v7-1.htm (9 sur 9) [01/03/2005 14:49:24]

Site

Site

Cours : VB.net

Rgles de 7.2 bonne programmation.


Pour faire un code solide, viter les bugs, avoir une maintenance facile, il faut suivre quelques rgles.

Au niveau du projet
Dcouper un traitement complexe en plusieurs petites routines effectuant chacune une fonction prcise. Dcouper les diffrentes fonctions du logiciel en Module et procdures, ou en Objet (Crer des Classes dont les mthodes seront les divers routines).voir Programmation 'fonctionnelle' ou 'objet' Sparer l'interface utilisateur et l'applicatif. Exemple: un formulaire affiche les enregistrements d'une base de donnes: Crer:
q

Les fentres dont le code gre uniquement l'affichage. C'est l'interface utilisateur ou IHM (Interface Homme Machine) une Classe grant uniquement l'accs au base de donnes.

Cela facilite la maintenance: si on dsire modifier l'interface, on touche au fentre et pas du tout la Classe base de donnes. Architecture 3 niveaux.

http://plasserre.developpez.com/v7-2.htm (1 sur 8) [01/03/2005 14:49:26]

Site

Elle peut tre ncessaire dans certains programmes, les 3 niveaux sont:
q q q

Application ,interface. Logique. Donnes.

Exemple: Un formulaire affiche certains enregistrements d'une base de donnes.


q q

L'interface affiche les enregistrements. Les classes ou modules 'logiques' dterminent les bons enregistrements. Les classes ou modules donnes vont chercher les donnes dans la base de donnes.

Si au lieu de travailler sur une base Access, je travaille sur une base SQLServer, il suffit de rcrire la troisime couche.

Dans un module:
Respecter l'ordre suivant :

1. 2. 3. 4.

Instructions Option Instructions Imports Procdure Main Instructions Class, Module et Namespace, le cas chant

Dans une Class

1. Instructions Declare 2. Dclaration des variables (Public Private) 3. Sub ou Function


Sous peine d'erreurs la compilation.

Rendre le code lisible:


q

Ajoutez des commentaires. Pour vous, pour les autres.

Au dbut de chaque routine, Sub, Function, Classe , noter en commentaire ce qu'elle fait et quelles sont les caractristiques des paramtres:
q

q q q

Le rsum descriptif de la routine, la Sub ou Function. Une description de chaque paramtre. La valeur retourne s'il y en a une. Une description de toutes les exceptions.. Un exemple d'utilisation

http://plasserre.developpez.com/v7-2.htm (2 sur 8) [01/03/2005 14:49:26]

Site
q

Une explication sur le fonctionnement de la routine.

Ne pas ajouter de commentaire en fin de ligne (une partie ne sera pas visible) mais plutt avant la ligne de code. Seule exception ou on utilise la fin de ligne: les commentaires aprs les dclarations de variable. Dim i As Integer 'Variable de boucle

'Parcours du tableau la recherche de.. For i=0 To 100 ... Paradoxalement, trop de commentaires tue le code autant que le manque de commentaires. Pour viter de tomber dans le tout ou rien, fixons nous quelques rgles: Commentez le dbut de chaque Sub, Fonction, Classe Commentez toutes les dclarations de variables Commentez toutes les branches conditionnelles Commentez toutes les boucles

Choisissez les noms de procdures et de variables avec soins: leur nom doit tre explicite. Microsoft propose quelque rgles: Routines Utilisez la casse Pascal (CalculTotal) pour les noms de routine (la premire lettre de chaque mot est une majuscule). vitez d'employer des noms difficiles pouvant tre interprts de manire subjective, notamment Analyse() pour une routine ou YYB8 pour une variable. Dans les objets, il ne faut pas inclure des noms de classe dans les noms de proprits Patient.PatientNom est inutile, utiliser plutt Patient.Nom.

http://plasserre.developpez.com/v7-2.htm (3 sur 8) [01/03/2005 14:49:26]

Site

Utilisez les verbe/nom pour une routine : CalculTotal(). Variables Pour les noms de variables, utilisez la casse selon laquelle la premire lettre des mots est une majuscule, sauf pour le premier mot (iNombrePatient); noter ici que la premire lettre indique le type de la variable (Integer), elle peut aussi indiquer la porte(gTotal pour une variable globale). Ajoutez des mthodes de calcul ( Min, Max, Total) la fin d'un nom de variable, si ncessaire. Les noms de variable boolenne doivent contenir Is qui implique les valeurs True/False, par exemple fileIsFound. vitez d'utiliser des termes tels que Flag lorsque vous nommez des variables d'tat, qui diffrent des variables boolennes car elles acceptent plus de deux valeurs. Plutt que documentFlag, utilisez un nom plus descriptif tel que documentFormatType. Mme pour une variable courte dure de vie utilisez un nom significatif. Utilisez des noms de variable d'une seule lettre, par exemple i ou j, pour les index de petite boucle uniquement. N'utilisez pas des nombres ou des chanes littrales telles que For i = 1 To 7. Utilisez plutt des constantes par exemple For i = 1 To DAYSINWEEK, pour simplifier la maintenance et la comprhension. Tables Pour les tables, utilisez le singulier. Par exemple, utilisez table 'Patient' plutt que 'Patients'. N'incorporez pas le type de donnes dans le nom d'une colonne. Divers Minimisez l'utilisation d'abrviations,

http://plasserre.developpez.com/v7-2.htm (4 sur 8) [01/03/2005 14:49:26]

Site

Lorsque vous nommez des fonctions, insrez une description de la valeur retourne, notamment GetCurrentWindowDirectory(). vitez de rutiliser des noms identiques pour divers lments. vitez l'utilisation d'homonymes et des mots qui entranent souvent des fautes d'orthographe. vitez d'utiliser des signes typographiques pour identifier des types de donnes, notamment $ pour les chanes ou % pour les entiers. Un nom doit indiquer la signification plutt que la mthode.
q

Eclaircir, arer

le code:

Eviter plusieurs instructions par ligne. Ajouter quelques lignes blanches. Dcaler droite le code contenu dans If.. End If: une boucle ou une section

Une mise en retrait simplifie la lecture du code, par exemple : If ... Then If ... Then ... Else ... End If Else ... End If

Forcer la dclaration des variables et les conversions explicite:

Option Explicit tant par dfaut On, toute

variable utilise doit tre dclare. Conserver cette option. Cela vite les erreurs lies aux variables mal orthographies.

Si Option Strict est sur On, seules les conversions de type effectues explicitement sur les variables
http://plasserre.developpez.com/v7-2.htm (5 sur 8) [01/03/2005 14:49:26]

Site

seront autorises. Le mettre sur On.


Voir Option Strict et Option Explicite

Utiliser des constantes ou des numrations:


L'usage de constantes facilite les modifications. Exemple : un programme gre des utilisateurs;: Faire: Crer une constante contenant le nombre maximum d'utilisateurs. Const NombreUtilisateur= 20 Dim VariableUtilisateur (NombreUtilisateur) NombreUtilisateur et non 20 For i= 0 To NombreUtilisateur-1 Next i Plutt que: Dim VariableUtilisateur (20) For i= 0 To 19 Next i Si ultrieurement on veut augmenter le nombre d'utilisateurs possibles 50, il suffit de changer une seule ligne: Const NombreUtilisateur= 50 Utiliser les constantes VB, c'est plus lisible: Form1.BorderStyle=2 est viter Form1.BorderStyle= vbSizable c'est mieux

'on utilise

Vrifier la validit des paramtres que reoit une Sub ou Function


Vous pouvez tre optimiste et ne pas tester les paramtres reus par votre Sub. Les paramtres envoys seront toujours probablement bons!! Bof un jour vous ferez une erreur, ou un autre n'aura pas compris le type de paramtre envoyer et cela plantera!!

http://plasserre.developpez.com/v7-2.htm (6 sur 8) [01/03/2005 14:49:26]

Site

Donc, il faut vrifier la validit des paramtres. On peut le faire au fur et mesure de leur utilisation dans le code, il est prfrable de faire toutes les vrifications en dbut de Sub.

Se mfier du passage de paramtres 'par valeur' ou par 'rfrence':


Par dfaut les paramtres sont envoys 'par valeur' vers une procdure. Aussi, si la variable contenant le paramtre est modifie, cela ne modifie pas la valeur de la variable de la procdure appelante. Si on a peur de se tromper utilisons 'ByVal' et 'ByRef' dans l'entte de la Sub ou de la Fonction.

Les Boolens sont des Boolens:


Utiliser une variable Integer pour stocker un Flag dont la valeur ne peut tre que 'vrai' ou 'faux' et donner la valeur 0 ou -1 est proscrire. Faire: Dim Flag As Boolean Flag=True (Utiliser uniquement True et False) Eviter aussi d'abrger la mode Boolens ce qui n'en est pas. Dim x,y As Integer If x And y then Faire plutt: If x<>0 And y <>0 (pour tester si x et y sont = 0) est viter.

Utiliser les variables Date pour stocker les dates:

http://plasserre.developpez.com/v7-2.htm (7 sur 8) [01/03/2005 14:49:26]

Site

Ne pas utiliser de type Double. Dim LaDate As Date LaDate=Now

Ne faire aucune confiance l'utilisateur du logiciel:


Si vous demandez l'utilisateur de saisir un entier entre 1 et 7. Vrifier: qu'il a tap quelque chose!! Qu'il a tap une valeur numrique. Que c'est un entier. Que c'est suprieur 0 et infrieur 8. Accorder les moindres privilges: Ne permettre de saisir que ce qui est valide.

http://plasserre.developpez.com/v7-2.htm (8 sur 8) [01/03/2005 14:49:26]

Site

Site

Cours : VB.net

Optimiser 7.3 en vitesse.


VB.NET est t-il rapide?

Comment VB.NET est situ en comparaison avec les autres langages de programmation?
Le site OsNews.com publie les rsultats d'un petit benchmark comparant les performances d'excution sous Windows de plusieurs langage de programmation. Les langages .NET - et donc le code manag en gnral n'ont pas rougir devant Java, pas plus que face au langage C compil grce GCC. Voici un aperu des rsultats chiffrs (valeurs les plus faibles = les meilleures performances) : int long double trig 6.4 17.7 9.5 17.7 17.5 19.0 6.5 100.4 405.7 I/O TOTAL 48.8 65.3 73.0 85.9 90.4 97.6 103.1 769.1 1679.0

Visual C++ 9.6 18.8 Visual C# 9.7 23.9 gcc C 9.8 28.8 Visual Basic 9.8 23.7 Visual J# 9.6 23.9 Java 1.3.1 14.5 29.6 Java 1.4.2 9.3 20.2 Python/Psyco 29.7 615.4 Python 322.4 891.9

3.5 10.5 4.1 9.9 14.9 10.0 4.1 30.7 4.2 35.1 22.1 12.3 57.1 10.1 13.1 10.5 47.1 11.9

http://plasserre.developpez.com/v7-3.htm (1 sur 11) [01/03/2005 14:49:29]

Site

- Nine Language Performance Round-up: Benchmarking Math & File I/O [OsNews.com] Article publier sur www.DotNet-fr.org

VB.NET est-il plus rapide que VB6?


Exemple No1
Sur une mme machine P4 2.4 G faisons tourner un mme programme: 2 boucles imbriques contenant une multiplication, l'addition un sinus et l'affichage dans un label: En Vb.Net Imports System.Math Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim j As Integer Dim k As Integer For i = 0 To 100 For j = 0 To 1000 Label5.Text = (k * 2 + Sin(4)).ToString : Label5.Refresh() k = k + 1 Next Next End Sub 35 secondes dans l'IDE, 25 secondes avec un excutable aprs compilation. En utilisant des 'Integer' ou des 'Long', il y a peu de diffrence. En VB6 Private Sub Command1_Click() Dim i As Long Dim j As Long Dim k As Long For i = 0 To 100 For j = 0 To 1000 Label1.Caption = Str(k * 2 + Sin(4)): Label1.Refresh k = k + 1 Next Next
http://plasserre.developpez.com/v7-3.htm (2 sur 11) [01/03/2005 14:49:29]

Site

End Sub 9 secondes dans l'IDE , 7 secondes avec un excutable aprs compilation. Dur, dur 25 s pour VB.NET, 7 s pour VB6.

Exemple No2
Sur une mme machine P4 2.4 G faisons tourner un mme programme: On cre un tableau de 10000 String dans lequel on met des chiffres Puis on trie le tableau. En Vb.Net Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim A(10000) As String For i = 9999 To 0 Step -1 A(i) = (9999 - i).ToString Next i Array.Sort(A) Label1.Text = "ok" End Sub < 1 seconde En VB6 Private Sub Command1_Click() Dim i As Integer Dim A(10000) As String Dim j As Integer Dim N As Integer Dim Temp As String N = 9999 'remplir le tableau For i = 9999 To 0 Step -1 A(i) = Str(9999-i) Next i 'trier For i = 0 To N - 1 For j = 0 To N - i - 1 If A(j) > A(j + 1) Then Temp = A(j): A(j) = A(j + 1): A(j + 1) = Temp End If Next j
http://plasserre.developpez.com/v7-3.htm (3 sur 11) [01/03/2005 14:49:29]

Site

Next i End Sub 35 secondes Moins d'une seconde avec VB.NET, 35 secondes en VB6. La mthode 'Sort' est hyper plus rapide que la routine de tri. (Pour tre honnte, il faut dire que mon test n'est pas rigoureux car le tri VB.NET est probablement un tri 'rapide' alors qu'en VB6 la routine basic n'est pas optimise, je ne compare donc pas les mmes routines.) En conclusion: La couche du Framework semble ralentir considrablement la vitesse du code. Mais, en VB.net, il faut raisonner diffremment et utiliser judicieusement les classes et les mthodes au lieu de taper de longues routines. Cela fait que en VB.Net: Le code est plus court et compact (moins de temps de dveloppement) Le code est plus rapide.

Comment acclrer une application VB.net?


Utilisation des nouvelles fonctionnalits:
Il faut raisonner diffremment et utiliser judicieusement les classes et les mthodes au lieu de taper de longues routines. Exemple: On l'a vu plus haut La mthode 'Sort' d'un tableau est hyper plus rapide que la routine de tri crite en code.

Choix des variables:


Sur les ordinateurs actuels: Pour les entiers les Integer sont les plus rapides car le processeur calcul en Integer . Viennent ensuite les Long, Short, et Byte.

http://plasserre.developpez.com/v7-3.htm (4 sur 11) [01/03/2005 14:49:29]

Site

Dans les nombres en virgule flottante, les Double sont les plus rapides car le processeur virgule flottante calcul en Double, ensuite se sont les Single puis les Decimal. Si c'est possible utiliser les entiers plutt que les nombres en virgules flottantes. Exemple pour stocker les dimensions d'une image, on utilisera les pixels: l'image aura un nombre entier de pixels et on peut ainsi utiliser une variable Integer, alors que si on utilise les centimtres on devra travailler sur des fractionnaires donc utiliser par exemple des Singles. L'usage de constantes est plus rapide que l'usage de variable, car la valeur d'une constante est directement compile dans le code. Pour stocker une valeur, une variable est plus rapide qu'une proprit d'objet.

Tableau:
Le CLR est optimis pour les tableaux unidimensionnel. L'usage des tableaux de tableau 'A(9),(9)' est plus rapide que les tableaux multidimensionnels 'A(9,9)'. Pour rechercher un lment dans un ensemble l'lment partir de son index , utilisez un tableau (l'accs un lment d'index i est plus rapide dans un tableau que dans une collection)

Collections:
Si on ne connat pas le nombre d'lments maximum et que l'on doit ajouter, enlever des lments, il vaut mieux utiliser une collection (ListArray) plutt qu'un tableau avec des Dim Redim Preserve. Mais attention une collection est compose d'objet, ce que est lent. Pour rechercher un lment dans un ensemble l'lment partir d'une cl (KeyIndex) , utilisez une collection (l'accs un lment ayant la cl X est plus rapide dans une collection que dans un tableau; dans une tableau il
http://plasserre.developpez.com/v7-3.htm (5 sur 11) [01/03/2005 14:49:29]

Site

faut en plus crire la routine)

Eviter la dclaration de variables 'Objet' et les liaisons tardives:


Eviter de crer des variables Objet: Pour crer une variable et y mettre une String: Dim A

cre un 'Objet' A

Il est prfrable d'utiliser: Dim A As String La gestion des objets est plus lente que la gestion d'une variable type. Il faut aussi viter les liaisons tardives: Une liaison tardive consiste utiliser une variable Objet et l'excution, donc tardivement, lui assigner une String ou un Objet ListBox par exemple. Dans ce cas, l'excution, VB doit analyser de quel type d'objet il s'agit et le traiter, alors que si la variable a t dclare d'emble comme une String ou une ListBox, VB a dj prvu le code ncessaire en fonction du type de variable. Utilisez donc des variables types.

Utiliser les bonnes 'Option':


Option Strict On permet de convertir les variables de manire explicite et acclre le code. Option Compare Binary acclre les comparaisons et les tris (la comparaison binaire consiste comparer les codes unicode des chanes de caractre).

Pour les fichiers utiliser System.IO:


L'utilisation des System.IO classes acclre les

http://plasserre.developpez.com/v7-3.htm (6 sur 11) [01/03/2005 14:49:29]

Site

oprations sur fichiers (en effet, les autres manires de lire ou d'crire dans des fichiers comme les FileOpen font appel System.IO: autant l'appeler directement!!) :
q q q

Path, Directory, FileStream pour BinaryReader and binaires. StreamReader and texte.

et File lire ou crire BinaryWriter pour les fichiers StreamWriter pour les fichiers

Utiliser des buffers entre 8 et 64K

Oprations:
Si possible: Utiliser :"\" Pour faire une vraie division on utilise l'oprateur '/' Si on a seulement besoin du quotient d'une division (et pas du reste ou du rsultat fractionnaire) on utilise '\', c'est beaucoup plus rapide.

Utiliser :"+=" A+= 2 est plus rapide que A= A+2

Utiliser :AndAlso et ElseOr AndAlso et ElseOr sont plus rapide que And et Or.

(puisque la seconde expression n'est value que si ncessaire)

Utiliser :With End With With.. End With acclre le code:

http://plasserre.developpez.com/v7-3.htm (7 sur 11) [01/03/2005 14:49:29]

Site

With Form1.TextBox1 .BackColor= Red .Text="BoBo" .Visible= True End With est plus rapide que Form1.TextBox1.BackColor= Red Form1.TextBox1.Text="BoBo" Form1.TextBox1.Visible= True car Form1.TextBox1 est 'valu' 3 fois au lieu de 1 fois.

En mettre le moins possible dans les boucles:


Soit un tableau J(100,100) d'entiers: Soit un calcul rpt 100 000 fois sur un lment du tableau, par exemple: For i=1 to 100000 R=i*J(1,2) next i On va 100000 fois chercher un lment d'un tableau,c'est toujours le mme! Pour acclrer la routine (c'est plus rapide de rcuprer la valeur d'une variable simple plutt d'un lment de tableau), on utilise une variable intermdiaire P: Dim P as integer P=J(1,2) For i=1 to 100000 R=i*P next i c'est plus rapide. De la mme manire si on utilise une proprit (toujours la mme) dans une boucle, on peut stocker sa valeur dans une variable car l'accs une variable simple est plus rapide que l'accs une proprit. Eviter aussi les Try Catch dans des grandes boucles.

Comment acclrer quand on utilise des 'String':


http://plasserre.developpez.com/v7-3.htm (8 sur 11) [01/03/2005 14:49:29]

Site

Exemple d'une opration coteuse en temps: Dim s As String = "bonjour";

s += "mon" + "ami";

En ralit le Framework va crer 3 chanes en mmoires avec toutes les pertes en mmoire et en temps que cela implique. Pour effectuer des oprations rptes sur les string, le framework dispose donc d'une classe spcialement conue et optimise pour a : System.Text.StringBuilder. Pour l'utiliser, rien de plus simple System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("bonjour"); sb.Append("mon ami"); string s = sb.ToString(); La mthode ToString de la classe StringBuilder renvoi la chane qu'utilise en interne l'instance de StringBuilder.

Comment acclrer l'affichage?:


Formater le plus vite possible: Pour mettre en forme des nombres et les afficher Format est puissant, mais si on peut utiliser ToString c'est plus rapide (ToString est aussi plus rapide que Cstr). ChrW utilis pour afficher un caractre(et AscW) sont plus rapide que Chr et Asc car il travaille directement sur les Unicodes. Prcharger les fentres et les donnes. Quand une fentre en ouvre une autre, le temps de chargement est long, l'utilisateur attend! Solution:
http://plasserre.developpez.com/v7-3.htm (9 sur 11) [01/03/2005 14:49:29]

Site

En dbut de programme prcharger les fentres en les rendant invisible. Lors de l'utilisation de ces fentres il suffira de les rendre visible, ce qui est plus rapide que de les charger. Certaines donnes (liste..)doivent tre charges une fois pour toute, le faire en dbut de programme, lors de l'affichage de la fentre 'Splach' par exemple(Celle qui contient une belle image et qui s'ouvre en premier) Afficher les modifications en une fois: A chaque fois que l'on fait une modification de proprit (couleur, taille..) ou de contenu (texte dans un TextBox) Vb affiche chaque modification . Si on modifie tout et que l'on re-affiche tout cela va plus vite. Rendre l'objet inactif, faire toutes les modifications puis ractiver. Pour le cas du TextBox ne pas faire. TextBox1.Text = TextBox1.Text + "Bonjour" TextBox1.Text = TextBox1.Text + ""Monsieur" faire: Dim T as string T = "Bonjour" T &= "Monsieur" TextBox1.Text = T Le texte est affich en une fois. Afficher en 2 fois: A l'inverse pour ne pas faire attendre un affichage trs long, afficher le dbut (l'utilisateur voit apparatre quelque chose lire) il est occup un temps, ce qui permet d'afficher le reste. Exemple : remplir une listBox avec un grand nombre d'lments long prparer: en afficher 5 rapidement puis calculer et afficher les autres. L'utilisateur l'impression que la ListBox se rempli immdiatement.

http://plasserre.developpez.com/v7-3.htm (10 sur 11) [01/03/2005 14:49:29]

Site

Pour faire patienter l'utilisateur lors d'une routine qui dure longtemps ?(et lui montrer que l'application n'est pas bloque):
q

Transformer le curseur en sablier en dbut de routine, remettre un curseur normal en fin de routine. Utiliser une ProgressBar (pour les chargements long par exemple)

Ce qui n'influence pas la rapidit du code:


Les boucles For , Do , While ont toutes une vitesse identique.

http://plasserre.developpez.com/v7-3.htm (11 sur 11) [01/03/2005 14:49:29]

Site

Site

Cours : VB.net

Chronomtrer 7.4 le code.


Je veux comparer 2 routines et savoir laquelle est la plus rapide.

Pour chronomtrer une vnement long.


Entendons par vnement long, plusieurs secondes ou minutes. Pas de problme, 2 solutions: - On utilise un Timer, (dans l'vnement Ticks qui survient toutes les secondes, une variable s'incrmente comptant les secondes).(4-5). - On peut utiliser l'heure Systme. Dim Debut, Fin As DateTime Dim Dure As TimeSpan Debut=Now ...Routine... Fin=Now Dure=Fin-Debut

Crer un compteur pour les temps trs court.


C'est le cas pour chronomtrer des routines dure bien infrieure une seconde. Cela semblait premire vue facile!!! J'ai en premier lieu utilis un Timer, (dans l'vnement
http://plasserre.developpez.com/v7-4.htm (1 sur 3) [01/03/2005 14:49:31]

Site

Ticks un compteur de temps s'incrmente) mais les intervalles de dclenchement semblent long et alatoire J'ai ensuite utilis l'heure systme: Mais 'Dure' est toujours gal au 0 pour les routines rapides car il semble que Now ne retourne pas les millisecondes ou les Ticks. J'ai trouv la solution chez Microsoft: Utilisation d'une routine de Kernel32 qui retourne la valeur d'un compteur (QueryPerformanceCounter). QueryPerformanceFrequency retourne le nombre de fois que le compteur tourne par seconde. Exemple: comparer 2 boucles, l'une contenant une affectation de variable tableau (b=a(2)) l'autre une affectation de variable simple (b=c), on gagne 33%. Declare Function QueryPerformanceCounter Lib "Kernel32" (ByRef X As Long) As Short Declare Function QueryPerformanceFrequency Lib "Kernel32" (ByRef X As Long) As Short

Private Sub ButtonGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonGo.Click Dim debut As Long Dim fin As Long Dim i As Long Dim a(5) As String Dim b As String Dim c As String Dim d1 As Long Dim d2 As Long '**********premire routine QueryPerformanceCounter(debut) For i = 0 To 10000 b = a(2) Next QueryPerformanceCounter(fin) d1 = fin - debut Label1.Text = d1.ToString '**********seconde routine QueryPerformanceCounter(debut) c = a(2) For i = 0 To 10000 b = c Next QueryPerformanceCounter(fin) d2 = fin - debut Label2.Text = d2.ToString Label5.Text = "Gain 2eme routine:" & 100 - Int(d2 / d1 * 100).ToString End Sub

http://plasserre.developpez.com/v7-4.htm (2 sur 3) [01/03/2005 14:49:31]

Site

C'est cette routine qui est utilise pour tudier l'optimisation du code. Elle n'est pas parfaite, car sujette variation: les valeurs sont diffrentes d'un essai l'autre en fonction des processus en cours ! Y a-t-il mieux?

http://plasserre.developpez.com/v7-4.htm (3 sur 3) [01/03/2005 14:49:31]

Site

Site

Cours : VB.net

Allons plus loin avec 8.1 les procdures.


On savait que les procdures pouvaient tre Public ou Prive. En fait une procdure peut tre:

Public Les procdures dclares avec le mot cl Public ont un accs public. Il n'existe aucune restriction quant l'accessibilit des procdures publiques.

Protected Dans un module Les procdures accs protg. de leur propre de classe: dclares avec le mot cl Protected ont un Elles sont accessibles seulement partir classe ou d'une classe drive.

Friend Les procdures dclares avec le mot cl Friend ont un accs ami. Elles sont accessibles partir du programme contenant leur dclaration et partir de n'importe quel autre endroit du mme assembly.

http://plasserre.developpez.com/v8-1.htm (1 sur 2) [01/03/2005 14:49:33]

Site

Protected Friend Les procdures dclares avec les mots cls Protected Friend ont l'union des accs ami et protg. Elles peuvent tre utilises par du code dans le mme assembly, de mme que dans les classes drives. L'accs Protected Friend peut tre spcifi uniquement pour les membres des classes.

Private Les procdures dclares avec le mot cl Private ont un accs priv. Elles ne sont accessibles qu' partir de leur contexte de dclaration, y compris partir des membres de types imbriqus, tels que des procdures.

http://plasserre.developpez.com/v8-1.htm (2 sur 2) [01/03/2005 14:49:33]

Site

Site

Cours : VB.net

Comprendre le code 8.2 cre par VB.


Comprendre le code gnr automatiquement par Vb quand on cre une formulaire ou un contrle.

Code gnr automatiquement lors de la cration d'un formulaire ou d'un contrle.


Une application 'Windows Forms' est principalement constitu de formulaires (ou fentre), de contrles et de leurs vnements. Effectivement, pendant la cration de l'interface utilisateur de votre application, vous crez gnralement une fentre contenant des contrles et des procdures vnements. Quand vous crer un nouveau projet 'Windows Forms' cela dessine un formulaire, une fentre vide et le code correspondant, Ajoutons y un bouton cela donne l'interface utilisateur suivante:

http://plasserre.developpez.com/v8-2.htm (1 sur 6) [01/03/2005 14:49:36]

Site

Comme on l'a vu, VB cre le code correspondant et dans ce code une Classe correspondant la fentre; cette classe drive de la Classe Form.

(On rappelle que la vritable fentre, l'objet instanc partir de cette classe) Dcortiquons le code:

sera

Vb cre une Class nomm Form1, elle est public (accessible partout) Public Class Form1 Cette Classe hrite des proprits de la Classe Form (celle ci est fournis par le Frameworks) Inherits System.Windows.Forms.Form

Ensuite il y a une rgion (partie du code que l'on peut

http://plasserre.developpez.com/v8-2.htm (2 sur 6) [01/03/2005 14:49:36]

Site

'contracter' et ne pas voir ou 'drouler'; Cette rgion contient :" Le Code gnr (automatiquement) par le Concepteur Windows Form ", si on le droule en cliquant sur le '+', on voit:

-Le constructeur de la fentre: la routine Sub New MyBase fait rfrence la classe de base de l'instance en cours d'une classe, MyBase.New 'construit' la Classe -Le destructeur Dispose de la fentre: la routine Sub

-Le crateur des contrles de la fentre par la procdure Sub InitializeComponent Elle est ncessaire pour crer les contrles et dfinir les proprits de ces contrles: Exemple : cration d'un label Me.Label1= NewSystem.Windows.forms.Label Modification d'une proprit:Me.Label.Text="Hello" Elle dfinie aussi les proprit du formulaire: Me.Name = "Form1"

Exemple d'un formulaire vide nomm Form1 Public Class Form1 Inherits System.Windows.Forms.Form #Region " Code gnr par le Concepteur Windows Form " Public Sub New() MyBase.New() 'Cet appel est requis par le Concepteur Windows Form. InitializeComponent() 'Ajoutez une initialisation quelconque aprs l'appel InitializeComponent() End Sub 'La mthode substitue Dispose du formulaire pour nettoyer la liste des composants. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then

http://plasserre.developpez.com/v8-2.htm (3 sur 6) [01/03/2005 14:49:36]

Site

components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Requis par le Concepteur Windows Form Private components As System.ComponentModel.IContainer 'REMARQUE : la procdure suivante est requise par le Concepteur Windows Form 'Elle peut tre modifie en utilisant le Concepteur Windows Form. 'Ne la modifiez pas en utilisant l'diteur de code. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(292, 266) Me.Name = "Form1" Me.Text = "Form1" End Sub #End Region End Class Si dans la fentre Design cela ajoute le code: on ajoute un bouton Button1

Cette ligne contenant WithEvents indique qu'il y a une gestion d'vnement sur les boutons. Friend WithEvents Button1 As System.Windows.Forms.Button

Cette ligne cre le bouton. Me.Button1 = New System.Windows.Forms.Button

Cette ligne le positionne: Me.Button1.Location = New System.Drawing.Point(56, 144) Cette ligne lui donne un nom. Me.Button1.Name = "Button1" Cette ligne determine sa taille Me.Button1.Size = New System.Drawing.Size(104, 24) Cette ligne indique ce qui est affich sur le bouton Me.Button1.Text = "Button1"

Cela donne: Private components As System.ComponentModel.IContainer Friend WithEvents Button1 As System.Windows.Forms.Button <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.Button1 = New System.Windows.Forms.Button

http://plasserre.developpez.com/v8-2.htm (4 sur 6) [01/03/2005 14:49:36]

Site

Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(56, 144) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(104, 24) Me.Button1.TabIndex = 0 Me.Button1.Text = "Button1"

Les procdures vnements correspondant au bouton sont automatiquement crer: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub

On constate qu'il y a une liaison entre la fentre Design et le code gnr; on pourrait modifier dans le code l'interface utilisateur. C'est dconseill d'aller trafiquer dans cette zone de "Code gnr par le Concepteur Windows Form ", il faut mieux faire des modifications dans la partie design et dans la fentre de proprit.

Substitution de procdures vnement:


Il est possible de substituer une mthode (utiliser sa propre mthode la place de la mthode normale qui existe normalement dans un contrle) Exemple crer un contrle simple affichant toujours 'Bonjour' Il faut crer une classe hritant des 'Control', dtourner sont vnement OnPaint ( avec Overides)qui survient quand le contrle se dessine pour simplement afficher 'Bonjour' Public Class ControleAffichantBonjour Inherits Control Overrides Protected Sub OnPaint ( e As PaintEventArgs ) e.Graphics.DrawString ("Bonjour", Font, nex SolidBrush(ForeColor) End Sub End Class

http://plasserre.developpez.com/v8-2.htm (5 sur 6) [01/03/2005 14:49:36]

Site

Cet exemple ne sert strictement rien!! Pour une fois!! Il est aussi possible de dtourner des vnements. Dans le chapitre 'Impression' il y a un bel exemple de cration de "lien" entre un objet printdocument et la routine vnement PrintPage (imprimer hello avec un printdocument) Dans le chapitre suivant on va utiliser ces connaissances pour, dans le code, crer soi-mme des contrles et leurs vnements.

http://plasserre.developpez.com/v8-2.htm (6 sur 6) [01/03/2005 14:49:36]

Cours VB Net

Site

Cours : VB.net

Crer des 8.3 contrles par code.


Dans le code, on peut crer soi-mme de toutes pices, des contrles et leurs vnements.

Crer par code des contrles.


Dans le code d'une procdure, il est possible de crer de toute pice un contrle, mais attention, il faut tout faire!! Crons le bouton. Dim Button1 = New Button

Modifions ses proprits Me.Button1.Location = New System.Drawing.Point(56, 144) Me.Button1.Name = "Button1" Me.Button1.Size = New System.Drawing.Size(104, 24) Me.Button1.TabIndex = 0 Me.Button1.Text = "Button1" Le bouton existe mais il faut l'ajouter la collection Controls de la fentre (Cette collection contient tous les contrles contenus dans la fentre): Me.Controls.Add(Button1) Le bouton existe mais pour le moment, il ne gre pas les

http://plasserre.developpez.com/v8-3.htm (1 sur 5) [01/03/2005 14:49:38]

Cours VB Net

vnements. Il faut inscrire le bouton dans une mthode de gestion d'vnements. En d'autres termes, Vb doit savoir quelle procdure vnement doit tre dclenches quand un vnement survient. Pour cela, il y a 2 mthodes:
q

Dclarer la variable avec le mot cl WithEvents ce qui permet ensuite d'utiliser le Handles du contrle dans la dclaration d'une Sub: Dclaration dans la partie dclaration du module(en haut) (WithEvents n'est pas accept dans une procdure): Private WithEvents Button1 As Button1 Remarque Button1 est accessible dans la totalit du module . Puis crire la sub vnement. Sub OnClique ( sender As Objet, EvArg As EventArgs) Handles Button1.Click End Sub Ainsi VB sait que pour l'vnement Button1.Click , il faut dclencher la Sub OnClique. Remarque: il pourrait y avoir plusieurs Handles sur une mme sub, donc des vnements diffrents sur des objets diffrents dclenchant la mme procdure.

Utiliser AddHandler Dclaration (possible dans une procdure): Dim Button1 As Button Puis crire la gestion de l'vnement.( L'vnement

http://plasserre.developpez.com/v8-3.htm (2 sur 5) [01/03/2005 14:49:38]

Cours VB Net

Button1.click doit dclencher la procdure dont l'adresse est BouttonClique) AddHandler Button1.Click AddressOf BouttonClique Enfin on crit la sub qui 'rcupre ' l'vnement: Private Sub BouttonClique (sender As Objet, evArgs As EventArgs) End Sub Ainsi VB sait que pour un vnement du Button1 , il faut dclencher la Sub ButtonClique

Exemple avec AddHandler:


Crons un TextBox nomm TB et une procdure dclenche par KeyUp de ce TextBox: Dans une procdure (Button1_Click par exemple): Je cre un TextBox nomm TB, je le positionne, je met dedans le texte 'ici une textbox'. Je l'ajoute aux Contrles du formulaire. Grce 'AddHandler', je lie l'vnement Keyup de cet objet TB la sub que j'ai cre :TextboxKeyup.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim TB As New System.Windows.Forms.TextBox TB.Location = New System.Drawing.Point(2, 2) TB.Text = "ici une textBox" Me.Controls.Add(TB) AddHandler TB.Keyup, AddressOf TextboxKeyup. End sub Sub TextboxKeyup.(ByVal sender As Object, ByVal e As KeyEventArgs) ... End Sub

http://plasserre.developpez.com/v8-3.htm (3 sur 5) [01/03/2005 14:49:38]

Cours VB Net

Si je cre un autre bouton TB2, j'ajoute de la mme manire AddHandler TB2.Click, AddressOf TextboxKeyup2, ainsi chaque vnement de chaque contrle ses propres routines vnement et en cliquant sur le bouton TB2 on dclenche bien TextboxKeyup2 Attention, la procdure TextboxKeyup doit recevoir imprativement les bons paramtres: un objet et un KeyEventArgs car ce sont les paramtres retourns par un KeyUp.

Autre exemple avec AddHandler mais avec 2 boutons:


Il est possible de crer plusieurs contrles ayant la mme procdure vnement: Exemple: Crons 2 boutons (BT1 et BT2) dclenchant une seule et mme procdures (BoutonClique). Dans ce cas, comment savoir sur quel bouton l'utilisateur cliqu ? En tte du module dclarons les boutons (Ils sont public): Public BT1 As New System.Windows.Forms.Button Public BT2 As New System.Windows.Forms.Button

Indiquons dans form_load par exemple la routine vnement commune (BoutonClique) grce a AddHandler. Form_Load BT1.Location = New System.Drawing.Point(2, 2) BT1.Text = "Bouton 1" Me.Controls.Add(BT1) BT2.Location = New System.Drawing.Point(100, 100) BT2.Text = "Bouton 2" Me.Controls.Add(BT2) AddHandler BT1.Click, AddressOf BoutonClique AddHandler BT2.Click, AddressOf BoutonClique End Sub

Si c'est le bouton 1 qui a t cliqu, afficher "button1" dans une TextBox: Sub BoutonClique(ByVal sender As Object, ByVal e As

http://plasserre.developpez.com/v8-3.htm (4 sur 5) [01/03/2005 14:49:38]

Cours VB Net

EventArgs) If sender Is BT1 Then TextBox1.Text = "button 1" ElseIf sender Is BT2 Then TextBox1.Text = "button 2" End If End Sub La ruse est que dterminer quel objet (quel bouton) dclench l'vnement, pour cela on utilise le premier paramtre, le sender; If sender Is BT1 Then : Si le sender est le bouton1..

Les dlgus:
Pour la petite histoire, nous crons un dlgu chaque fois que nous crons une procdure gestionnaire d'vnement avec le mot Handles ou avec AddHandler. En C on utilise des pointeurs de fonction , adresse en mmoire indiquant ou le logiciel doit sauter quand on appelle une fonction ou un vnement. En VB on parle de dlgu.

http://plasserre.developpez.com/v8-3.htm (5 sur 5) [01/03/2005 14:49:38]

Vous aimerez peut-être aussi