Académique Documents
Professionnel Documents
Culture Documents
Cours Vpnet
Cours Vpnet
Cours VB.net
Introduction.
Qui est l'auteur
Il s'agit d'un
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
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.
Cours Vb Net
3.3Mo V1 du 06/12/2004 334 pages (ncessite Acrobat Reader). Merci Alexandre Freire pour son aide
Voir les nouvelles pages ou modifications qui ne sont pas dans le pdf:
Variables 'object' Soyons Strict
Dmarrez le Cours.
ou
Allez au Sommaire
Qui suis-je?
Accueil Site
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?
Site
Site
Cours : VB.net
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
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
. (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.
Site
Acheter
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'.
Visual Basic
Site
par ailleurs). Dans Visual Studio il y a aussi Visual C#.. Tlchargement gratuit
L'alternative gratuite:
SharpEditor
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.
Site
WebMatrix
Site
tourne sur Windows Server 2003, Windows 2000, et Windows XP operating systems.
Merci
Cours VB.Net
Cours VB.NET
Dmarrer le cours Home Page Qui est l'auteur ? Lui envoyer un mail
Sommaire.
Les 'Objets.'
Environnement de dveloppement de Visual Studio 1d bis Environnement de dveloppement de SharpDevelop (alternative gratuite)
1-d
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
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
Cours VB.Net
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)
Autres exemples
E 4-1 Horloge numrique E 4-2
Cours VB.Net
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.
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.
Site
:.
Cours de
Dcouvrir et tlcharger le
La page de
Mdiwin : Trucs,
astuces pour les utilisateurs de ce logiciel de cabinet mdical.
vbintro
Site
Cours : VB.net
Les objets
0.1
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
vbintro
Class
-->
Objet
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"
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)
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 !
Dans une application Windows, il y a aussi des lignes de code utilisant des variables pour faire des calculs.
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.
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
F.BackColor de la fentre.
vbintro
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
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!
vbintro
d'un objet.
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.
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
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
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
Code manag
CObj
Concat
Configuration minimale pour faire du VB.Net
Const
Constructeur (structures)
Constructeur(Classe)
ContainsKey ControleBox Copy Copy(fichier) Cos Couleurs (constantes) Collections
Cours VB
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
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)
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
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
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.
vbintro
C'est pas original: le premier programme, dans tous les cours d'informatique, permet d'afficher 'Bonjour' (ou 'Hello Word').
q
Lutilisateur final, celui qui utilise le logiciel, voit une fentre avec un bouton, Si il appuie sur ce bouton il voit safficher Bonjour .
clique sur le bouton cela dclenche automatiquement un vnement. (Button1_Click), cet vnement contient du code qui affiche Bonjour .
q
Quand l'utilisateur
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.
vbintro
Il cre
une fentre :
Menu Projet, Ajouter un formulaire Windows, cliquer sur Windows Form, une fentre Form1 apparat.
Il ajoute
un bouton :
vbintro
Il clique
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.
correspondant
Il double-clique sur le bouton qu'il a dessin : Une fentre de conception de code souvre et il apparat :
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).
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:
vbintro
Comment excuter ce programme? Il est possible de tester immdiatement le programme en mode dboguage, sans quitter l'environnement de dveloppement:
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.
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 .
vbintro
Cours Vb Net
Site
Cours : VB.net
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 ':
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.
Cours Vb Net
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.
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.
Dtaillons:
On voit 3 parties:
q
Cours Vb Net
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
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.
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]
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.
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
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.
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:
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)
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 ()
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'.
formulaire)contenant les contrles (boutons, listes, zones de texte, cases cocher) Le code qui comprend :
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().
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.
Ils ont vocation fabriquer des objets, on verra cela plus loin (chapitre 5).
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.
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.
vbintro
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.
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!!
Site
Site
Cours VB.net
L'environnement
1.D
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
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'.
Site
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.
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.
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.)
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.
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
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).
.sln est le fichier solution. .vb sont tous les fichiers Visual Basic (Feuille module...)
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 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.
Site
-VB aide retrouver les paramtres d'une fonction: , VB affiche les paramtres possibles dans un cadre.
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
-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
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.
Site
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.
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).
Tlcharger le SDK
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]
Le Framework, le SDK et
On peut aussi installer:
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:
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]
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]
'MainForm' apparait.
Si l'on veut rajouter des fichiers notre projet faire : 'Fichier'-'Nouveau'-'Fichier' et catgorie VB.
Noter que le logiciel est francis (Si cela n'a pas t fait, le faire par le menu Tools, Options).
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]
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.
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.
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.)
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',
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.
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.
Si vous avez install Visual Studio.Net, Il est dans le rpertoire: C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\GuiDebug
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.
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
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.
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
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.
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).
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]
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.
Site
Site
Cours : VB.net
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"
- Faire des tests avec des structures de dcision: valuer des conditions des comparaisons et prendre des dcisions.
If A=1 Then...End If
Site
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"
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
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.
vbintro
Site
Cours : VB.net
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.
vbintro
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
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
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.
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
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
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...
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
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.
Tant que :
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
'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
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
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.
vbintro
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.
vbintro
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
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
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
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.
vbintro
FlagSortir =Faux
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.
vbintro
Site
Cours : VB.net
1.5L'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
vbintro
Si ncessaire l'expression, (l'lment) droite du signe = est value, calcule avant d'tre affecte la premire variable.
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.
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
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.
vbintro
Site
Cours : VB.net
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
vbintro
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.
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.
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:
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
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"
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)
Nom :
Contient :
vbintro
Byte Contient les nombres entiers de 0 255 (sans signe) Short Entier sur 16 bits (-32768 32768) (-2147483648
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.
vbintro
Variable entire:
Byte, Short, Integer, Long
Byte Contient les nombres entiers de 0 255 (sans signe) Short Entier sur 16 bits (-32768 32768) (-2147483648
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,
vbintro
Le type de donnes Byte est utilis pour contenir des donnes binaires (octet codant de 0 255) non sign.
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
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
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.
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.
vbintro
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)
vbintro
Objet 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:
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.
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,
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.
vbintro
Site
Cours VB.net
1.6.1
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
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"
A est la variable A
"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
",
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"
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)
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
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.
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)
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"
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 :
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
.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,
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"
.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.
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"
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 " "
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.
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"
vbintro
Dim revString As String revString = StrReverse(myString) Marrant l'exemple!! ' Retourne "DESSERTS"
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
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
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.
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:
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)) '
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.
vbintro
Site
Cours : VB.net
Integer
(entier)
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
vbintro
.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
R=Round(N) proche
On peut donner en second paramtre le nombre de digit: Math.Round(Valeur, 2)donne 2 dcimales aprs la virgule.
R=Floor(N) infrieur.
R=1
N=1.2 R=Max(2,3)
R=2
R=Min(2,3)
vbintro
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
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
vbintro
'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)
vbintro
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!!
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
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.
vbintro
Site
Cours : VB.net
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)
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.
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:
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"
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.
vbintro
Nom=S.Split(Separateur)
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
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.
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.
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.sort(Mois)
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
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)
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)
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"}
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
On insiste donc sur le fait d'un tableau est de type 'par rfrence' ( et pas ''par Valeur'), on y reviendra.
vbintro
vbintro
Site
Cours : VB.net
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.
vbintro
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.
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:
Attention le premier lment est ici l'lment 1 (l'index va de 1 Count); c'est hrit du VB6!!
q
La
cl
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 ArrayList = ArrayList.Repeat("A", 5) 'On cre une ArrayList de 5 lments contenant chacun rpte "A") "A" (on
'On affiche le
'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
vbintro
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)
vbintro
HashTable
comporte des couples cl-lment, des paires clvaleur.
H.Item(Cl) Retourne llment correspondant une cl. H.ContainsKey(Cl) est dans la table. Retourne True si la Cl
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.
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.
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)
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!!
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.
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, "!!!")
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
vbintro
une nom de rue 'stock' dans MonAdresse.Rue un nom de ville 'stock' dans MonAdresse.Ville
On peut aussi utiliser le mot cl With pour ne pas avoir rpter le nom de la variable (et cela va plus vite).
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)
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
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!!
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.
vbintro
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).
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
vbintro
Site
Site
Cours : VB.net
de variable
par
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
Site
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]
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
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
=> C1.Value=123 C2.Value=123 Modifier C2 a modifi C1 car elles pointent sur le mme endroit mmoire.
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?
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
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'
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=
Site
Site
Cours : VB.net
Les variables 'Objet'et les autres.
1.6.8
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"
Site
Dim
As String
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
vbintro
Site
Cours : VB.net
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
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
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:
vbintro
'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.
vbintro
MaVariable=10
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.
vbintro
vbintro
Site
Cours : VB.net
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
Chr$(9) = caractre de
Couleurs:
vbintro
On peut aussi utiliser les couleurs dfinies par VB System.Drawing.Color.Blue Pour le bleu
Math:
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
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
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 :
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'
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) .
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:
vbintro
Site
Site
Cours : VB.net
Addition :+
Dans le cas de variables numriques.
=> 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.
Site
Soustraction : -
B=C-D
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
Site
Puissance : ^
A=B^3
'A=B*B*B
Modulo :
Exemple
A est-il multiple de 3 ?
If A Mod 3 = 0 then
Concatnation : &
Cest une mise bout bout des chanes de caractres. Si A= "VISUAL" B= " "
Site
C= "BASIC"
Le signe + peut aussi tre utilis mais il est plutt rserv aux additions de variables numriques.
A&=B
est
Priorits :
Exemple
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
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)
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
En utilisant Option Compare Text en dbut de module, on ne diffrencie plus la casse: "A" devient gal "a".
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 :
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.
Site
vbintro
Site
Cours : VB.net
Switch
IIF
If then
vbintro
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".
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.
vbintro
If condition then .. effectu si condition vraie .. Else ..effectu si condition fausse .. 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:
vbintro
..
end if
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
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.
Select Case N Case 1 MsgBox "Lundi" Case 2 MsgBox "Mardi" Case 3 MsgBox "Mercredi"
vbintro
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
Les boucles sont trs utilises pour parcourir une plage de valeur qui permet par exemple de
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
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
vbintro
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)
vbintro
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.
Dim Counter As Integer = 0 While Counter < 20 ' Test la valeur du compteur. Counter += 1 ' Incrmente le compteur. End While
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")
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")
Site
Site
Cours : VB.net
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)
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()
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.
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
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:
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.
Site
Site
Cours : VB.net
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)
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.
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).
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.
Site
Site
Cours : VB.net
Site
Site
Site
Cours : VB.net
1.15 Rcursivit.
Une procdure est rcursive si elle peut s'appeler elle mme.
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.
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)
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)
Site
Factorielle (3)retourne
'3*factorielle(2) '4*factorielle(3)
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.
Site
Site
Cours : VB.net
1.19 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 ..
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
Cours VB NET
Site
Cours : VB.net
d'objet, de
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).
Cours VB NET
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
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 classes prdfinies du Framework. Ces classes de bases sont regroupes en bibliothques sous la dnomination Espace de noms et font partie:
q
Il existe ainsi de manire gnrale des classes pour les formulaires Windows (WindowsForms), pour le Web (WebForms),
pour
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
Comme ces Classes sont charges au dpart cela permet demble de crer des feuilles, des contrles..(qui sont dans les WindowsForms et les Controls).
Imports:
espaces de noms ne sont pas chargs, lespace de noms Math nest pas charg par
Certains
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.
Cours VB NET
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
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.
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.
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.
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.
Cours VB NET
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.
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.
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
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.
Site
Site
Cours : VB.net
Exemples:
E 1.1
Petites routines.
trs simples ne
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.
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
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 ...
Site
Site
Cours : VB.net
Exemples:
E 1.2
Calcul de l'hypotnuse d'un triangle rectangle Calcul de factorielle (avec ou sans rcursivit) Un nombre est-il premier?
Factorielle.
On rappelle que N! (factorielle N)= 1*2*3*...*(N-2)*(N1)*N
Site
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.
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
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)
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.
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
Site
Site
Cours : VB.net
Exemples:
E 1.3
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
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
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).
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"
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
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.
Site
Site
Cours : VB.net
Exemples:
E 1.4
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.
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).
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.
vbintro
Site
Cours : VB.net
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.
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:
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.)
: 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
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 :
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"
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.
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
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.
vbintro
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.
vbintro
Site
Cours : VB.net
Les Forms.
3.2
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.
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.
vbintro
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
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:
Dim f As New Form2() La nouvelle instance f de la Class 'form2' est un objet fentre.
vbintro
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.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.
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
vbintro
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.
Pour dfinir par code un formulaire en tant que formulaire d'avant-plan d'une application.
q
Me.TopMost = True
vbintro
Site
Site
Cours : VB.net
'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.
Site
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.
Site
Site
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.
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:
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
Site
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
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
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'
Site
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.
Site
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.
Site
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
Site
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.
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.
Site
Site
Cours : VB.net
Les Labels
3.5
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?
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..
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.
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():
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)
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
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.
Site
Site
Cours : VB.net
Les Cases cocher
3.6
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.
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
Site
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).
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
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
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.
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.
For i = 1 To 100
ListBox1.Items.Add(i.ToString)
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 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
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).
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.
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
Site
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.
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
(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)
Site
Comment
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)
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)
Site
Site
Cours : VB.net
Les fentres toutes faites.
3.8
Ces
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.
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
Site
Retour de la fonction : Retourne une constante qui indique quel bouton t press. DialogResult.Yes DialogResult.No DialogResult.Cancel DialogResult.Retry DialogResult.Ok
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
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:
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.
Site
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
end if
donne le nom du
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
Site
Site
Cours : VB.net
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
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).
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.
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:
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
Site
Site
Cours : VB.net
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.
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
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.
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 ..
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.
Site
Site
Cours : VB.net
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
Site
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
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.
|
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.
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.
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
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()
Site
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"
Site
Site
Cours : VB.net
Image.
3.14
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.
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 est possible de dfinir une couleur comme 'transparente': voir le page sur les boutons.
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
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.
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
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
Site
Site
Cours : VB.net
calcul de l'IMC.
3.30
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:
Site
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"
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.
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).
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)
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) ...
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
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).
Site
Site
Cours : VB.net
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
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.
Site
Site
Cours : VB.net
Exemples:
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=""
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
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
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.
Site
Site
Cours : VB.net
Exemples:
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
Site
For P = 1 To TotPmts ' Total all interest. IntPmt = IPmt(APR / 12, P, NPerVal, -PVal, Fval, PayType) Total = Total + IntPmt Next Period
Site
Site
Cours : VB.net
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
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,
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.
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.
Site
Site
Cours : VB.net
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
Site
Elle contient du code gnr automatiquement par le concepteur Windows Forms et les procdures lies aux vnements. Dessinez dans Form2 les contrles ncessaires.
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)
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.
Site
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.
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
Si le formulaire a t instanc dans un module de Classe (avec Public), les mthodes et proprits de ce formulaire seront accessibles partout.
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
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
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
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:
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.
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.
Site
Site
Cours : VB.net
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:
Site
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.
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
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.
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.
Site
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.
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.
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.
Site
Site
Cours : VB.net
Travailler sur une fentre multi document.
(Multi Document Interface)
4.4
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) .
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.
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.
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
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.
Site
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.
Site
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)
Site
Site
Cours : VB.net
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.
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.
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)
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.
Site
M MM MMM
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
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
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)
Site
date. Answer=today.AddDay(36)
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
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.
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)
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
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
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
Site
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.
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:
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..
C- Avec certains objets, on grent automatiquement les lectures critures sur disque.
Comme avec le RichTextBox par exemple.
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
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
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.
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)
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
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
Site
SW.WriteLine ("Monsieur")
Pour lire
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:
Site
SR.Close()
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).
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.
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)
Site
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 ';'
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.
Site
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.
Public Structure Adresse <VBFixedString(20)>Dim Nom <VBFixedString(20)>Dim Rue <VBFixedString(20)>Dim Ville End Structure
'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 )
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:
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
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.
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!!!
Site
Site
Cours : VB.net
Travailler sur les rpertoires.
4.7
Classe
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
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
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]
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
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)
Site
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.
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
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
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)
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.
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.
. (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.
Site
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
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
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
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
Site
00000456
14%
Affiche
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
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.
Site
Site
Cours VB.net
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)
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
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.
Site
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")
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")
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.
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'.
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
Site
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
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
Site
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
pd et la routine vnement
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()).
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
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
Site
End Sub
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
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)
'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.
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
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
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)
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
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
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
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.
un objet
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
Site
'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.
Site
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
Site
'cela
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.
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
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.
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
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)
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)
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
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
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)
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
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)
Site
Site
Cours VB.net
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.
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:
Site
de HelpProvider).
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.
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
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).
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.
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.
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.
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")
Site
Site
Cours VB.net
4.14
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
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.
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.
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.
Site
IDTRYAGAIN IDYES
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.
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 :
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.
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.
' 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
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
Site
Le dernier paramtre a pour valeur= 13369376= SRCCOPY = &HCC0020 et correspond 'Copies the source bitmap to destination bitmap'.
Site
Site
Cours VB.net
Drag and Drop.
(Drag ans Drop) peut tre
4.15
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.
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
Site
'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
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..
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
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
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.
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
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.
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.
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(Variable)
q
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
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
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.
Site
Site
Cours : VB.net
1. l'ensemble du systme d'exploitation. 2. une collection d'objets utilisables pour crer des
programmes.
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
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
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)
Site
Site
Site
Cours : VB.net
Le dveloppeur
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:
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.
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..
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
Site
Assemblyinfo.vb, dans la fentre principale s'ouvre permettant d'avoir accs certaines donnes.
Site
Site
Cours : VB.net
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
Site
Site
Site
Cours : VB.net
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
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:
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 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
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, 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.
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.
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.
Site
Pour la suite de ce chapitre, nous sommes DANS la Classe de l'objet ( et non dans l'application utilisatrice).
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.)
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.
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
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.
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
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
Site
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
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
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.
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.
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)
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.
Site
Site
Site
Cours : VB.net
Les interfaces.
5.4
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.
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.
Site
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.
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.
Site
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.
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.
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
Site
Site
Cours : VB.net
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 ,
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
Pour structurer le programme, on utilise, en plus des modules de formulaire, des 'Modules Standards' contenant les divers fonctions.
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
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
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.
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.
Site
Site
Cours : VB.net
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.
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).
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)
Champ Prnom
M. Mme M.
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. )
Champ Texte
Champ Courrier
Site
1 2 1
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.
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.
Site
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'
Site
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)
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.
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
N M
Relation plusieurs plusieurs. Plusieurs enregistrements de la premire table peuvent tre lis plusieurs de la seconde table et vice versa.
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
Code CIP'
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
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
Code CIP'
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
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.
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.
Site
Effacer un enregistrement
(Delete)
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.
Site
Site
Cours : VB.net
ADO.NET
6.2
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.
Site
Charger les rfrences des drivers (les Dll) Importer les espaces de nom.
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
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
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).
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.
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.
Site
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
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
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:
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
Cela signifie: dans la table Patient extraire les champs 'nom' On obtient:
Site
SELECT
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
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
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.
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.
Datenais>= #01/01/1950#
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"
Mme signification que le prcdent mais en utilisant BETWEN AND qui est plus performant.
Prenom IN ('Luc' ,
Cela signifie qu'il faut extraire les enregistrements dont le prnom est Luc, Pierre ou Paul .
SELECT
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
Site
SELECT
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.
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.
Site
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.
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.
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
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
Site
Site
Cours : VB.net
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.
Site
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 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()
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.
Site
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()
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.
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
Site
Site
Site
Cours : VB.net
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.
Site
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
Site
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)
Site
Site
Cours : VB.net
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:
Champ Prnom
M. Mme M.
Site
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
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+++
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")
Site
Les lignes, colonnes, nom des champs, ascenseurs... sont cres automatiquement!! Gnial. On peut aussi remplir le DataSet avec:
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.)
Site
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 ...
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 :
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
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.
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
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:
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".
Site
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 :
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
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)
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..
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.
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 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.
Site
Site
Cours : VB.net
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.
Site
Elle peut tre ncessaire dans certains programmes, les 3 niveaux sont:
q 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
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
Site
q
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.
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,
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
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
'on utilise
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.
Site
Site
Site
Cours : VB.net
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
Site
- Nine Language Performance Round-up: Benchmarking Math & File I/O [OsNews.com] Article publier sur www.DotNet-fr.org
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.
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
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.
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
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 :AndAlso et ElseOr AndAlso et ElseOr sont plus rapide que And et Or.
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.
Site
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.
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.
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)
Site
Site
Cours : VB.net
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
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?
Site
Site
Cours : VB.net
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.
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.
Site
Site
Cours : VB.net
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
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
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 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
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.
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.
Cours VB Net
Site
Cours : VB.net
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
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
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
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
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.
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
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.