SUPPORT VISUAL BASIC
STUDIO 2008
TABLE DES MATIERES
1. INTRODUCTION ... 4
2. ELEMENTS D'UN PROGRAMME ... 5
2.1. LES COMMANDES ET FONCTIONS ... 5
2.2. LES OBJETS : METHODES ET EVENEMENTS ... 5
2.2.1. Propriétés ... 5 2.2.2. Méthodes ... 6 2.2.3. Evénements ... 6 2.3. METHODOLOGIE DE TRAVAIL ... 6 2.4. COMPOSITION D'UN PROGRAMME ... 6 3. LES VARIABLES ... 8 3.1. LES NOMS ... 8 3.2. PORTEE ... 8 3.3. LES TYPES ... 8 3.3.1. Type numérique ... 9 3.3.2. Type décimaux ... 9 3.3.3. Type caractères ... 9 3.3.4. Type Boolean ... 9 3.3.5. Type Date ... 9 3.3.6. Type nullable... 10 3.4. CONVERSION DE TYPE ... 10 3.5. FORMATAGE ... 11 3.6. CHAINE DE CARACTERES ... 11 3.7. INFERENCE DE TYPE... 12 3.8. LES CONSTANTES ... 12 3.9. VARIABLES TABLEAUX ... 12 3.10. LES STRUCTURES ... 13 4. ENTREES/SORTIES DE DONNEES ... 15 4.1. SORTIES ... 15 4.2. ENTREES : ... 16 5. CALCULS ET COMPARAISONS ... 17 5.1. LES OPERATEURS DE COMPARAISON ... 17 5.2. LES CALCULS ... 17 6. BOUCLE ET TEST ... 18 6.1. GOTO ... 18 6.2. IF….THEN ... 18 6.3. SELECT….CASE ... 18 6.4. FOR…NEXT ... 19 6.5. DO…LOOP ... 20 6.6. FOR EACH ... NEXT ... 20 6.7. WITH …END WITH ... 20 6.8. USING …END USING ... 21 7. LES ERREURS ... 22 7.1. DEBOGAGE ... 22
7.2. GESTION DES ERREURS ... 22
8. APPLICATION WINDOWS ... 24
8.1. INTERFACE SDI ... 24
8.2. INTERFACE MDI ... 24
8.3. LES EVENEMENTS ... 26
8.3.1. Evénements clavier ... 26
8.3.2. Les événements souris ... 27
9.1. BOITE DE DIALOGUE DE WINDOWS ... 29
9.1.1. Ouvrir ... 29
9.1.2. Choix des dossiers ... 29
9.1.3. Choix d'une couleur ... 29
9.1.4. Choix d'une police... 30
9.2. CONTROLE D'AFFICHAGE ... 30 9.2.1. Le label ... 30 9.2.2. LinkLabel ... 30 9.2.3. Le contrôle ToolTip ... 31 9.2.4. Le contrôle ErrorProvider ... 31 9.2.5. Le contrôle progressbar ... 31 9.3. EDITION DE TEXTE ... 32 9.3.1. Le contrôle TextBox ... 32 9.3.2. Le contrôle MaskedTextBox ... 32 9.3.3. Le contrôle RichTextBox ... 33 9.4. DECLENCHEMENT D'ACTION ... 33 9.4.1. Button ... 33 9.4.2. MenuStrip ... 33 9.4.3. ContextMenuStrip ... 34 9.4.4. Toolstrip ... 35 9.5. CONTROLES DE SELECTION ... 35 9.5.1. Checkbox ... 35 9.5.2. RadioButton ... 37 9.5.3. Groupbox ... 37 9.5.4. Listbox ... 38
9.5.5. Les listes déroulantes ... Erreur ! Signet non défini. 9.6. LE TIMER ... 41
9.7. CREATION DE MENU: ... ERREUR !SIGNET NON DEFINI. 9.8. L’OBJET SCREEN : ... ERREUR !SIGNET NON DEFINI. 9.9. L’OBJET APP : ... ERREUR !SIGNET NON DEFINI. 10. LES FEUILLES ... ERREUR ! SIGNET NON DEFINI. 10.1. LA GESTION : ... ERREUR !SIGNET NON DEFINI. 10.2. APPLICATION MDI(MULTIPLE DOCUMENT INTERFACE) : ... ERREUR !SIGNET NON DEFINI. 10.3. PROPRIETE D’UNE FEUILLE : ... ERREUR !SIGNET NON DEFINI. 10.4. LES EVENEMENTS D’UNE FEUILLE : ... ERREUR !SIGNET NON DEFINI. 10.5. LES METHODES D’UNE FEUILLE : ... ERREUR !SIGNET NON DEFINI. 11. LES IMPRESSIONS : ... ERREUR ! SIGNET NON DEFINI. 11.1. LES PROPRIETES : ... ERREUR !SIGNET NON DEFINI. 11.2. LES METHODES : ... ERREUR !SIGNET NON DEFINI. 12. MODULES ET PROCEDURES ... ERREUR ! SIGNET NON DEFINI. 12.1. MODULES : ... ERREUR !SIGNET NON DEFINI. 12.2. LES PROCEDURES : ... ERREUR !SIGNET NON DEFINI. 12.3. PROCEDURES FUNCTION :... ERREUR !SIGNET NON DEFINI. 12.4. PROCEDURES SUB : ... ERREUR !SIGNET NON DEFINI. 13. COLLECTION : ... ERREUR ! SIGNET NON DEFINI. 14. FICHIERS ... ERREUR ! SIGNET NON DEFINI. 14.1. L'ACCES SEQUENTIEL ... ERREUR !SIGNET NON DEFINI. 14.1.1. L'ouverture ... 50
14.1.2. L'écriture ... 51
14.2. L'ACCES DIRECT ... ERREUR !SIGNET NON DEFINI. 14.2.1. Définition de la structure ... Erreur ! Signet non défini. 14.2.2. Ouverture ... Erreur ! Signet non défini. 14.2.3. La lecture ... Erreur ! Signet non défini. 14.2.4. L'écriture ... Erreur ! Signet non défini. 14.3. L'ACCES BINAIRE ... ERREUR !SIGNET NON DEFINI. 14.4. I D ... 51
15.1. LES DIFFERENTS OBJETS ... ERREUR !SIGNET NON DEFINI.
15.2. CONTROLES "DONNEES OU "DATA" ... ERREUR !SIGNET NON DEFINI. 16. LIAISON DDE-OLE ... ERREUR ! SIGNET NON DEFINI.
16.1. LIAISON DDE ... ERREUR !SIGNET NON DEFINI.
1.
INTRODUCTION
Visual Basic Studio n’est pas une évolution de Visual Basic 6.0 mais vraiment une nouvelle technologie de développement d’applications. Vous pouvez faire :
• Des applications Windows classiques • Des applications Web
• Des services de Windows • Des services Web.
Tout ceci est possible grâce à FRAMEWORK .NET qui prend en charge l’intégralité d’une application. Le Framework est hébergé par le système d’exploitation et au moment où j’ai ce support la dernière version est la 3.5. Vous pouvez aussi faire fonctionner une plateforme .NET sur des systèmes Linux, Mac OS, Sun,…
De manière simple, le Framework est composé de deux éléments principaux :
• Common Language Runtime permet de créer une machine virtuelle pour prendre en charge les instructions au fur et à mesure des besoins.
• Base Class Library qui met à votre disposition un ensemble d’outils pour votre future application. Ces outils sont disponibles sous forme de classe. Une classe est organisée de manière hiérarchique.
A bon gout il y a un nombre trop important de classe mais au moins on a le choix.
Mon cours sera axé sur la création d’interface Windows et sur l’accès aux bases de données dont cela concernera la classe system.windows et system.data.
2.
ELEMENTS D'UN PROGRAMME
2.1. Les commandes et fonctionsLes commandes sont des instructions connues de VB avec lesquelles vous lui passez des ordres. On parle de "mots-clé".
Les fonctions servent à calculer des nombres ou à manipuler du texte et retournent un résultat.
Vous pouvez combiner commandes et fonctions.
Par exemple vous demandez à VB : "d'afficher le calcul racine carré de 4"
Dans VB toute portion de code doit être contenue dans un module ou une classe.
Personnellement je vais utiliser la console qui permet de faire des petites procédures afin de vous faire découvrir les bases de vb sans passer par des manipulations longues et fastidieuses.
2.2. Les objets : méthodes et événements
Avec VB, la gestion des menus et des boîtes de dialogues sont laissées à Windows.
Ainsi les manipulations standard de Windows sont utilisables avec les mêmes touches et les mêmes actions souris.
La première action avec VB est de construire une feuille de travail (form) pour le dialogue avec l'utilisateur. Chaque chose que vous allez placer sur cette feuille de travail, par exemple, un texte, un cadre, une zone de saisie, …sera un objet.
Une feuille de travail est elle-même un objet.
De plus, chaque objet dispose de propriétés, de méthodes et d'événement. Chaque objet porte un nom pour l'identifier.
2.2.1. Propriétés
Les propriétés sont par exemple, la couleur ou la légende des objets.
Vous pouvez les initialiser à la création via la boîte à outils, mais aussi les modifier par programme. Pour modifier par programme vous pouvez donner le nom de l'objet, ainsi que la désignation de la propriété.
Par exemple vous pouvez changer le nom de la feuille de travail qui s'intitule "Form1" en "Adresse".
La propriété relative au nom s'appelle "Caption". Cela nous amène à la syntaxe suivante :
Form1.Caption = "Adresse" De manière plus générale :
NomObjet.Nompriété=" " fonction commande
2.2.2. Méthodes
Une commande est une instruction pour un processus interne : traitement de variable, test, boucle,…
Une méthode est toujours un verbe en français.
Une méthode est une instruction relative à un processus au système tel que le traitement des entrées, des sorties.
En résumé, toutes les manipulations d'objet que ce soit des fenêtres, des contrôles, des imprimantes, sont des méthodes. On peut résumer ceci en disant que toutes les instructions adressées à un objet bien défini sont des méthodes.
2.2.3. Evénements
Le plus important dans un programme VB, se sont les actions de l'utilisateur. Par exemple lorsqu'il clique sur un bouton de commande "OK" ou bien lorsqu'il sélectionne une commande d'un menu.
Pour que le programme ne passe pas tout son temps à vérifier quel est l'objet qui a été activé ou non, VB répartit lui-même les tâches ou déclenche la routine associés à chaque action.
Ses tâches sont appelées des "procédures évènementielles".
Chaque évènement à un nom, mais cela ne suffit pas. En effet, le nom de l'objet dans lequel l'événement a été crée, ainsi que la désignation de l'évènement en lui-même se combinent pour donner un nom de procédure. Par exemple, si vous cliquez sur une fenêtre intitulée "Adresse", vous déclenchez automatiquement la procédure :
Adresse_load() Nom objet_nom événement
2.3. Méthodologie de travail
Voici les différentes étapes à suivre :
1) Création de la boîte de dialogue, placement des contrôles, des menus.
2) Affectation des propriétés aux objets de cette feuille de travail. 3) Analyse des événements auxquels vous devez réagir.
4) Appeler la procédure événementielle associée dans l’éditeur. 5) Programmation de la procédure relative à l’événement.
2.4. Composition d'un programme
Attention un projet fait partie d'une solution qui portera un nom et sera votre dossier plus d'autres petites choses comme un fichier vbproj et vbproj.user. Dans une solution, vous pouvez trouver différents projets.
Votre solution se gère avec l'explorateur de solution dont le raccourci est Ctrl-R.
Vous pouvez aussi créer des dossiers dans votre solution afin d'organiser vos différents projets.
Par exemple nous allons créer une solution "formation" avec un projet "base" de type console ou code.
Vous obtenez l'écran suivant :
Dans un module (module1) votre trouverez une procédure (Main) et observez l'explorateur de solutions.
De plus une solution doit se paramétrer avec le menu Projet\Propriété de formation et notamment l'objet de démarrage :
3.
LES VARIABLES
3.1. Les noms
Une variable est définie par son nom et son symbole. Le nom peut être un mot d’une longueur de 255 caractères, mais il doit commencer par une lettre suivie de lettre, chiffres et -. Attention au mot-clé.
Minuscule et majuscule n’ont pas d‘importance mais plus pratique pour l'aide à la saisie.
Vous n'êtes pas obliger de les déclarer sauf si il y a l'instruction Options Explicite dans le module général. A éviter par principe.
3.2. Portée
Toute variable possède une certaine durée de vie, ce que l’on appelle sa portée. Celle-ci dépend de deux éléments : le mode et l’emplacement de ces variables :
• Si vous déclarez une variable à l’aide de l’instruction Dim sa partie est limitée à cette procédure. On dit que la variable est locale.
• Si vous déclarez une variable à l’aide de Dim dans la section Générale, elle est limitée au module dans toutes les procédures. On peut utiliser l’instruction Private à la place de Dim
• Si vous déclarez une variable toujours dans la section Générale en utilisant le mot clé Public à la place de Dim, la variable est accessible dans toutes les feuilles et tous les modules de l’application. On dit que la variable est globale.
L’instruction Static à la place de Dim permet de garder la valeur précédente. On peut aussi placer la ligne Option Explicit dans la partie générale.
3.3. Les types
Toutes les données qui surgissent en cours de programme doivent être stockées en mémoire par l’intermédiaire d’une variable, mais il faut identifier la nature de la valeur stockée.
Pour cela vous devez déclarer votre variable au début de votre programme. Voici les différents types de variables en distinguant les numériques entiers, les décimaux, les caractères, les booleans, les dates, les nullables.
Attention, aujourd'hui la philosophie est de ne pas mettre l'information donc quand vous déclarez une variable de type entier et que vous mettez du texte il n'y plus de message d'erreur.
3.3.1. Type numérique Sbyte -128 +127 Short -32 768 + 32 767 Integer - 2 147 483 648 2 147 483 647 Long - 9,22 10^38 9,22 10^38 3.3.2. Type décimaux Single -3.40282347 10^38 +3.40282347 10^38 Double -1.79769 10^308 -1.79769 10^308 Decimal - 7.92281 10^27 7.92281 10^27 3.3.3. Type caractères
Il existe le type Char pour stocker un caractère de type unicode utilisant deux octets dont le dernier pour le pays et l'alphabet du pays.
Il existe le type String pour stocker 2 147 483 648 caractères.
3.3.4. Type Boolean
Permet d'avoir deux valeurs possibles : True ou False, ou -1 et 0 respectivement.
3.3.5. Type Date
3.3.6. Type nullable
Le type nullable permet de définir une variable qui n'a pas de valeur bien définie comme une récupération d'information venant d'une base de données. Il suffit de mettre le symbole ? après le nom ou le type
Uniquement pour les types numériques ou structure.
3.4. Conversion de type
Voici des exemples courants
Val() Convertit une chaîne en un nombre
Str() Convertit une valeur numérique en une chaîne
Cstr() Convertit une valeur numérique en une chaîne mais le point devient une virgule suivant le panneau de configuration
CInt() Convertir une chaîne de caractères en entier Clng() Convertir une chaîne de caractères en entier long CSng() Convertir une chaîne de caractères en réel simple CDbl() Convertir une chaîne de caractères en réel double CCur() Convertir une chaîne de caractères en réel
3.5. Formatage
Vous pouvez formater par l'instruction format. Voici des exemples :
3.6. Chaîne de caractères
De manière générale une fonction chaîne de caractère permet de manipuler, de découper un morceau de texte.
+ ou & Concaténation
Instr() Recherche des caractères dans une chaîne INSTR(Depuis, chaine,Cherche)
Left() Extraire la partie gauche d’une chaîne Left(chaine,longueur)
Len() Renvoi la longueur d’une chaîne Longueur=Len(chaine)
Mid() Extraire une portion de chaîne Mid(chaine,Depuis,Longueur)
Right() Extraire la partie droite d’une chaine Right(chaine,longueur)
LTrim() Supprime les espaces à gauche LTrim(chaine)
RTrim() Supprime les espaces à droite RTrim(chaine)
LCase() Convertit une chaîne en minuscules Lcase(chaine)
Ucase() Convertit une chaîne en majuscules Ucase(chaine)
Space() Génère des espaces Space(longueur)
3.7. Inférence de type
Le compilateur peut déterminer le type de variable à utiliser au moment de son affectation. Dans ce cas vous ne devez pas préciser de type et vous pouvez aussi lui affecter une valeur.
3.8. Les constantes
La définition d'une constante se fait par l'instruction Const.
Il existe aussi des constantes prédéfinie dans vb comme vbCR (=chr(13)), vbCRLf (chr(13) et saut de ligne),…
3.9. Variables tableaux
Un tableau n'est rien d'autre qu'un nombre prédéfini de variables de même nature rangées sans un nom commun.
Pour définir :
Dim NomTableau (nombre ligne, nombre colonne) As Type
Dim Tableau (100)
Doit être fait dans la partie Déclaration
Si vous utilisez la commande Redim au lieu de Dim, le tableau sera détruit à la sortie de la procédure. Elle permet aussi de redimensionner le tableau en effaçant ou non le tableau. Par exemple ReDim Preserve(conserve le contenu) Tableau (200).
Pour avoir un tableau disponible partout dans un programme, utilisé : Global au lieu de Dim
Pour identifier un type pour un tableau on peut aussi lui donner un symbole. Par exemple Dim Tableau(100) crée un tableau de 100 lignes de caractères. Pour identifier les limites d'un tableau, on utilise length et rank pour savoir
sa dimension.
Pour rechercher dans un tableau on utilise indexof et pour le tri sort
Voici un exemple de manipulation de tableau :
3.10. Les structures
Cela vous permet de combiner des données de différents types pour former un nouveau type composite comme une table par exemple.
Vous devez d'abord déclarer votre structure entre les mots clés Structure … End Structure et après vous pouvez les utiliser.
4.
ENTREES/SORTIES DE DONNEES
4.1. SortiesMais la meilleure façon pour le faire est d'utiliser une boite de message. Une boite de message permet également de fournir une réponse.
Syntaxe :
MsgBox(Texte Message,Numéro,Titre)
Le numéro est une addition de différentes valeurs dont voici la signification
Première valeur :
Deuxième valeur :
Troisième valeur :
Exemple :
MsgBox ("Vous avez appris quelques choses",36,"Question")
Bouton Valeur
OK (par défaut) 0
Ok et Annuler 1
Abandon, Répéter, Ignorer 2
Oui, Non, Annuler 3
Oui, Non 4 Répéter et Annuler 5 Icones Valeur Panneau Stop 16 Point d'interrogation 32 Point d'exclamation 48 Information 64
Bouton par défaut Valeur
1er Bouton 0
2ème Bouton 256
3ème Bouton 512
Attention quand vous cliquez sur un bouton, cette instruction renvoie la valeur du bouton cliqué à condition de transformer votre instruction en fonction. Pour cela vous devez stocker la réponse dans une variable.
Voici la valeur des boutons :
Ok=1, Annuler=2, Abandon=3, Répéter=4, Ignorer=5, Oui=6, Non=7
4.2. Entrées :
Permet de saisir des données de l'utilisateur. On utilise également une boite que l'on appelle Boite de dialogue. Attention l'information saisie par l'utilisateur sera toujours du texte.
Syntaxe :
Nomvariable = InputBox (message, titre, défaut ) Exemple :
Reponse = InputBox("SVP, Entrez votre nom") Msgbox Reponse
Vous pouvez aussi utiliser naturellement une zone de saisie dans un objet Forms.
5.
CALCULS ET COMPARAISONS
5.1. Les opérateurs de comparaison> Supérieur
< Inférieur
<> Différent
>= Supérieur ou égal
<= Inférieur ou égal
Like utilisation de caractère générique
Not Négation
And Et logique
OR Ou logique
XOR Ou exclusif
5.2. Les calculs
Bien sûr vous trouvez les opérateurs standards qui sont :
+ Addition - Soustraction * Multiplication / Division ^ Puissance \ Division entière
MOD Donne le reste de la division
& Concaténation de chaînes
Mais aussi les fonctions mathématique suivante :
Sin(x) Sinus de x
Cos(x) Cosinus de x
Ton(x) Tangente de x
Atn(x) Arc tangente de x
Sqr(x) Racine Carrée de x
6.
BOUCLE ET TEST
6.1. GoToPermet de dérouter le cours de normal d'un programme à une étiquette. A éviter absolument car cela peut provoquer des erreurs d'exécution suivant le modèle de votre microprocesseur.
Syntaxe :
Goto Etiquette 'Instructions Etiquette 'Instructions
On peut remplacer par un Goto qui permet d'accéder à une série d'étiquettes en fonction de la valeur d'une certaine expression.
Syntaxe :
On Test Goto Suite1, Suite2, Suite3
6.2. If….Then
Permet de renvoyer à une suite d'instructions en fonction d'une condition. Syntaxe :
If Condition Then
'Instructions si condition est vraie
Else
'Instructions si condition est fausse
End If
Else n'est pas obligatoire si vous avez qu'une seule instruction. If Condition Then instruction1
Il existe une variante : IIF(condition, valeur si vrai, valeur si faux)
Vous pouvez aussi ajouter ElseIf Condition2 Then, mais cela devient lourd et il est préférable de faire une instruction Select Case.
6.3. Select….case
C'est une structure qui permet de faire des tests comme la structure IF. Si vous devez écrire une série de conditions, il est préférable de faire appel à Select Case plutôt qu'à If car l'écriture est plus simple et plus courte.
Voici un exemple qui test les différentes saisons : Select Case NuméroMois
Case1,2,12 Saison="Hiver" Case 3,4,5 Saison="Printemps" Case 6 Saison="Eté" Case 7,8 Saison="Eté-Vacances" Case 9,10,11 Saison="Automne" Case Else Saison="Inconnue" End Select 6.4. For…Next
Ici la structure For permet de faire une boucle compteur et permet de faire Xfois une suite d'instructions.
Syntaxe :
For nomvariable = début To Fin Step pas
Instructions
Next
Utile pour compter un nombre de ligne pour une facture, une page, etc…. Exemple :
On veut remplir une variable tableau de la manière suivante :
0 1 2 3
1 2 3 4
2 3 4 5
9 Voici la solution :
Dim Essai(9,4) as Integer For I=0 To 9
For J=0 to 3
Essai (I,J)=I+J Next
6.5. Do…Loop
Cette structure permet de faire une boucle conditionnelle.
Permet d'exécuter une suite d'instruction en fonction d'une condition. Il existe plusieurs variante.
Syntaxe 1 :
Do Until condition On boucle jusqu'à ce que la
Instructions condition devienne vraie.
Loop Syntaxe 2 :
Do While condition On boucle tant que la condition
Instructions reste vraie ou jusqu'à ce que la
Loop condition soit fausse.
Syntaxe 3 :
Do Idem que la syntaxe 1 mais on
Instructions passe au moyen une fois.
Loop Until Condition Syntaxe 3 :
Do
Instructions Loop While condition
On peut sortir d'une boucle avec Exit Do
On peut remplacer Do While …Loop par While Condition …. Instructions …Wend.
6.6. For each ... next
Permet d'exécuter un bloc de code pour chaque élément d'un tableau ou d'une collection. Voici un exemple :
6.7. With … End with
Permet d'exécuter une série d'action sur un objet sans avoir à rappeler son nom. Très pratique et très rapide. On le verra en œuvre dans les connexions aux bases de données.
6.8. Using … End Using
Utiliser pour un bloc de code prenant une ressource externe comme une connexion à une base de données.
Permet de prendre en charge automatiquement la libération de la ressource à la fin du code
7.
LES ERREURS
7.1. DébogageOn distingue 3 types d'erreurs pouvant se produire :
- les erreurs de syntaxe : erreurs d'écriture. Se fait en temps réel. - les erreurs d'exécution : erreurs lors de l'exécution
- les erreurs logiques : le programme ne se déroule pas comme vous le souhaitiez.
Pour vous aider dans cette démarche on utilise la fenêtre Débogage. Si vous exécutez votre programme pas à pas ainsi vous allez examiner le code et les variables.
• La touche F8 pour un pas à pas détaillé
• La touche Shift F8 pour un pas à pas principal • La touche Ctrl-B pour interrompre
Vous pouvez placer un point d'arrêt en cliquant dans la zone grise à gauche de votre écran.
7.2. Gestion des erreurs
Lorsqu'une erreur se produit, la variable Err de VB contient le numéro de l'erreur et une boite de message vous informe mais le programme s'arrête. Pour éviter cela, on peut indiquer une séquence d'instruction en cas d'erreur. Ce déroutage est effectué par l'instruction On error ou par un renvoi à une procédure.
Syntaxe de l'étiquette : On Error GoTo étiquette
Attention placé cette instruction en 1er ligne (avant les futurs erreurs).
Pour revenir dans le déroulement normal de votre programme il faut avoir l'instruction RESUME qui reprend à la ligne de l'erreur et RESUME NEXT qui reprend à la ligne suivante.
Exemple :
Sub maprocédure() On Error GoTo Erreur
Instructions
Exit Sub Erreur :
Syntaxe de la procédure :
On peut éviter le renvoi à une étiquette, en testant la valeur de la variable Err On error Resume Next
Exemple :
Sub procerreur()
On Error Resume Next
Instructions
If Err= … Then
Instructions
End If End Sub
8.
APPLICATION WINDOWS
8.1. Interface SDIUne seule fenêtre est disponible (Single Document Interface). Pour pouvoir ouvrir un autre document il faut utiliser la méthode show.
Pour fermer un document on utilise Me.close()
Personnellement je préfère utiliser une interface MDI qui est plus pratique.
8.2. Interface MDI
Les applications MDI (Multi Document Interface) sont constituées de deux types de feuilles :
• Les feuilles mères • Les feuilles filles.
Pour définir une feuille mère, il suffit de mettre sa propriété IsMdicontainer à True.
Vous remarquerez qu'il y a déjà beaucoup de choses de faites!!!.
Maintenant nous allons créer deux fenêtres filles. Pour cela il suffit de mettre le code suivant au chargement de la feuille mère :
Private Sub menu_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load Dim fenetre1 As Form
Dim fenetre2 As Form
fenetre1.MdiParent = Me fenetre1.Show() fenetre2.Text = "fenetre 2" fenetre2.MdiParent = Me fenetre2.Show() End Sub
Maintenant nous allons voir comment créer une application de type explorateur.
• A partir de votre feuille mère, ajouter un contrôle "TreeView" • Modifiez la propriété "Dock" du "TreeView" sur "Left" pour le
mettre sur la bordure gauche de la fenêtre
• Ajouter les éléments dans le "TreeView" en vous aidant de l'éditeur de nœuds.
• Vous créez vos différents nœuds en donnant comme nom "im" pour les images et "re" pour les recettes :
Et idem pour les sous nœuds
• Maintenant vous allez écrire le code suivant en faisant un double clic sur le premier nœud :
If Not IsNothing(e.Node.Parent) Then
Dim f As Form
For Each f In Me.MdiChildren f.Close()
Next
Select Case e.Node.Parent.Name Case "im"
MsgBox("Vous avez sélectionné l'image :" _ & e.Node.Name)
Case "re"
MsgBox("Vous avez sélectionné la recette de : " _ & e.Node.Name)
End Select End If
8.3. Les événements
8.3.1. Evénements clavier
L'utilisateur peut simplement appuyer sur le clavier et cela se traduit par 3 événements distincts :
• KeyDown : lorsque vous appuyez sur la touche
• KeyUp : lorsque vous relâchez la touche
• KeyPress : lorsque lors de l'enfoncement et uniquement si la touche correspond à un caractère ASCII
Sur KeyDown et KeyUp, un argument KeyEventArgs indique si la touche Alt, Ctrl et Shift sont utilisés.
Par exemple si vous appuyez sur la combinaison Ctrl-F8, vous voulez qu'une zone de texte se transforme en majuscule. Sur l'événement KeyUp
If e.Control And (e.KeyCode = 119) Then
TextBox1.Text = UCase(TextBox1.Text)
End If
Par exemple vous voulez émettre un bip si l'utilisateur et en plus inhiber cette saisie. Pour cela vous avez la propriété "Handled" qu'il faut mettre à "true" If IsNumeric(Chr(e.KeyCode)) Then
Beep()
e.Handled = True
End If
8.3.2. Les événements souris
Liés à l'utilisation des boutons et de la molette de la souris. Voici les principaux événements :
• MouseDown : lorsque qu'un bouton est enfoncé
• MouseUp : lorsque qu'un bouton est relâché
• MouseWheel : lorsque la molette est actionnée.
Un paramètre de type "MouseEventArgs" est fourni qui vous permet d'obtenir des informations comme :
• Le bouton à l'origine de l'événement : "button"
• Le nombre de fois où le bouton est enfoncé ou relâché : "Clicks" • Le nombre de crans de déplacement de la roulette : "Delta" A noter que la valeur d'un cran est de 120.
Vous pouvez aussi avoir un déplacement de la souris :
• MouseEnter : lorsque la souris entre au-dessus d'un contrôle
• MouseMove : lorsque la souris se déplace sur un contrôle
• MouseLeave : lorsque la souris quitte la surface du contrôle
• MouseHover : lorsque la souris reste pendant 1 seconde
Nous allons faire un petit logiciel de dessin qui trace un point à chaque déplacement de la souris si on appuie sur le bouton gauche.
Sur cette form vous placez 3 zones de texte (txtrouge, txtbleu, txtvert).
Vous tapez le code suivant sur l'événement MouseMove mais noté bien la première ligne :
Maintenant vous allez ajouter le code suivant quand vous allez toucher à votre molette de souris sur les 3 zones de texte.
Maintenant nous allons éviter de cliquez sur la zone de texte pour actionner la molette grâce à l'événement "mouseHover" et en tapant le code :
9.
LES COMPOSANTS D'UN FORMULAIRE
9.1. Boite de dialogue de Windows
Rien ne vous empêche de reprendre les boites de dialogues de Windows grâce à une série de classes de l'espace System.windows.form
Nous allons voir quelques exemples.
9.1.1. Ouvrir
9.1.2. Choix des dossiers
Très similaire à "Ouvrir" mis à part la propriété "Multiselect" qui disparait.
9.1.3. Choix d'une couleur
Utilisation de la classe ColorDialog où la propriété Color permet d'initialiser la boite de dialogue et la propriété "AllowFullOpen" permet d'interdire l'affichage des couleurs personnalisées et la propriété "FullOpen" pour avoir un choix plus important.
9.1.4. Choix d'une police
Utilisation de la classe FontDialog avec la propriété "Font" qui permet de définir la police de caratères utilisée et le choix de la couleur ou non ("ShowColor") et des effets ("ShowEffects"). Je vous conseille de mettre la propriété "FontMustExist" a "True" pour forcer la vérification de la fonte se trouvant sur la machine. "Maxsize" et "MinSize" permet de planifier une plage.
9.2. Contrôle d'affichage
9.2.1. Le label
Le plus basique dont les propriétés essentielles sont :
• Text : affiche le texte
• Autosize : s'adapte en fonction du texte • TextAlign : position du texte
• Image : affiche une image
9.2.2. LinkLabel
Idem que le contrôle "Label" et ajoute simplement un lien hyper texte grâce à la propriété "LinkArea" pour indiquer la portion du texte qui activera le lien, "linkcolor" pour la couleur normal, "visitedlinkcolor" pour la couleur après une première utilisation et "activelinkcolor" au moment où l'on clique dessus.
Quand l'utilisateur clique sur le lien, l'événement "LinkClicked" est déclenché et à vous de jouer pour le code. La propriété "LinkVisited" permet de valider que le lien a été cliqué.
Par exemple pour lancer votre navigateur sur la page de google.fr avec un contrôle qui s'appelle lnk_internet :
9.2.3. Le contrôle ToolTip
Ce contrôle permet l'affichage d'une bulle d'information associée à un contrôle. Attention ce contrôle n'est pas visible et il ajoute la propriété "Tooltip" à chaque contrôle, qui vous servira à placer une bulle d'information. Vous pouvez aussi mettre votre bulle d'information à partir de ce contrôle :
ToolTip1.SetToolTip(button1,"Cliquez pour jouer")
9.2.4. Le contrôle ErrorProvider
Ce contrôle vous permet d'afficher des erreurs de validation d'information par une petite icône associé à un texte. Cette vérification est effectuée quand le contrôle perd le focus et votre code doit être écrit dans l'événement "Validating". La propriété "SetError" permet d'associer un texte.
Par exemple dans une texte box voulez-vous signaler une erreur de saisie
9.2.5. Le contrôle progressbar
Permet d'informer l'utilisateur de la progression d'une action. Vous avez plusieurs styles d'affichage :
• Continuous : barre bleue pleine
• Blocks : série de petits rectangles
• Marquee : idem que block mais défilement
La propriété "value" contrôle la barre de progression entre la propriété
"Minimum" et "Maximum". La méthode "PerformStep" permet
d'incrémenter la valeur en fonction de la propriété "Step". Vous avez aussi la propriété "Increment".
Evitez de prendre le style "Marquee" car "Value", "PerformStep" et "Increment" ne fonctionne pas.
Voici une horloge réalisé avec 3 progressbar.
9.3. Edition de texte
9.3.1. Le contrôle TextBox
Le plus classique mais il faut savoir qu'il peut accueillir 2000 caractères ou 32000 si la propriété "MultiLine" est à "True". La propriété "WordWrap" doit être à "True" pour voir la barre de défilement verticale. La propriété "Lines" est une variable tableau contenant les lignes si vous êtes en multi lignes. La propriété "SelectedText" permet de sélectionner un texte.
La méthode "Undo" permet d'annuler la dernière modification (Ctrl-Z).
9.3.2. Le contrôle MaskedTextBox
Version évolué d'un textbox car il permet de vérifier automatiquement que les informations saisies correspondent à ce que vous attendez.
La prorpiété "Mask" détermine le format des informations saisies.
9.3.3. Le contrôle RichTextBox
Comme le contrôle "TextBox" mais vous pouvez en plus ajouter de la mise en forme comme les couleurs, la police,… un peu comme le bloc note voir le Wordpad.
La méthode "LoadFile" et SaveFile" permet de charger et d'enregistrer un fichier avec comme format de fichier rtf mais vous pouvez gérer d'autres types en accord avec la constante "RichTextBoxStreamType".
La méthode "AppendText" vous permet d'ajouter un texte à un contenu. La propriété "SelectionFont" gère la police, "SelectionColor" pour la couleur. Voici un exemple d'utilisation :
Cela nous donne le code suivant :
9.4. Déclenchement d'action
9.4.1. Button
Le plus grand classique de vb et je n'ai pas grand-chose à vous dire sauf que le symbole & permet de mettre un raccourci devant la lettre sur la propriété Text.
9.4.2. MenuStrip
Ce contrôle permet de faire un menu dans votre formulaire. Ce menu peut être composé de différents éléments comme un sous-menu, une liste déroulante,…
Les propriétés les plus importantes sont : • Text : contient le libellé
• Visible : pour masquer ou non le menu
• Enabled : pour interdire ou non le menu (il devient grisé) • Checked : pour coché ou non
• CheckonClick : pour changer automatiquement à chaque clic • ShortcutKeys : touche de raccourci. Show permet de le montrer Ensuite il faut écrire le code dans l'événement "click" tout simplement. Voici un exemple :
9.4.3. ContextMenuStrip
Permet de faire apparaitre un menu contextuel sur un contrôle. Pour cela ajouter ce contrôle et ensuite par un clic droit, vous devez ajouter un élément. Cet élément porte un nom qui sera ensuite utilisé sur le contrôle que vous voulez pour votre menu et par la propriété "ContextMenuStrip". Voici un exemple sur le contrôle "MaskedTextbox" :
9.4.4. Toolstrip
Permet de faire une barre d'outils. Très simple à utiliser.
Dans ce cours je me limite à une barre d'outils mais si vous voulez en avoir plusieurs, il faut ajouter le contrôle de type "ToolstripContainer" pour gérer leur emplacement dans votre formulaire.
9.5. Contrôles de sélection
9.5.1. Checkbox
Permet de faire un choix ou non. Attention une case à cocher peut avoir 3 états : coché, pas coché ou indéterminé (grisé). La propriété "Checked" renvoie vrai ou faux.
Voici le code associé :
Pour information je mémorise le style déjà appliqué. Ce style est représenté par un entier.
9.5.2. RadioButton
Permet de faire un seul choix comme sur un poste de radio car on ne peut écouter qu'une seule station en même temps.
Vous devez faire le formulaire suivant :
Voici le code associé :
9.5.3. Groupbox
Permet de regrouper des radiobutton afin de les isoler. Voici un exemple :
Maintenant la personne qui peut sélectionner "centrer" et "rouge" je lui paye un voyage à l'ile maurice. Pour cela il faut faire un groupe "Alignement" et "Couleur". Il existe aussi le contrôle "Panel" qui n'a pas de propriété "Text" afin de rendre invisible pour l'utilisateur le groupe.
Voici le code pour mettre en couleur :
9.5.4. Listbox
Permet de choisir parmi une liste. Les éléments de la liste sont gérés sous forme de collection par la propriété "Items".
Votre premier travail est de remplir la liste grâce à la méthode add ou directement sur le formulaire.
Par exemple nous allons ajouter un choix de couleur de fond sur notre formulaire :
Vous pouvez gérer l'action de la souris par la propriété "SelectionMode" (pas de clic, simple, multiple étendue ou pas).
La récupération de cette sélection peut se faire par "SelectedIndex" dans le cas d'une sélection simple ou par "SelectedItem". Dans le cas d'une sélection multiple, les informations seront renvoyés dans une collection "SelectedIndices" qui sera la liste des index et par la collection "SelectedItems" qui sera la liste des objets sélectionnés.
Pour remplir la liste, il faut utiliser la méthode Add en général au chargement du formulaire.
Pour le code :
9.5.5. DomainUpDown
Idem que la listbox mais n'accepte pas de sélection multiple et de présentation légèrement différente.
9.5.6. CheckedListbox
Idem que la listbox mais n'accepte pas de sélection multiple. De plus il y a des cases à cocher et la collection "CheckedItems" possède les éléments cochés.
9.5.7. Combobox
Personnellement j'utilise beaucoup ce contrôle. Idem que le contrôle "ListBox" mais pas de sélection multiple et vous pouvez définir grâce à la propriété "DropDownStyle" le comportement de votre liste déroulante :
• Simple : L'utilisateur sélectionne un élément ou saisit du texte mais la liste est affiché en permanence
• DropDown : idem mais la liste est affichée quand on clique mais ne se déroule pas
• DropDownList : se déroule automatiquement et en plus l'utilisateur ne peut pas saisir autre chose qu'un élément.
Pour dérouler automatiquement la liste dès que le contrôle reçoit le focus :
La propriété Text possède l'élément sélectionné et SelectedIndex pour l'indice de sélection. Si l'utilisateur n'a rien sélectionné cette propriété est à -1
9.5.8. NumericUpDown
Permet de faire monter ou descendre une valeur numérique. La propriété "Minimium" et "Maximum" gère l'intervalle et la propriété "Valeur" vous donne la valeur sélectionné.
9.5.9. TrackBar
Idem que le contrôle "NumericUpDown" permet un effet plus visuel mais sans afficher la valeur.
9.5.10.ListView
Permet de présenter des informations de 4 manières différentes comme l'explorateur de Windows.
Nous allons réaliser ce formulaire
Pour cela il faut poser ce contrôle et cliquer sur "modifier les éléments"
Par le code :
9.5.11.TabControl
Permet d'afficher plusieurs onglets dans le même formulaire.
La propriété "TabPages" contient la liste de toutes les pages et vous permet de paramétrer vos onglets.
Voici un exemple d'utilisation :
Après avoir créé vos onglets, vous pouvez placer vos contrôles comme si il s'agissait d'un formulaire.
9.6. Les contrôles divers
Je vais voir les plus importants à mes yeux. 9.6.1. TableLayoutPanel
Très intéressant car il permet de réorganiser votre formulaire si l'utilisateur change sa dimension ou la résolution d'écran.
Il faut d'abord poser ce contrôle et ensuite faire des zones en fonction de vos besoins sachant que dans une zone vous pouvez placer un seul contrôle.
Ensuite vous devez ancrer votre TableLayoutPanel sur le bord gauche, haut et droit.
9.6.2. PictureBox
Vous permet de gérer des images. Par exemple nous allons créer un explorateur d'image.
Il faut savoir que vous pouvez gérer les formats d'images du type jpg, bmp, ico, gif, wmf.
De plus la propriété "SizeMode" gére le comportement comme l'adaptation de la taille de l'image comme l'adaptation à la taille (Stretchimage), ou le sens contraire (Autosize), …
Code de cette application :
9.6.3. Imagelist
Contrôle qui vous permet de stocker des images ico, jpg, gif,… sauf les wmf pour les utiliser dans d'autres contrôles ayant la propriété "ImageList", "SmallImageList" ou "LargeImageList".
Les images s'ajoutent depuis l'interface ou par le code grâce à la méthode "add". Vous pouvez aussi toutes les effacer par la méthode "Clear".
Par exemple nous allons reprendre le formulaire ayant le contrôle ListView. Maintenant dans les propriétés de "ListView" sélectionnez votre "ImageList1"
Maintenant pour chaque élément sélectionnez votre image dans la propriété "ImageIndex".
Cela nous donne maintenant :
9.7. Les contrôles de gestion du temps
9.7.1. Le Timer
L'objet TIMER permet l'exécution d'instruction pendant une période de temps déterminée. . L'unité de temps est le 1/1000 seconde grâce à la propriété "Interval". La propriété "Enabled" passe à False pour arrêter le Timer.
Le timer à une taille unique.
Par exemple vous voulez faire une horloge. Pour cela créez un formulaire avec une zone de texte nommée "horloge" et un objet timer nommé "temps" et avec comme intervalle 1000. Maintenant faîtes un double clic sur l'objet timer et taper le programme ci-dessous :
Private Sub temps_Timer() horloge.Caption = Time End Sub
9.7.2. DateTimePicker
Contrôle très fréquent sur le Web qui permet d'éviter la saisie d'une date.
La propriété "Value" permet de récupérer la date sélectionnée où de spécifier la date affichée (par défaut la date du jour).
9.7.3. MonthCalendar
Permet de faire des choses plus évoluées que le contrôle précédent. Par exemple faire une plage de date en gras. Pour cela vous devez utiliser la propriété "AnnuallyBoldedDates".
Par le code :
La propriété "MonthBoldedDates" permet de faire la même chose mais pour tous les mois.
La propriété "MaxSelectionCount" permet de définir le nombre de jours maxi que vous pouvez sélectionner.
Vous pouvez même afficher plusieurs mois en même temps grâce à la propriété "CalendarDimensions".
10. L'ACCES AUX BASES DE DONNEES
10.1. PrincipeLorsque vous fait un programme, la meilleure solution est séparée votre base de données du langage dans lequel vous travaillez. Ainsi si votre base de données grossit et que vous êtes obligé d'en changer pour des raisons de temps d'accès par exemple, vous n'aurez qu'un morceau de code à changer. Dans le principe on utilise une base de données de type Access, SQL Server, Oracle,… et vous allez chercher les données par une requête SQL pour les manipuler ensuite dans votre programme.
Ce principe utilise le modèle ADO.net qui contient un ensemble de classes, d'interfaces, de structures facilitent ces opérations.
10.1.1.Mode connecté
L'utilisateur est en permanence connecté aux données et cela se gère de la manière suivante :
• On établit une connexion au début de l'application et on ferme cette connexion à la fin
• Vous pouvez contrôler qui est connecté et avec quelles données il travaille
Les données sont à jour en permanence.
10.1.2.Mode déconnecté
Beaucoup plus difficile à programmer, mais l'utilisateur n'est pas en permanence connecté. Ceci est très pratique pour des ordinateurs portables, comme pour le monde du Web.
Comme tout système cela présente des avantages et des inconvénients. • La connexion n'occupe pas en permanence le serveur comme dans le
mode connecté.
• Vous amélioré les performances et l'évolutivité de votre application. • Les données ne sont pas forcément à jour.
• Quand les mises à jour se font vous devez privilégier soit les données les plus récentes, les plus anciennes ou à l'utilisateur de choisir.
Base de données Requête SQL
10.2. ADO.NET
L'architecture d'ADO.NET permet de fournir un ensemble de classes permettant l'accès aux bases de données.
Il vous faut un fournisseur d'accès permettant de récupérer les données vers votre application et transférer les données de votre application vers la base de données.
Vous aurez aussi besoin de classes permettant de manipuler vos données de manière indépendante de votre base.
10.2.1.Fournisseurs d'accès
Vous avez le choix entre 4 fournisseurs d'accès dans le Framework.net : • Fournisseur pour SQL Server
• Fournisseur pour OLE DB (autres bases de données) • Fournisseur pour ODBC
• Fournisseur pour Oracle
L'ensemble de ces fournisseurs vous propose 4 classes :
• La classe "Connection" pour établir une connexion avec votre base • La classe "Command" pour exécuter une commande SQL
• La classe "DataReader" procure un accès en lecture seule • La classe "DataAdapter" pour mettre à jour vos données.
11. LES FICHIERS TEXTES
VB permet l'accès aux fichiers de type texte, très pratique pour faire un journal de log d'erreur, de paramétrage, ….
Le traitement des fichiers se divise en 3 phases :
L'ouverture (OPEN)
Le traitement
La fermeture (CLOSE)
Un fichier texte est constitué de lignes de caractères se terminant par un retour chariot (Chr$(13)) et un retour à la ligne (Chr$(10)).
11.1.1.L'ouverture
Pour ouvrir un fichier texte on utilise l'instruction suivante : Open Nom_fichier For mode As n°Canal
Input : fichier ouvert en lecture seulement
Output : fichier ouvert en écriture mais en écrasant le contenu
Append : fichier ouvert en écriture mais place à la fin
La lecture des lignes se fait grâce à l'instruction Line Input : Line Input # Canal
La fonction EOF permet de savoir si l'on arrive à la fin du fichier sinon on provoque une erreur.
Voici un exemple :
Dim Retour, Nextline
Retour = Chr(13) + Chr(10) Canal = FreeFile
Open "C:\WINDOWS\SYSTEM.INI" For Input As #Canal Do Until EOF(Canal)
Line Input #Canal, contenu Print Contenu
Printer.Print Contenu Loop
Print.EndDoc Close #Canal
Le meilleur moyen pour afficher un fichier texte consiste à utiliser un objet Zone de texte (TextBox) et la propriété Multiline=True.
Attention limité à une taille de fichier inférieur à 65Ko.
On peut aussi lancer l'application associée au fichier par l'instruction Shell nomprogramme nomfichier
Pensez à fermer le fichier avant la fin de la procédure.
11.1.2.L'écriture
Pour écrire dans un fichier, s'est l'instruction Print # dont la syntaxe est la suivante :
Print #n°canal, variable
11.2. Instruction type Dos
Quand vous manipulez des fichiers, il est important d'effectuer des opérations du type DOS. Voici la liste par catégorie :
Sur les répertoires
ChDrive lecture change le lecteur courant
ChDir chemin change le répertoire courant
CurDir retourne le nom du répertoire courant
MkDir répertoire crée le répertoire
RmDir répertoire supprime le répertoire si vide
Dir(masque,attr) retourne le nom du 1er fichier
correspondant ou masque et possédant l'attribut. Dir seul retourne ensuite le nom suivant.
Sur les fichiers
FileAttr nomfichier retourne les attributs
FileDate nomfichier retourne la date
File nomfichier retourne la longueur
Kill nomfichier supprime le fichier
Name ancien As Nouveau change le nom