Introduction
1.1. L’objectif de cette formation
1.2. L’axe à suivre
1.3. L’environnement de développement
1.4. Avant VB, la notion fondamentale de l’objet
1.4.1. Les classes et les objets
1.4.2. Propriétés (attributs) d ‘un objet
1.4.3. Méthodes
1.4.4. Evènements
1.4.5. La mise en application dans
1.4.5.1. Fenêtres et contrôles
1.4.5.2. Tout est objet
1.4.5.3. Tout objet a des propriétés
1.4.5.4. Les objets peuvent avoir des méthodes
1.4.5.5. Certains objets ont des évènements
1.4.5.6. Interface et implémentation
1.4.5.7. Visibilité
1.4.6. En résumé
2. Principe et structure des programmes
2.1. Une programmation évènementielle
2.1.1. Principes de la programmation VB
2.1.2. Exemple : le fameux « Hello World »
2.1.2.1. Que voit l'utilisateur du programme?
2.1.2.2. Que se passe t-il dans le programme?
2.1.2.3. Que doit faire le programmeur pour arriver à ce résultat?
2.1.3. En pratique, ce que fait le programmeur
2.1.3.1. La conception de l’interface utilisateur
2.1.3.2. L’écriture du code correspondant aux événements
2.1.4. Exécuter et déboguer le programme
2.1.5. Pour résumer la programmation événementielle
2.2. Les instructions
2.3. Les procédures
2.3.1. Les procédures liées aux événements
2.3.2. Les procédures non-liées
2.3.3. Les procédures « Sub » et les procédures « Function »
2.3.4. Les procédures non-liées dans les modules standard
2.3.5. Private / Public
2.4. Les modules
3. Environnement de développement
3.1. Le projet
3.2. Une fenêtre (Windows Form)
3.3. Les procédures de la fenêtre
3.4. Ajouter un contrôle
3.5. Propriétés d’un contrôle
3.6. Les composants d’un projet
3.7. L’aide Visual Basic
4. L’interface utilisateur
4.1. Introduction
4.2. Les feuilles
4.3. Les boutons
4.4. Les TextBox
4.5. Les labels
4.6. Les cases à cocher
4.7. Les listes
4.8. Les boites toutes faites
4.9. Regroupement de contrôles
4.10. Positions des contrôles
4.11. Les menus
4.12. Rendre une interface active
4.13. ToolBar / StatusBar
4.14. Image
5. Langage Visual Basic
5.1. String
5.2. Variables Numériques
5.3. Booléens
5.4. Conversion
5.5. Les tableaux
5.6. Les collections
5.7. Soyons STRICT et EXPLICITE
5.8. Les constantes
5.9. Les opérateurs
5.10. Les structures de contrôle
5.10.1. Les structures conditionnelles
5.10.2. Les structures itératives
5.11. Rappel sur les procédures
5.12. Portée des variables
5.13. Références et espaces de noms
5.14. Structure d’un développement .NET
5.15. Module de classe
Nous allons apprendre à utiliser Visual Basic .NET avec le Framework.
Nous étudierons principalement: les applications Windows.
Les applications Windows sont des programmes directement exécutables qui utilisent des fenêtres Windows: des programmes de traitement de texte, d'image, de musique, des jeux, de petits utilitaires, des logiciels métiers (médicaux)
Nous laisserons de coté les applications Web (en ) et les applications console..
Nous étudierons donc comment créer une application Windows et pour cela, nous allons suivre différentes étapes :
- On étudiera la notion d'objet, d'événement (section 2),
- On étudiera le langage (section 3),
- On utilisera les objets 'fenêtre' et les 'divers contrôles' pour créer l'interface utilisateur (section 3),
- On découvrira la manière de créer une application (section 4),
- On apprendra à créer une classe (section 5),
- Enfin, on verra comment faire le lien avec les bases de données (section 6) avec quelques rappels sur les requêtes SQL
La façon la plus courante de développement en est d’utiliser Microsoft Visual Studio .net, il contient une interface de développement (programme permettant d'écrire un logiciel et de créer un programme exécutable) , , …
Il existe différentes versions : initiation, professionnelle, entreprise et architecte.
La version initiation (avec MSDN Library – MicroSoft Developpement Network Library) est amplement suffisante pour cette formation ainsi que dans le milieu professionnel. Cette même version servira par la suite, pour la formation
Une version d’évaluation de ce produit est disponible sur le site de Microsoft.
Concernant la configuration matérielle, un système professionnel (Windows 2000 pro ou Windows XP Pro) et un minimum de 256 de mémoire vive sont vivement conseillé.
Enfin, le confort d’un grand écran vous semblera indispensable quand vous vous confrontez au grand nombre de fenêtres.
Pour bien comprendre ce qu’est un objet, nous allons prendre des exemples dans la vie courante puis nous passerons à des exemples dans Visual Basic.
Ma voiture est un objet, cet objet existe, on peut l'utiliser.
Ma voiture fait partie des « voitures », du type, du genre « voiture » (d’un point de vue générale). Une voiture qu’elle soit de marque française ou étrangère, qu’elle soit cabriolet ou que se soit un break, reste un voiture. Les « voitures » représentent donc une classe d’objet (Class) qui a ses caractéristiques : elle a une marque, une gamme, une couleur, une puissance, … mais je ne peux pas utiliser « les voitures ».
De manière générale, une classe est une représentation abstraite de quelque chose, tandis qu'un objet est un exemple utilisable de ce que représente la classe.
Pour fabriquer ma voiture, je prends les caractéristiques de la classe « voitures » (c’est comme un moule) et je fabrique (j’instance) une voiture, je la nomme « MaVoiture ».
Une classe « les voitures » >>> Une instance de, un objet « MaVoiture »
Si on considère encore l’exemple de l’objet « MaVoiture », cette dernière possède des caractéristiques ou propriétés : une marque, une couleur, une puissance …
Pour indique la couleur de « MaVoiture », on utilise la notation suivante :
MaVoiture.couleur
Pour modifier une propriété d’un objet, si on veut une voiture vert par exemple :
MaVoiture.couleur = "vert"
MaVoiture.Phares.Avant indique les phares avant de le voiture.
MaVoiture.Phares.Avant.Allumé indique l’état des phares (Allumé ou non)
Si je fais :
MaVoiture.Phares.Avant.Allumé=True (Vrai) cela allume les phares !
MaVoiture fait des choses : elle roule par exemple.
Pour faire rouler la voiture j’appelle la méthode ‘Roule’
MaVoiture.Roule
Si c’est possible pour cette méthode, je peux indiquer à quelle vitesse la voiture doit rouler :
MaVoiture.Roule(100) 'j’ai ajouté un paramètre
Le paramètre est un renseignement envoyer avec la méthode.
Il est possible parfois d’indiquer en plus si la voiture doit rouler en marche avant ou en marche arrière.
MaVoiture.Roule(10, "Arriere")
Il y a donc 2 manières d’appeler la méthode Roule : avec 1 ou 2 paramètres, on dit que la méthode est surchargée; chaque manière d'appeler la méthode s'appelle "signature".
Des évènements peuvent survenir sur un objet.
MaVoiture_démarre est un évènement, quand la voiture se met en route (si par exemple j'ai fait MaVoiture.Roule(100)), cet évènement démarre survient automatiquement.
L’ événement est donc l’application de méthodes suite à une action précise.
Tous cela ce sont des images, mais elles sont destinées à illustrer ce qu’est un objet.
1.4.5.1. Fenêtres et contrôles
Une application Windows se compose de fenêtres (nommée aussi Windows form) dans lesquelles se trouvent des contrôles (bouton, liste, texte…).
Exemple de fenêtre avec 4 contrôles : 2 boutons, une zone de texte (un label) et une icône :
Dans une application Windows, il y a aussi des lignes de code utilisant des variables pour faire des calculs.
1.4.5.2. Tout est objet :
En , tout est objet :
• les fenêtres (on dit les formulaires),
• les variables,
• les contrôles (les boutons, liste, image, case à cocher..)
•
Il faut un moule pour faire un objet. Le moule c’est une classe.
Le moule va servir à créer un objet, on dit une instance.
On peut créer une multitude d’instance (une multitude d’objets) avec le même moule.
Pour créer, démouler un objet, on utilise les mots clé Dim et As New.
Dim objet As New Classe
New est un constructeur.
Exemple : créer une fenêtre (un formulaire) :
Je dessine une fenêtre FormDémarrage (c'est la Classe, le moule) puis :
Dim F As New FormDémarrage
Crée une fenêtre qui se nomme 'F' à partir du moule, du modèle (FormDémarrage) que j’ai dessiné.
Autre exemple :
Comment créer une variable nommé 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
1.4.5.3. Tout objet a des propriétés :
F.BackColor indique la couleur de fond de la fenêtre.
S’il y a un bouton, la couleur de fond du bouton sera :
Bouton.BackColor
ou
F.Bouton.BackColor
Noter la syntaxe : La couleur du bouton qui est dans la fenêtre F
Et donc, on modifie la propriété de la sorte suivante :
Bouton.BackColor=Red 'modifie la couleur de fond du bouton
Autre exemple:
La propriété Visible: si elle a la valeur True, l'objet est visible et si elle est à False l'objet n'est donc pas visible.
Bouton.Visible=False 'fait disparaître le bouton
objets peuvent avoir des méthodes
Prenons un exemple simplifié. Les Listes déroulante (ListBox) ont une méthode Clear qui permet de les vider.
Si je veux vider toutes les lignes d'une liste nommé Liste1, je fais:
Liste1.Clear ‘la liste est vidée
Les propriétés et méthodes se nomment les membres d'un objet.
1.4.5.5. Certains objets ont des évènements
Reprenons notre bouton. Quand l'utilisateur click dessus, l'évènement Bouton_Click survient.
Ce sont les objets contrôles (bouton, case à cocher..) et les formulaires qui ont des évènements.
Vous remarquerez que le nom de l’événement Bouton_Click est composé du nom de l’objet (Bouton) suffixé du nom caractérisant l’évènement (Click).
1.4.5.6. Interface et implémentation
Ce que je vois de l'objet, c'est son interface (la définition de ces propriétés, ces méthodes :
l’ensemble de ces membres)
Exemple: la méthode Clear fait partie de l'interface d'une ListBox. Par contre le code qui effectue la méthode (celui qui efface physiquement toutes les lignes de la listeBox),ce code se nomme implémentation, lui n'est ni visible ni accessible.
1.4.5.7. Visibilité
Quand un objet est crée, il est visible (et donc utilisable), uniquement dans la partie du programme où il a été défini.
Par exemple, et habituellement, je peux voir et modifier la couleur d'un bouton uniquement dans le code de la fenêtre où il est situé.
Pour les variables, on parle de portée: la variable peut être locale (Private) ou de portée générale (Public) visible partout.
Une variable publique sera donc utilisable dans l’ensemble des codes de toutes les fenêtres.
Habituellement, la portée d’une variable est privée. Pour la rendre publique, il faudra le préciser explicitement dans son code.
En Visual tout est objet.
Les classes sont des types d'objet.
Pour créer un objet à partir d'une classe, il faut utiliser les mots clé Dim ..As New
Les membres (propriétés et méthodes) de cette classe permettront de manipuler l’objet suite à un événement.
Nous allons comprendre la programmation évènementielle, c’est à dire comment fonctionne Visual Basic. Comme dans toute programmation, il est important de se placer sur deux niveaux :
• Ce que voit l'utilisateur.
• Ce qu'a fait le développeur pour arriver à ce résultat.
Le programmeur va dessiner l’interface utilisateur (fenêtre, bouton, liste..).
Ensuite, il va « uniquement » écrire les actions à effectuer quand certains événements se produisent sur cette interface.
C’est Visual Basic qui va entièrement s’occuper de la gestion des événements.
Le but de cet exemple est d’afficher 'Bonjour' quand on clique sur un bouton. C'est pas original, mais c’est le premier programme que l’on fait lors de l’apprentissage d’un nouveau langage.
2.1.2.1. Que voit l'utilisateur du programme?
L’utilisateur final, celui qui utilise le logiciel, voit une fenêtre avec un bouton, Si il appuie sur ce bouton il voit s’afficher « Bonjour ».
2.1.2.2. Que se passe t-il dans le programme?
Quand l'utilisateur clique sur le bouton, cela déclenche automatiquement un événement
(Button1_Click). Cet évènement contient du code qui affiche « Bonjour ».
2.1.2.3. Que doit faire le programmeur pour arriver à ce résultat?
Pour atteindre ce résultat, le programmeur va dessiner la fenêtre, le bouton, la zone d'affichage du texte (un label) puis il va simplement indiquer dans l'évènement Button_Click d' afficher « Bonjour ».
Le fait de déterminer la procédure à appeler ou de réaliser l’appel est entièrement pris en charge par VB.
Le programmeur est en mode conception (ou mode Design) pour écrire ce programme.
2.1.3.1. La conception de l’interface utilisateur
Ce que verra l’utilisateur final, c'est l'interface utilisateur : une fenêtre avec des boutons, des listes, du texte.. :
Il crée une fenêtre : Menu Projet, Ajouter un formulaire Windows, cliquer sur Windows Form, une fenêtre ‘Form1’ apparaît.
Il ajoute un bouton : Pour cela il utilise la Boite à outils.
Il clique sur ‘Boite à Outils’ à gauche, bouton Windows Forms, puis bouton Button, il clique dans Form2, déplace le curseur sans lâcher le bouton, puis lâche le bouton de la souris : le dessin d'un bouton apparaît.
Pour l’exemple, il faut aussi ajouter un label de la même manière.
Un label est un contrôle qui permet d’afficher un texte.
2.1.3.2. L’écriture du code correspondant aux événements
L’utilisateur doit double-cliquer sur le bouton qu'il a dessiné pour accéder à l’événement Click de ce bouton.
Une fenêtre de conception de code s’ouvre et il apparaît :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
End Sub
Cela correspond à la procédure évènement (entre Sub et End Sub) qui, quand le programme fonctionne, est automatiquement déclenchée quand l’utilisateur du logiciel clique sur l’objet Button1.
Une procédure est un ensemble de ligne de code qui commence par Sub et se termine par End Sub.
Pour afficher "Bonjour" dans le label, celui-ci possède une propriété nommée Text qui contient le texte à afficher.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
= "Bonjour"
End Sub
Voilà, votre premier programme est écrit !
Il est possible de tester immédiatement le programme en mode « déboguage », sans quitter l'environnement de développement:
Utiliser le menu ‘Déboguer’ puis ‘Démarrer’ qui lance l’exécution du programme ou cliquer sur la flèche:
Vous lancez l'exécution avec le premier bouton, le second servant à arrêter temporairement l'exécution, le troisième à terminer l'exécution.
Remarque : Encore plus rapide, on peut aussi taper sur F5 pour lancer le programme.
Quand le programme est totalement écrit, terminé, testé, il est possible de le compiler et ainsi de créer un fichier exécutable (possédant une extension « .exe ») qui fonctionne de manière autonome en dehors de l'environnement de développement.
C'est ce fichier exécutable qui est fourni à l'utilisateur.
Le programmeur utilise des outils de dessin pour construire une interface utilisateur : des fenêtres avec des contrôles dessus: menus, boutons, case à cocher..
VB, pour chaque feuilles ou pour chaque contrôle, génère une liste d’événements, (Evènement lié au chargement d'une fenêtre, évènement lié au fait de cliquer sur un bouton, évènement survenant quand on modifie un texte )
Il suffit, dans la procédure événement qui nous intéresse, d’écrire le code qui doit être effectué lorsque cet événement survient.
Comme nous l’avons vu le code sert a agir sur l’interface (Afficher un texte, ouvrir une fenêtre, remplir une liste, un tableau), mais il peut aussi effectuer des calculs, évaluer des conditions et prendre des décisions, travailler en boucle de manière répétitive et ainsi effectuer les taches nécessaires.
Une instruction est un code permettant d'effectuer une certaine opération, une déclaration, une définition.
Dim A As Integer 'est une instruction (de déclaration)
A=1 'est aussi une instruction et effectue une opération.
C'est habituellement une 'ligne de code' 'exécutable'.
Pour mettre des commentaires dans un programme, on le fait précédé de « ' » :
'Ceci est un commentaire, ce n'est pas une instruction.
Le commentaire, quand à lui, ne sera pas exécuté.
Une procédure est un ensemble d'instructions, de lignes de code, un groupement d'instructions bien définies effectuant une tache précise.
Exemple concret d'une procédure: la procédure Button_Click du premier programme !
Vous avez vu que l’on peut dessiner l'interface, une fenêtre Form1 par exemple. En mode conception, après avoir dessiner l’interface, on doit avoir accès aux procédures.
Si on double-clique sur la fenêtre, on a accès aux procédures évènement liées à cette fenêtre, si on double-clique sur un objet (bouton, case à cocher… on voit apparaître les procédures évènement de ce contrôle.
Si on double clique sur le fond d’une fenêtre (dans le programme « Bonjour »), on voit apparaître les procédures liées à cette fenêtre et aux contrôles contenus dans cette fenêtre :
Public Class Form1
Inherits
Dim a As String
#Region " Code généré par le Concepteur Windows Form "
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
= ««
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
= "Bonjour" End Sub
End Class
Si on détaille un peu le code de cette feuille, on distingue 3 parties:
• Public Class Form1
Ce n’est pas une procédure mais la définition de la fenêtre. La fenêtre fait partie des . Ces lignes sont générées automatiquement par VB. Si vous déroulez cette partie, en cliquant sur le petit +, vous pouvez lire le code permettant de créer la fenêtre, les contrôles.. C'est généré automatiquement par VB.
• Private Sub Form1_Load
Chaque fenêtre a une procédure Form_Load qui est exécutée lorsque la fenêtre est chargée, on y met généralement le code initialisant la feuille.
Il y a bien d’autres procédures liées à la fenêtre. Dérouler la liste box en haut à gauche de la fenêtre de code, cliquer sur (Form1 events), si vous dérouler maintenant la liste à droite vous aurez tous les événements qui génèrent une procédure : o Load lors du chargement de la fenêtre o Unload lors du déchargement de la fenêtre o Activated lorsque la fenêtre devient active o GotFocus lorsque la fenêtre prend le focus o Resize lorsque la fenêtre est redimensionnée o
• Private Sub Button1_Click
C’est la procédure liée au bouton et qui contient le code à effectuer quand l’utilisateur clique sur le bouton. C’est là que l’on écrira le code qui doit s’effectuer lorsque l’utilisateur clique sur le bouton.
De la même manière que pour la fenêtre, vous pouvez voir dans la liste en haut, tous les événements liés aux boutons qui génèrent une procédure :
o Click lorsque l'utilisateur clique sur le bouton.
o DoubleClick lorsque l'utilisateur double-clique sur le bouton. o MouseDown se déclenche si appuie du bouton de la souris o MouseUp se déclenche si relâchement du bouton de la souris o …
On voit donc que le formulaire (la fenêtre) et tous les contrôles d'une application ont chacun des procédures pour chaque évènement qui peut survenir.
Parfois on a besoin de code qui fait une tache particulière, qui est utilisé à plusieurs endroits et qui n’est pas liée à un événement. On crée dans ce cas une procédure indépendante des évènements.
Le système des procédures permet aussi de découper un problème complexe en quelques fonctions moins complexes et indépendantes les unes des autres.
Ces procédures sont en fait des sous-programmes : si une ligne appelle une procédure, le programme ‘saute’ au début de la procédure, il effectue le code de la procédure puis revient juste après la ligne qui avait appelé la procédure et continue les lignes suivantes.
L’appel d’une procédure se fait de la sorte :
Call NomdeProcedure()
ou
NomdeProcedure()
Les procédures sont bien délimitées. Il faut distinguer 2 sortes:
• Les procédures Sub : Elles débutent par le mot Sub et se terminent par End Sub. Des arguments peuvent lui être passés mais aucun résultat n’est retourné.
• Les procédures Function: Elles débutent par Function et se terminent par End Function. Des arguments peuvent lui être passés. La différence avec une procédure « Sub » et que, parfois, on a besoin que la procédure retourne un résultat, qu'elle donne un résultat à la procédure appelante. C’est dans ce cas que l’on utilise une fonction.
Exemple :
Function SurfaceCercle(Rayon as Single) As Float
Return 3.14*Rayon*Rayon
End Function
On appelle une fonction et on récupère le résultat de la sorte suivante :
S=SurfaceCercle(12)
As Float en fin de ligne, après la fermeture de la parenthèse, indique que la fonction retourne une variable de type Float (chiffre à virgule). Il faut donc que la variable qui reçoit la valeur retournée (S dans notre exemple) soit aussi un Float.
Il existe une autre manière de retourner le résultat d'une fonction, reprenons l'exemple précédent, on peut écrire:
Function SurfaceCercle( Rayon as Single)
SurfaceCercle= 3.14*Rayon*Rayon
Exit Function
End Function
Ici on utilise le nom de la fonction pour retourner le résultat , avec un signe '='.
Exit Function permet aussi de sortir de la fonction, cela a le même effet que Return sauf que Return peut être suivi d'un argument de retour (et pas Exit Function).
Utilisez plutôt la méthodeReturn. C’est plus clair et plus conforme avec les autres langages de programmation.
Il est à noter que la fonction SurfaceCercle est une procédure non-liées à un événement et qu’elle est donc d’intérêt général
N’importe quelle procédure doit pouvoir l’appeler, de plus elle n’intervient pas sur les contrôles des formulaires et n’est donc pas lié aux formulaires.
On la placera donc dans un module standard qui est un module du programme qui ne contient que du code. (Pas d’interface utilisateur)
Pour créer un module standard Menu Projet>Ajouter un module.
L’intérêt est de regrouper les fonctions qui ont des liens dans le même module que l’on nommera de manière explicite.
Exemple : dans le module Module_Calcul_Surface, on retrouvera les fonctions surface_carre, surface_cercle, …
Avant le mot Sub ou Function on peut ajouter Private indiquant que la procédure est accessible uniquement dans le module. C’est donc une procédure privée.
Les procédures liées aux évènements d’une feuille sont privées par défaut.
Public indiquant que la procédure est accessible à partir de toute l’application.
S’il n’y a rien devant Sub et que la procédure n’est pas liée à un événement, la procédure est
Public
Le mieux est de toujours définir si une procédure est publique ou privée de manière explicite.
On a vu qu'un programme est décomposé en modules, chaque module contenant des procédures.
Chaque module correspond physiquement à un fichier '.vb'.
Il existe 3 types de modules :
• Les modules de formulaires
- Contenant le dessin des fenêtres de l’interface utilisateur (ou formulaire) et donc les contrôles (boutons, listes, zones de texte, cases à cocher…)
- Contenant aussi les procédures liées aux événements de la feuille (Button_Click)
- Contenant les procédures indépendantes des événements mais qui interviennent sur l’interface. Ce sont des Sub() ou des Function().
• Les modules standard
Ils servent de stockage de procédures. Procédures « d’intérêt général » ou « non-liées »
Ce sont des Sub() ou des Function() qui peuvent être appelées à partir de n’importe quel endroit (pourvu qu'ils soient Public).
Ils peuvent aussi servir à créer les objets ou déclarer les variables Public qui seront utilisées donc accessible par la totalité du programme.
• Les modules de Classe
Ils ont vocation à fabriquer des objets, on verra cela plus loin.
C'est l'IDE: Environnement de développement intégré de Visual Studio de Microsoft.
Quand on lance , le logiciel présente une fenêtre Projets qui permet d'ouvrir un projet existant ou de créer un nouveau projet:
Dans le cas d'une création d'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 nécessaire le chemin de l'emplacement du projet qui est par défaut ' C:\Documents and Settings\Nom Utilisateur\Mes documents\Visual Studio Projects' enfin valider sur 'Ok'.
Pour ajouter un fenêtre (un formulaire) : Menu Projet, Ajouter un formulaire Windows, Cliquer sur Windows Form, une fenêtre ‘Form1’ apparaît ('Form2' pour la seconde feuille).
La zone de travail se trouve au centre de l'écran: C'est l'onglet [Design] ci-dessous qui donne donc accès au dessin de la feuille (du formulaire) on peut ajouter des contrôles, modifier la taille de ces contrôles..
L'onglet donne accès aux procédures liées à Form1. Pour obtenir cet onglet, il suffit de double-cliquer n’importe où dans un espace libre la feuille. (en évitant tout contrôle)
La liste déroulante de gauche donne la liste des objets, celle de droite, les évènements correspondants.
Il est possible en double-cliquant dans le formulaire ou un contrôle de se retrouver directement dans le code de la procédure correspondant à cet objet.
L’ajout d’un contrôle se fait grâce au principe du « glisser-coller »
Ajouter un bouton :Cliquer sur ‘Boite à Outils’ à gauche , bouton Windows Forms, puis sur ‘Button’,cliquer dans la Form, déplacer le curseur sans lâcher le bouton, puis lâcher le bouton :
Quand une feuille ou un contrôle est sélectionné dans la fenêtre Design, ses propriétés sont accessibles dans la fenêtre de propriétés à droite en bas.
Ici ce sont les propriétés du contrôle 'Button1' (BackColor, Image, Texte, etc.… que l’on peut modifier directement.)
Pour cela il faut utiliser L'explorateur de solution en haut à droite, il permet de voir et d'avoir accès au contenu du projet:
qui est une feuille.
qui est un module standard.
Références qui contient les espaces de nom.
AssemblyInfo contient les informations nécessaires pour créer un installateur.
Il suffit de cliquer sur la ligne dans l'explorateur de solution pour voir apparaître le module et son code dans la fenêtre principale.
Si on clique sur un espace de noms dans la liste Références, cela ouvre la fenêtre Explorateur d'objet qui montre l'arborescence des Classes et une description sommaire en bas de la fenêtre.
Quand on tape du code, VB affiche, quand il le peut, des aides. VB permet de choisir dans une liste une des propriétés d'un objet.
Exemple: Si je crée une variable chaîne de caractères (Dim Chaine As String , on verra cela plus loin), et que je tape le nom de la variable suivi d'un point 'Chaîne.' la liste des méthodes possibles s'affiche.
Chaine.
Quand je pointe dans la liste un des membres (propriété ou méthode) un carré jaune affiche la définition de la fonction avec ses paramètres et une explication.
VB aide à retrouver les paramètres d'une fonction:
Si on tape le nom d'une fonction et l’ouverture d’une parenthèse, VB affiche les paramètres possibles dans un cadre.
En plus il affiche les différentes manières d'utiliser les paramètres (les différentes signatures), on peut les faire défiler avec les petites flèches du cadre jaune.
VB donne accès à l'aide sur un mot Clé. 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 accès à l'aide sur les contrôles. Si le curseur est sur un contrôle et qu je tape F1 l'aide s'ouvre pour donner accès à la description des différents membres de cet objet.
Aussi, une aide dynamique est constamment mise à jour. Pour la voir, il faut cliquer sur l'onglet 'Aide Dynamique' en bas à droite (même fenêtre que la fenêtre propriété). Elle donne une liste de liens en rapport avec le contexte en cours.
Enfin il est toujours possible de rechercher des informations en passant par le point d’interrogation de la barre d’outils :
• Sommaire (plan , arbre de l'aide)
• Index (liste des mots)
• Recherche (rechercher un mot)
L’interface utilisateur correspondant aux fenêtres et contrôles que verra l'utilisateur.
Pour rappel, on a vu que le développeur dessine cette interface en mode conception (Design) dans l'IDE.
Avec l’exemple du « Hello World », nous avions vu comment créer un projet, ajouter un formulaire Windows (Windows Form), placer un label et interagir avec ce label grâce à un bouton. Nous avions vu aussi qu’il était possible de modifier propriétés de ces objets comme la couleur de fond (propriété « backcolor ») ou le texte (propriété « Text »).
Tous les objets ont des propriétés communes.
Ces propriétés communes sont héritées de la classe Control et nous allons les détailler :
Name : il s’agit du nom de l’objet tel qu’il est géré par l’application.
Par défaut, VB baptise tous les objets que vous créez de noms génériques, comme Form1, Form2, Form3 pour les fenêtre, List1, List2 pour les listes, Label1, Label2, …
Remarque : Il est vivement conseillé, avant toute autre chose, de rebaptiser les objets que vous venez de créer afin de leur donner des noms plus évocateurs.
Il est conseillé de débuter le nom de l’objet par un mot évoquant sa nature. Microsoft conseille de préfixer les objets de la sorte :
• 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
Par exemple, le bouton sur lequel est écrit « OK » sera nommé « btnOK ».
Text : il s’agit du texte qui est associé à l’objet.
Dans le cas d’une fenêtre, c’est le texte qui apparaîtra dans la barre en haut. Pour un TextBox ou un Label c’est évidement le texte qui sera affiché.
On peut modifier cette propriété en mode conception ou dans le code.
Exemple : Avec du code comment faire pour que le bouton btnOk porte l’inscription ‘Ok’ = "Ok"
Enabled : accessible
Indique si un contrôle peut répondre à une interaction utilisateur.
La propriété Enabled permet l'activation ou la désactivation des contrôles au moment de l'exécution. Par exemple, vous pouvez désactiver les contrôles ne s'appliquant pas à l'état actuel de l'application. Vous pouvez également désactiver un contrôle pour interdire son utilisation. Par exemple, un bouton peut être désactivé pour empêcher l'utilisateur de cliquer dessus. Si un contrôle est désactivé, il ne peut pas être sélectionné. Un contrôle désactivé est généralement gris.
Exemple : désactiver le ButtonOk btnOk.Enabled = False
Visible : Indique si un contrôle est visible ou non.
Exemple : rendre invisble le bouton ‘ok’ btnOk.visible = False
Attention ! Pour rendre visible une fenêtre on utilisa la méthode .Show.
Font : Permet le choix de la police de caractères affichée dans l’objet.
BackColor, ForeColor : Couleur du fond, Couleur de l’avant plan Pour un bouton Forecolor correspond au cadre et aux caractères.
Exemple :
ButtonOk.ForeColor=
Tag : Permet de stocker une valeur ou un texte lié à l'objet.
On l'utilise souvent comme un Flag (drapeau) 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 ="CD" cela permet ultérieurement de voir ce qu'il y a dans la liste.
Ces propriétés sont communes et essentiellement utilisées. Cependant, il y a bien d'autres propriétés propres aux objets.
On a vu que les objets de l'interface utilisateur ont des procédures déclenchées par les évènements de cet objet.
C’est le cas, par exemple, quand l'utilisateur clique sur un bouton « btnOk » , la procédure btnOk_Click s'effectue.
Certains évènements sont communs à tous les contrôles:
• Click
• DoubleClick
• GotFocus
• LostFocus
• KeyUp
• KeyPress
• KeyDown
Il y a toujours des méthodes Changed déclenchées par un changement d'état: CheckedChanged pour une case à cocher, TextChanged pour un contrôle texte.
Pour ne pas alourdir les exemples, nous écrivons souvent une version simplifiée de l'en-tête de la procédure.
Elles correspondent aux fenêtres ou formulaires ou Windows Form. Toute l’interface se trouve sur des fenêtres.
Bien sur, la fenêtre possède les propriétés qui peuvent être modifiées en mode design dans la fenêtre 'Propriétés' à droite ou par du code:
Name : Nom du formulaire. Pour elles aussi, Il faut leurs donner un nom explicite. Par exemple :
FrmDemarrage
Dès qu’une fenêtre est créée, il faut modifier immédiatement ses propriétés en mode conception pour lui donner l’aspect que l’on désire.
Text : C’est le texte qui apparaîtra dans la barre en haut.
Icon : propriété qui permet d’associer à la feuille un fichier icône. Cette icône s’affichera dans la barre de Titre, tout en haut à gauche. Si la feuille est celle par défaut du projet, c’est également cette icône qui symbolisera votre application dans Windows.
WindowState : Donne l’état de la fenêtre : Plein écran (Maximized), normale (Normal), dans la barre de tache (Minimized).
Exemple: mettre une fenêtre en plein écran avec du code.
me.WindowState = FormWindowState.Maximized
(Quand on tape me.WindowsState= Vb donne la liste des valeurs possible)
ControlBox : Si cette propriété à comme valeur False, les boutons de contrôle situés à droite de la barre de la fenêtre n’apparaissent pas.
MaximizeBox : Si cette propriété à comme valeur False, le boutons de contrôle ‘Plein écran’ situés à droite de la barre de la fenêtre n’apparaît pas.
MinimizeBox : Si cette propriété à comme valeur False, le boutons de contrôle ‘Minimize’ situés à droite de la barre de la fenêtre n’apparaît pas.
FormBorderStyle : Permet de choisir le type des bords de la fenêtre : sans bord (None), bord simple (FixedSingle) ne permettant pas à l’utilisateur de modifier la taille de la fenêtre, bord permettant la modification de la taille de la fenêtre (Sizable).. Exemple:
Me.FormBorderStyle =FormBorderStyle.Sizable
StartPosition : Permet de choisir la position de la fenêtre lors de son ouverture.
Fenêtre au centre de l’écran ? à la position qui existait lors de la conception ?
Exemple :
Me.StartPosition = FormStartPosition.CenterScreen
MinSize et MaxSize : Donne les dimensions minimums et maximums que l'on peut utiliser pour redimensionner une fenêtre.
Opacity : Allant de 0% à 100%, permet de créer un formulaire plus ou moins transparent.
Me.TopMost : Pour définir au moment de la conception un formulaire en tant que formulaire d'avant-plan d'une application. Exemple :
Me.TopMost = True
2 méthodes :
• Form1.ShowDialog() : La fenêtre f est modale car on a utilisé ShowDialog : quand elle est ouverte, on ne peut pas aller dans une autre fenêtre de l'application avant de sortir de celle là. (A titre d'exemple les fenêtres MessageBox sont toujours Modales).
• () pour ouvrir une feuille non modale.
Attention : une fenêtre est un objet et est 'visible' suivant les règles habituelles des objets. Si on instance une fenêtre à partir d'une procédure, elle sera visible dans cette procédure. Si elle est 'Public' et instancié dans un module standard, elle sera visible partout.
Quand la feuille est chargée la procédure Form1_Load() est activée. On pourra donc y mettre le code initialisant la feuille.
Form1_Activated() est exécuté ensuite car la feuille deviendra active.
Form1.GotFocus() est enfin exécuté puisque la fenêtre prend le focus.
Form1.Enter() est exécuté lorsque l'utilisateur entre dans la fenêtre.
Dès qu'une propriété change de valeur un évènement propriété ‘Changed' se déclenche: Form1.BackColorChanged() se déclenche par exemple quand la couleur du fond change.
Form1.Resized() se déclenche quand on modifie la taille de la fenêtre. (c'est intéressant pour interdire certaines dimensions)
Form1.Closing() se produit pendant la fermeture de la fenêtre (on peut annuler cette fermeture en donnant à la variable Cancel la valeur True)
Form1.Closed() se produit lorsque la fenêtre est fermée.
Il y en a beaucoup d'autres comme par exemple les évènements qui surviennent quand on utilise la souris (MouveUp, MouseDown, MouseMove) ou le clavier (KeyUp, KeyDown, KeyPress) sur la fenêtre ; Left Right, Size, Position pour positionner la fenêtre ou définir sa taille..
On a déjà vu que pour faire apparaître ne fenêtre 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 rend la fenêtre invisible.
On se rend compte que quand on dessine une fenêtre Form2 par exemple, VB crée une nouvelle classe.
Public Class Form2
… End Class
Elle hérite de : on voit bien dans le code:
Inherits
Cette partie du code contient :
• du code généré automatiquement par le concepteur Windows Forms (on peut le voir en cliquant sur le petit '+') et qui crée la fenêtre et ses contrôles.
• les procédures liées aux évènements.
Name est utilisé pour lui donner un nom explicite (BoutonOk BoutonCancel)
FlatStyle donne un aspect au bouton
Text contient le texte a afficher sur le bouton.
Si on y inclut un « & » la lettre qui suit sera souligné et sert de raccourci clavier. &Ok donne sur le bouton Ok
ForeColor correspond à la couleur de ce texte
BackColor étant la couleur du fond
TextAlign permet de positionner le texte dans le bouton.
Image contient le nom de l’image à afficher sur le bouton (si on veut afficher une image).
(AlignImage permet de positionner l’image sur le bouton.)
On peut aussi puiser une image dans une ImageList grâce à la propriété ImageList et ImageIndex, on peut ainsi changer d’image.
La propriété BackGroundImage permet de mettre une image de fond.
Evènement
Click() : quand l’utilisateur clique sur le bouton la procédure Button1_Click() est traitée.
Les contrôles TextBox contiennent du texte qui peut être modifié par l'utilisateur du programme.
Text qui contient le texte qui a été tapé est la principale propriété à retenir.
La propriété .text permet aussi de modifier le texte visible dans le contrôle.
= "Bonjour" 'Affiche "Bonjour" dans le contrôle. monTexte = 'Récupération du contenu du contrôle.
Un TextBox correspond à un mini éditeur de texte.(Mais sans enrichissement : sans gras, ni italique…) La police de caractères affectant la totalité du texte peut simplement être modifiée par la propriété Font. La couleur du texte peut être modifiée par ForeColor, mais la totalité du texte aura la même couleur.
Parmi les multiples propriétés de ce contrôle, signalons :
• Multiline autorise ou non l’écriture sur plusieurs lignes.
• Scrollbars fait figurer une barre de défilement horizontale ou verticale (ou les deux)
• PaswordChar crypte le texte entré sous forme d’étoiles.
• MaxLength limite le nombre de caractères qu’il est possible de saisir.
• TextLength donne la longueur du texte
En mode « MultiLine » la collection Lines contient dans chacun de ses éléments une des lignes affichées dans le contrôle (TexBox1.Lines(0) contient la première, TexBox1.Lines(1) la seconde..).
Les TextBox contiennent une méthode Undo:annulation de la dernière modification.
La propriété CanUndo du TextBox doit être à True.
Ensuite pour modifier:
If textBox1.CanUndo = True Then () textBox1.ClearUndo() ' Vider le buffer Undo. End
On peut ajouter du texte au contenu déjà présent dans le TextBox
textBox2.AppendText(MonText)
Les événements liés au TextBox :
• KeyDown survient quand on appuie sur le touche.
• KeyPress quand la touche est enfoncée.
• KeyUp quand on relâche la touche.
TexTBox1_KeyPress permet de récupérer la touche imprimable dans e.KeyChar mais impossible d'en modifier la valeur (e.KeyChar est en lecture seule)
e.KeyDown et .KeyUp permettent, par exemple, de voir si MAJ ALT CTRL ont été pressés.
Il y a 2 sortes de Label:
• Le Label • Le LinkLabel que nous étudierons en TP
On en a déjà utilisé pour afficher le fameux « Hello World »
Les contrôles Label sont généralement utilisés pour fournir un texte descriptif à un contrôle. Vous pouvez par exemple utiliser un contrôle Label pour ajouter un texte descriptif à un contrôle TextBox. Ceci a pour but d'informer l'utilisateur du type de données attendu dans le contrôle.
Exemple:
Donner votre nom:
La légende qui s'affiche dans l'étiquette est contenue dans la propriété Text du label. Pour modifier le texte du label par du code:
="Donner votre Prénom"
La propriété Alignement vous permet de définir l'alignement du texte dans l'étiquette, BorderStyle permet de mettre une bordure (un tour) ou non..
Il est également possible d’y afficher une image avec la propriété .Image
Remarque:
La mise à jour de l'affichage du Label (comme les autres contrôles d'ailleurs) est effectuée en fin de Sub. Si on écrit:
Dim i As Integer
For i = 0 To 100
= 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 désire voir les chiffres défiler avec affichage de 0 puis 1 puis
2 il faut rafraîchir l'affichage à chaque boucle avec la méthode Refresh()
Dim i As Integer
For i = 0 To 100
= i.ToString: Label1.Refresh()
Next i
Il y a 2 sortes de case à cocher:
Les « cases à cocher » (CheckBox): Elles sont carrées, et indépendantes les unes des autres, même si elles sont regroupées dans un cadre pour faire plus joli.
Les « boutons radio » (RadioButton): Elles sont rondes et font toujours partie d’un groupe (Elle sont dans une fenêtre ou dessiné dans un objet GroupBox). Ce groupe est indispensable, car au sein d’un groupe de RadioButton, un seul bouton peut être cochée à la fois : si l’utilisateur en coche un, les autres se décochent.
Text, bien sur, permet d’afficher le libellé à coté du bouton, on peut aussi mettre une image avec la propriété Image.
CheckAlign permet de mettre la case à cocher à droite ou à gauche du texte.
Checked : la propriété la plus intéressante de ces cases car elle permet de savoir si elle est cochée ou non. Sa valeur change de False à True si la case est cochée.
RadioButton.Checked=True 'Coche le bouton
La procédure RadioButton.CheckedChange() permet d’intercepter le changement d’état d’un bouton.
Il y a 4 sortes de listes:
• Les ListBox.
• Les CheckedListBox
• Les Combos
• Les ListView.
Le contrôle « ListBox » affiche une liste d'éléments dans laquelle l'utilisateur peut faire un ou plusieurs choix.
Lorsque la propriété MultiColumn a la valeur true, la liste s’affiche avec une barre de défilement horizontale.
Lorsque la propriété ScrollAlwaysVisible a la valeur true, la barre de défilement s'affiche, quel que soit le nombre d'éléments.
La propriété SelectionMode indique le nombre d'éléments pouvant être sélectionnés en même temps.
SelectedIndex retourne un entier correspondant au premier élément sélectionné dans la zone de liste. Si aucun élément n'est sélectionné, la valeur de la propriété SelectedIndex est à -1. Lorsque plusieurs éléments sont sélectionnés, la valeur de la propriété SelectedIndex correspond au rang du premier élément sélectionné dans la liste.
La propriété SelectedItem retourne l'élément sélectionné ("poisson" dans l'exemple si dessus.
La propriété Items.Count indique le nombre d'éléments contenus dans la liste. Attention le premier élément est toujours l’élément 0, aussi le nombre d’éléments est égal au numéro de l’élément le plus haut plus un.
Items est une collection contenant tous les éléments chargés dans la liste.
Si la propriété Sorted est à True, la liste est triée automatiquement.
Pour ajouter ou supprimer des éléments dans un contrôle ListBox, il faut utiliser la méthode
, Items.Insert, Items.Clear ou Items.Remove. En mode conception, vous pouvez également utiliser la propriété Items.
Exemples :
- Charger dans une ListBox1 les nombres de 1 à 100 :
For i = 1 To 100
(i.ToString) Next i
A retenir !La listBox contient une collection d'Items. Elle n’a pas de nombre initialement défini d’élément. D’ailleurs son contenue est dans la collection ListBox.Items()
- On peut 'charger' une ListBox automatiquement avec un tableau en utilisant Datasource:
Dim tab() As String = {"one", "two", "three"}
ListBox1.DataSource = tab
- Comment connaître l'index de l'élément que l'on vient d'ajouter? (et le sélectionner)
Dim x As Integer
x = ("Hello") List1.SelectedIndex = x
On utilise la valeur retournée (x dans notre exemple) par la méthode Add.
C’est une Listbox mais avec une case à cocher sur chaque ligne.
Attention ! SelectedItems et SelectedIndices ne déterminent pas les éléments qui sont cochés, mais ceux qui sont en surbrillance. La collection stockée dans la propriété CheckedItems vous donne par contre les éléments cochés. La méthode GetItemChecked (avec comme argument le numéro d'index) détermine si l’élément est coché.
Exemple :
Pour déterminer les éléments cochés dans un contrôle CheckedListBox, testez chaque élément de la collection CheckedItems, en commençant par 0. Notez que cette méthode fournit le numéro que porte l'élément dans la liste des éléments cochés, et non dans la liste globale. Par conséquent, si le premier élément de la liste n'est pas coché alors que le deuxième l'est, le code ci-dessous affiche une chaîne du type « Item coché 1 = Dans la liste : 2 ». If CheckedListBox1.CheckedItems.Count <> 0 Then
'S’il y a des éléments cochés une boucle balaye les éléments cochés
'(collection CheckedItems) et affiche le numéro de l’élément DANS LA LISTE toutes lignes.
Dim i As Integer
Dim s As String = ""
For i = 0 To CheckedListBox1.CheckedItems.Count - 1 s = s & "Item coché " & (i+1).ToString & " = " & « Dans la liste : »& CheckedListBox1.CheckedItems(i).ToString &
Next i
(s)
End If
On rappelle comme toujours que quand on parle du 3eme élément cela correspond à l’index 2.
C’est le contrôle le plus utilisé entre toutes les listes.
Les « ComboBox » (listes combinées) possèdent deux caractéristiques essentielles par rapport aux « ListBox ».
Elles sont modifiables : c’est-à-dire que l’utilisateur a la possibilité d’entrer un élément qui ne figure pas au départ dans la liste. Cette caractéristique concerne donc les données proprement dites ; cela se traduit par la présence d’une zone de texte en haut de la liste.
Elles peuvent être déroulantes ou déjà déroulée: c’est-à-dire qu’on ne voit qu’un seul élément de la liste à la fois, et qu’il faut cliquer sur la flèche du côté pour " déplier " la liste, ou bien que la liste est déjà visible. C’est la propriété DropDownList qui gère cela.
La combos du bas a sa propriété DropDownList=Simple
L’utilisateur peut donc cliquer dans la liste (ce qui met le texte cliqué dans la zone texte), ou taper un nouveau texte.
Items.Count : propriété qui renvoie le nombre d’éléments d’une liste.
Multiselect : propriété qui permet la sélection multiple. Sorted : propriété qui trie les éléments d’une liste.
: méthode qui ajoute un élément à une liste.
Items.Clear : méthode qui efface tous les éléments d’une liste. Item.Remove : méthode qui supprime un élément de la liste.
Comment récupérer la zone texte quand elle change ?
On utilise l'évènement TextChanged qui se déclenche quand le texte est modifié.
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
=
End Sub
De plus en plus puissant, le contrôle ListView permet d’afficher des listes multi colonnes, ou des listes avec icône ou case à cocher.
La propriété View permet de déterminer l’aspect général du contrôle, elle peut prendre les valeurs :
Details permet une liste avec sous élément et titre de colonnes.
Liste utilise un ascenseur horizontal.
LargeIcon
SmallIcone
Par programmation :
= View.Details
Utilisons le mode détails (Appelé mode Rapport)
Comment remplir les en-têtes de colonnes?
Grâce à la propriété Columns, on peut déterminer le nom de la colonne, sa taille et son alignement :
(•NomColonne1•, 60, )
Comment ajouter une ligne dans un ListView ?
Dim LVI As New ListViewItem
= •col1_ligne1•
(•col2_ligne1•)
(•col2_ligne1•)
(LVI)
Ces fenêtres toutes faites existent pour vous faciliter le travail. Il existe :
• Les MessageBox.
• Les InputBox
• Les OpenFileDialog
• Les SaveFileDialog
C’est une fonction qui affiche un message dans une boîte de dialogue, attend que l'utilisateur clique sur un bouton (Ok ou Oui-Non..), puis retourne un nombre entier qui indique le bouton choisi par l'utilisateur.
(TexteAAfficher, Titre, TypeBouton, Icone,
BoutonParDéfaut)
TexteAAfficher : Obligatoire. Expression String affichée comme message de la boîte de dialogue (longueur maximale 1 024 caractères). N'oubliez pas d'insérer un retour chariot si le texte est long, cela crée 2 lignes.
Titre : Expression String affichée dans la barre de titre de la boîte de dialogue. Si l'argument Titre est omis, le nom de l'application est placé dans la barre de titre.
TypeBouton : représente la somme des valeurs spécifiant le nombre et le type de boutons à afficher :
• MessageBoxButtons.OKOnly ‘Un seul bouton : Ok
• MessageBoxButtons.YesNo ‘Deux boutons : Oui/Non
• MessageBoxButtons.OkCancel ‘OK ou Annuler
• MessageBoxButtons.AbortRetryIgnore‘Annule,Recommence, ou Ignore’
Icône : représente le style d'icône à utiliser :
• MessageBox.Icons.Exclamation
• MessageBox.Icons.Question
• MessageBox.Icons.Information
BoutonParDéfaut : définit le bouton où s’applique le focus par défaut
• MessageBox.DefaultButtons.DefaultButton1
• MessageBox.DefaultButtons.DefaultButton2
• MessageBox.DefaultButtons.DefaultButton3
Retourne une constante qui indique quel bouton a été pressé :
•
•
• DialogResult.Cancel
• DialogResult.Retry
•
Remarque : L’ancienne syntaxe VB6 avec MsgBox est conservée :
Reponse= MsgBox(TexteAAfficher, TypeBouton, Titre)
Comme en javascript, une fonction permet d’ouvrir une fenêtre qui pose une question. Elle retourne la réponse tapée par l’utilisateur. Cette fois-ci, le retour est effectué dans une simple variable String.
Dim Nom As String
Nom = InputBox("Bonjour","Tapez votre nom ?")
Cela donne :
On pourrait rajouter un 3eme argument : la réponse par défaut.
Si l’utilisateur clique sur le bouton annuler, une chaîne vide est retournée.
Ouvre une boite de dialogue permettant de choisir un nom et un chemin de fichier. Par contre, c’est au programmeur d'écrire le code lisant les fichiers.
Dans la boite à Outils, cliquez sur OpenFileDialog puis cliquez sur la fenêtre en cours : un contrôle OpenFileDialog1 apparaît sous le fenêtre.
Dans le code à l’endroit où doit s’ouvrir la fenêtre, tapez :
OpenFileDialog1.ShowDialog()
C’est suffisant pour créer une fenêtre montrant l’arborescence des fichiers et répertoires 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 répertoire précis.
Par exemple je veux ouvrir un fichier .TXT dans le répertoire c:\MesTextes
Il faut dans ce cas, AVANT la méthode ShowDialog() renseigner certaines propriétés du contrôle OpenFileDialog1 :
With OpenFileDialog1
.Filter="Fichiers txt|*.txt" 'filtre uniquement sur les .txt
.Multiselect=False 'sélectionner 1 seul fichier
.CheckFileExists=True 'Vérifie si fichier existe
End With
Comment afficher la boite et vérifier si l'utilisateur à cliqué sur ouvrir?
If OpenFileDialog1.ShowDialog= Then end if
Maintenant, OpenFileDialog1.FileName contient le nom du fichier sélectionné (avec extension et chemin)
Path.GetFileName(OpenFileDialog1.FileName) donne le nom du fichier sans chemin.
Boite de dialogue fonctionnant de la même manière que OpenFileDialog mais avec quelques propriétés spécifiques.
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 création d'un nouveau fichier
SaveFileDialo1.OverwritePrompt=True'Message si le fichier existe déjà évite l'effacement d'ancienne données
SaveFileDialo1.DefaultExt="txt"'extension par défaut
On récupère aussi dans .FileName le nom du fichier si la propriété .ShowDialog a retourné
On peut regrouper des contrôles dans :
• Les GroupBox.
• Les Panels.
• Les PictureBox.
• Les TabControl.
Il est possible de regrouper des contrôles dans un container, par exemple plusieurs RadioButton. Le container peut être un GroupBox ou un Panel.
GroupBox Panel
(AutoScroll =True et BorderStyle=Single)
Le contrôle Panel est similaire au contrôle GroupBox ; mais, seul le contrôle Panel peut disposer de barres de défilement et seul le contrôle GroupBox peut afficher une légende.
La légende de la GroupBox est définie par la propriété Text.
Ce contrôle permet de créer des onglets comme dans un classeur, entièrement gérés par VB. Chaque page peut contenir d'autres contrôles.
En mode conception, en passant par la propriété TabPages, on ajoute des onglets dont la propriété Text contient le texte à afficher en haut (Ici: Page 1..). Il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrôles.
A l’exécution, les onglets fonctionneront automatiquement.
Exemple: 3 cases à cocher permettent de colorer un label en vert rouge ou bleu. Comment gérer les évènements?
On peut écrire 3 routines complètes et identiques. Il est aussi toujours possible dans chacune des 3 procédures CouleurX.checkedChanged de vérifier si la case est cochée et de modifier la couleur.
C'est plus élégant d'avoir une procédure unique qui, en fonction de la case à cocher qui a déclenché l'évènement, changera la couleur.
Remarque : la notion de groupe de contrôle comme en VB6 n'existe plus. Par contre par l'intermédiaire du Handles, il est possible d'associer plusieurs évènements à une seule procédure:
Private Sub CouleurCheckedChanges (ByVal sender As System.Objet, ByVal e As System.EventArgs)
Handles CouleurVert.CheckedChanged, CouleurRouge.CheckedChanged, CouleurBleu.CheckedChanged
End Sub
Cette procédure sera activée quand les cases à cocher CouleurVert CouleurBleu, CouleurRouge changeront d'état.
A noter que Sender est le contrôle ayant déclenché l'évènement et e l'évènement correspondant.
Pour modifier la couleur il faut ajouter dans la procédure:
Select Case
Case "CouleurRouge"
Lbl.BackColor= ..Rouge ..
Tous les contrôles héritent donc tous de la classe Windows Forms. Les Windows Forms ont des propriétés, que tous les contrôles récupèrent. C’est ces propriétés qui vont nous servir à dimensionner et positionner nos contrôles.
Left, Top coordonnées du coin supérieur droit (ou Bottom, Right inférieur gauche) Location : coordonnées X,Y du coin supérieur droit du contrôle en pixels.
Height, Width pour la hauteur et la largeur du contrôle en pixels. Size : hauteur, largeur peut aussi être utilisé.
Exemple :
=188
=300
Ou
Button.Location= New System.Drawing.Point(188,300)
(System.Drawing.Point() positionne un point dans l’espace)
Pour que l’utilisateur puisse redimensionner la fenêtre qu’il a sous les yeux (en cliquant sur les bords) il faut que la propriété FormBorderStyle de la fenêtre = Sizable.
Mais si l’utilisateur modifie la taille de la fenêtre qui contient les contrôles, la taille des contrôles ne suit pas.
En , la propriété Anchor permet d’ancrer les contrôles aux bords de la fenêtre.
Le bord ancré d’un contrôle reste à égale distance du bord du conteneur quand le conteneur (la fenêtre) est redimensionné.
En mode conception il suffit de cliquer sur '. . .' en face de Anchor pour voir s’ouvrir une fenêtre, cliquer sur les bords que vous voulez ancrer. Par défaut les bord Top (haut) et left(gauche) sont ancrés : vos contrôles ne bougeront donc pas au re-dimensionnement de la fenêtre (qui sert de conteneur) sur ces bords gauche et bas.
Exemple :
Prenons 2 contrôles dans une fenêtre, celui de gauche a la propriété Anchor=left et celui de droite à left et right.
Si je déplace le bord droit (ou le gauche d’ailleurs) : le contrôle droit est redimensionné, les 2 contrôles restent cote à cote.
Dock
Amarre aux bords. Il y a même possibilité d’amarrer aux 4 bords (Fill) pour remplir le conteneur. On va utiliser cela pour faire une barre d’état par exemple.
Beaucoup d’applications contiennent un menu. En général, on remarque que le contenu de ce menu (Fichier, Edition, Outils, Aide, …) est standardisé afin que l’utilisateur s’y retrouve sans aide.
Pour créer le principale menu de votre application, Iil suffit de chercher dans la boite à outils le contrôle qui se nomme « main menu » et le déposer sur la fenêtre : il apparaît en dessous de la fenêtre.
Pour inscrire les différents éléments du menu, il suffit de mettre le curseur sur le menu en haut de la fenêtre, ou est écrit « Taper ici » : tapez le texte du menu, « Fichier » par exemple.
Il apparaît automatiquement un ‘Tapez Ici‘ pour les lignes dessous (le sous-menu) ou le menu suivant.
Les lignes du menu sont nommées automatiquement MenuItem1, MenuItem2,
Quand le curseur est sur une ligne du menu, la fenêtre de propriété donne les propriétés de la ligne :
• La propriété ShortKey permet de créer un raccourci.
• La propriété Checked permet de cochez la ligne
• La propriété Visible permet de faire apparaître ou non une ligne.
Si vous double-cliquez sur la ligne du menu vous voyez apparaître la procédure événement liée à la ligne du menu :
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem1.Click
End Sub
Quand l’utilisateur clique sur une ligne du menu, c’est le code contenu dans cette procédure qui est effectué.
C'est un menu qui s'ouvre quand, sur un objet, on clique sur le bouton droit de la souris.
En allant dans la boite à outils, chercher un Context menu, on le dépose sur la fenêtre : il apparaît en dessous de la fenêtre.
Si on le sélectionne avec la souris, il apparaît en haut et comme pour le menu principal, on peut ajouter des lignes.
Il faut ensuite affecter ce Context Menu à un contrôle; pour cela donner à la propriété ContextMenu du contrôle le nom du ContextMenu.
TextBox1.ContextMenu= ContextMenu1
Si vous double-cliquez sur une ligne du menu vous voyez apparaître les procédures évènement correspondantes.
Lorsqu'une fenêtre ou un contrôle est actif on dit qu'il a le focus. Si une fenêtre prend le focus, sa barre de titre en haut prend la couleur active, si c'est un contrôle texte, le curseur apparaît dedans.
Comment donner le focus à une fenêtre ?
Si une fenêtre est visible la méthode Activate lui donne le focus.
Form1.Activate()
Dans ce cas l'évènement Form1_Activated survient. L’événement Form1_Deactivated est déclenché quand la fenêtre perd le focus.
Comment donner le focus à un contrôle ?
TxtNom.Select() 'donne le focus au textBox et met le curseur dedans.
Rappel : On peut interdire a un contrôle le focus en donnant la valeurFalse à sa propriétéCanFocus.
L'évènement GotFocus se produit quand le contrôle prend le focus.
Private Sub TextBox1_GotFocus(ByVal sender As Object, ByVal e As
System.EventArgs) Handles TextBox1.GotFocus
End Sub
L'évènement LostFocus se produit quand le contrôle perd le focus.
Les évènements Enter, Leave se produit quand l'utilisateur entre ou sort du contrôle. En plus du focus, cela permet d’obtenir un verrou exclusif sur ce contrôle. En d’autres termes, si un autre processus tente d’accéder au contrôle, il se mettra en attente jusqu’à ce que le premier contrôle libère le verrou avec Leave.
Certains contrôles ne peuvent pas avoir le focus, comme les labels par exemple.
Dans une application ou un utilisateur saisi beaucoup de données dans de multiples contrôles, il passe souvent d'un contrôle (TextBox par exemple) au suivant avec la touche TAB.
|
Comment permettre cela? Chaque contrôle à une propriété TabIndex qui s'incrémente automatiquement en commençant par 0 puis 1, 2, 3 quand on ajoute des contrôles sur une fenêtre.
Lorsque l'utilisateur appuie sur TAB, le focus passe au contrôle qui a le TabIndex immédiatement supérieur.
On peut modifier le TabIndex des contrôles pour modifier l'ordre de tabulation.
Quand TabStop a la propriété False (au niveau d'un contrôle) celui ci est exclu de l'ordre de tabulation et le focus ne s'arrête pas.
Dans beaucoup d'applications certains contrôles ont un raccourci clavier:
Exemple: Nouveau est une ligne de menu. N étant souligné, ALT-N déclenche la ligne de menu, donne le focus au contrôle.
Comment faire cela: Dans la propriété Text du contrôle, quand on tape le texte en mode conception, il faut mettre un '&' avant la lettre qui servira de raccourci clavier.
'&Nouveau' dans notre exemple donnera bien Nouveau et ALT N fonctionnera.
Pour une TextBox, la propriété Text ne peut pas être utilisée, aussi il faut mettre devant la
TextBox un contrôle label (qui lui ne peut pas avoir le focus), si le TabIndex du label et du
TextBox se suivent, le fait de faire le raccourci clavier du Label donnera le focus au TextBox.
En règle générale, la barre de boutons représente des raccourcis sur les fonctions les plus utilisées dans le « main menu ».
Voici un exemple classique, sous le menu il y a une barre de bouton: Nouveau, Ouvrir, Enregistrer, Chercher, Imprimer
Il faut chercher dans la boite à outils un contrôle ToolBar, il se place en haut, sous le menu. Mettre aussi un ImageList. (Un contrôle ImageList est un contrôle qui stocke des images, chaque image étant chargés en mode conception et repérées par un numéro (0,1,2,3..)
Dans les propriétés du ToolBar mettre dans la propriété ImageList, le nom du contrôle ImageList qui contient les images des boutons.
Ouvrir la collection Buttons dans la fenêtre des propriétés de la ToolBar pour pouvoir ajouter ou modifier les boutons:
Vous pouvez ajouter ou enlever des boutons. Chaque bouton a ses propriétés affichées à droite:
• Name : Nom du Bouton
• ImageIndex donne le numéro de l'image (contenue dans l'ImageList) qui doit s'afficher dans le bouton.
• ToolTipText donne le texte du ToolTip (Carré d'aide qui apparaît quand on est sur le bouton) Il faut aussi que la propriété ShowToolTip de la ToolBar soit à True
L'évènement déclenché par le click de l'utilisateur sur un bouton est: ToolBar1_ButtonClick
L'argument e contient les arguments de l'évènement click de la ToolBar. e.Button contient le nom du bouton qui a déclenché l'évènement. Pour chaque nom de bouton, on appellera la procédure correspondante ensuite.
Comme d'habitude, il suffit de double-cliquer sur la ToolBar pour faire apparaître
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()
End If
End Sub
La barre d'état se trouve en bas de la fenêtre et affiche des informations relatives aux opérations en cours.
Dans la fenêtre des propriétés 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"
Pour afficher des images, il existe le contrôle PictureBox.
Le contrôle PictureBox sert à afficher des graphismes au format bitmap, GIF, JPEG ou icône (Extension .BMP .GIF .JPG .WMF .ICO). Les GIF animés sont acceptées et s'animent sous VB.
L'image affichée est déterminée par la propriété Image, laquelle peut être définie au moment de l'exécution ou du design. La propriété SizeMode détermine la façon dont l'image et le contrôle se dimensionnent l'un par rapport à l'autre.
On peut charger une image en mode conception ou dans le code:
PictureBox1.Image = Image.FromFile("")
(L'objet de la Classe Image charge une image d'un fichier puis l'affecte à la propriété Image.)
Remarque : Pour quoi la syntaxe suivante ne fonctionne t’elle pas ?
PictureBox1.Image.FromFile("")
Car, dans la première syntaxe la première utilisation du mot « image » est pour une propriété du PictureBox et la seconde utilisation du mot « image » représente la classe Image.
Comment effacer une image?
If Not (PictureBox1.Image Is Nothing) Then
PictureBox1.Image.Dispose() ‘destructeur (pour l’objet image affecté à la propriété image)
PictureBox1.Image = Nothing ‘Réinitialisation de la valeur par défaut de la propriété Image (Propriété Image à Null)
End If
Les objets de la Classe Image ont, comme d'habitude, des propriétés et des méthodes.
La méthode RotateFlip permet par exemple d'effectuer une rotation de l'image; quand on tape le code, VB donne automatiquement la liste des paramètres possible.
PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipX)
La méthode Save sauvegarde l'image dans un fichier.
("c:\")
Noter bien que le nom de l'extension suffit à imposer le format de l'image. On peut charger une image .GIF puis la sauvegarder en .BMP
Il y a bien d'autres propriétés gérant les dimensions, la palette de l'image.
Le contrôle ImageList sert de containeur à image, c'est une collection d'images. Les images qu'il contient seront utilisées par d'autres contrôles (PictureBox, Listview, TreeView, Button .). Il n'est pas visible en exécution.
En conception il apparaît en bas sous la fenêtre. A droite figurent ses propriétés, en particulier, la collection Images qui contient les images et la propriété TransparentColor qui indique la couleur qui doit être transparent, c'est à dire non visible.
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ée.
Ensuite pour utiliser une image de l'ImageList dans un autre contrôle, il faut modifier les propriétés de cet autre contrôle (un bouton par exemple).
La propriété ImageList du bouton doit contenir le nom du contrôle imageList et ImageIndex du bouton doit contenir l'index de l'image dans l'imageList.
btOk.ImageList = imagelist1 btOk.ImageIndex = 2
Un ImageList peut aussi être chargée par code:
(Image.FromFile(NomImage))
On ajoute à la collection Images une image venant d'un fichier nommé NomImage. On peut surchargé la méthode Add en fournissant en plus la couleur transparente.
(Image.FromFile(imageToLoad),
CouleurTransparente)
La taille des images peuvent aussi être modifiée par code:
imageList1.ImageSize = New Size(255, 255) imageList1.TransparentColor = Color.White
Il faut déclarer une variable avant de l’utiliser, pour cela on utilise l’instruction DIM
Dim Str As String ‘Déclare une variable nommée Str
Cette variable peut être utilisée pour conserver une chaîne de caractère. Dans ce cas, on fait une affectation.
Str= "TOTO"
On peut afficher le contenu de la chaîne dans un label (zone présente dans une fenêtre et ou on peut afficher du texte) par exemple :
= Str
Remarquons que pour définir une chaîne de caractères il faut utiliser des " " : Ce qui est entre " et " est la chaîne de caractères. On parle de chaîne littérale: (une représentation textuelle d'une valeur particulière)
Après avoir été crée une String contient « NOTHING » et non pas une chaîne vide (""), il faudra l'initialiser pour qu'elle contienne quelque chose.
Dim Str As String 'Str contient Nothing
Str= "" 'Str contient "" : chaîne vide
Str= "TOTO" 'Str contient "TOTO"
Si je veux inclure un caractère " dans la chaîne il faut le doubler pour qu'il ne soit pas considérer comme caractère de fin de chaîne:
Str="Bonjour""TOTO""" 'Afficher cela donne : Bonjour "TOTO"
On peut initialiser la variable en même temps qu’on la dimensionne.
Dim Chaîne as string = "Toto"
On peut dimensionner plusieurs variables d'un même type sur une même ligne.
Dim x, y, z As String 'Dimensionner 3 variables string
Les Variables 'chaîne de caractères' sont des objets 'STRING'. Le type String (Chaîne de caractères) est une Classe qui a des méthodes.
Pas besoin de connaître toutes les méthodes, il suffit (Après déclaration de la String par DIM Str AS String) de taper Str. .Et vous voyez apparaître toutes les propriétés et méthodes :
.Split
.StarsWith
..
.ToUpper
.Trim
.ToUpper
Mettre en majuscules une chaîne de caractère
Str=Str.ToUpper() ‘Si Str contenait "abc", il contiendra "ABC"
.ToLower
Transforme par contre la chaîne en minuscule.
Les intérêts de ces deux fonctions sont multiple : pour la mise en page mais aussi quand on doit comparer 2 string pour savoir si elle sont égales, la première a été saisie par l’utilisateur et je ne sais pas si l’utilisateur a tapé en majuscule ou en minuscules.
Si je compare A = "Vb" et B= "vb" elles sont différentes.
Si je compare A.ToLower et B.ToLower elles sont égales.
.Trim
Permet de supprimer des caractères en début et fin de chaîne.
Dim A As String = "#@[email protected]#"
Dim B As Char() = {"#", "@"}
(B)'Donne A= "Informatique"
Attention : Bien utiliser Char() qui est un tableau de caractères pour définir les caractères à supprimer.
Dim B As string= "#@" est déconseillé car produisant des résultats curieux. On peut à la rigueur utiliser les String pour un seul caractère.
Pour enlever les espaces avant et après la chaîne (Cas le plus fréquent) :
(" ")
Il existe aussi StartTrim et EndTrim pour agir seulement sur le début ou la fin de la chaîne.
.Length
Taille d’une chaîne en nombre de caractère.
Dim S as String= "VB"
(S.Length.ToString) ‘Affiche 2
.Concat
Concaténation de plusieurs chaîne : mise bout à bout :
S = String.Concat(A,B)
Vous pouvez aussi utiliser l’opérateur de concaténation : S=A&B
(S=A+B marche mais est déconseillé)
.Insert
Insère une chaîne dans une autre.
Dim S as string= "VisualBasic"
S= A.Insert(6," " ) ‘Donne S= "Visual Basic"
.Replace
Remplace partout dans une chaîne de départ, une chaîne par une autre.
Dim S as string= "Visual_Basic"
S= S.Replace("_"," " ) ‘Donne S= "Visual Basic"
Dim LaDate as string= "12.02.1990"
LaDate= LaDate.Replace(".","/" ) ‘Donne S= "12/02/1990"
.Split
Découpe en plusieurs sous Chaînes une chaîne de départ, cela par rapport à un séparateur.
Dim S as string= "Philippe;Jean ;Toto"
Dim Separateur as Char = ";"
Dim Nom() as String ‘Tableau de String
Nom=S.Split(Separateur)
Donne :
Nom(0)= »Philippe »
Nom(1)= »Jean »
Nom(2)= »Toto »
Remarque: Quand on dimensionne Nom(), on ne donne pas le nombre d'élément, c'est Split qui crée autant d'élément qu'il faut.
.IndexOf .LastIndexOf
Indique le numéro du caractère, la position (la première occurrence) ou une chaîne à chercher est trouvée dans une autre.
Dim A as String= ""
Dim chrPoint as Char()={"."}
Dim chrE as Char()={"."}
A.IndexOf(chrPoint) ‘retourne 3 (la numérotation commence à 0)
A.LastIndexOf(chrE) ‘retourne la dernière occurrence du E = 6
.Compare
Compare 2 chaînes :
String.Compare(a,b)
Retourne un entier
• Négatif si a<b
• 0 si a=b
• Positif si a>b
.Substring
Extrait une partie d’une chaîne
Dim A as string= "Informatique"
(A.Substring(2,3)) ‘Affiche for
.Char
Une chaîne peut être perçue comme un tableau de caractères (instances Char) ; vous pouvez extraire un caractère particulier en faisant référence à l'index de ce caractère par l'intermédiaire de la propriété Chars. Par exemple :
Dim maString As String = "ABCDE" Dim monChar As Char
monChar = maString.Chars(3) 'monChar = "D"
Une variable numérique peut contenir des données numériques. Une variable numérique peut être entière:
• Integer (entier)
• Short (entier court)
• Long (Entier long)
• Byte (entier de 0 à 255)
mais aussi, une variable peut être réelle (avec virgule)
• Single (virgule flottante simple précision)
• Double (virgule flottante double précision)
• Decimal (virgule fixe haute précision)
On déclare une variable numérique avec DIM, on peut l’initialiser en même temps :
Dim i as Integer= 3
Si la variable est numérique, il faut la transformer en String avant de l’afficher :
Dim I As Integer=12
= I.ToString
.ToString fait partie des méthodes. Il y en a d'autres:
.GetType retourne le type de la variable
Dim i As Integer
= i.GetType.ToString 'Affiche: System.Int32
.MaxValue .MinValue donne le plus grand et le plus petit nombre possible dans le type de variable.
On verra qu’on peut utiliser des opérateurs + - * / .
Dim I As Integer = 2
Dim J As Integer
J=I+3 ‘ J sera égal à 5 car on affecte à J la valeur I+3
On rappelle que le séparateur est le point :
J=1.2 ‘veut dire J=1,2 en bon français !!
Il existe des fonctions mathématiques. Pour quelles soient disponibles il faut d’abord importer l’espace de nom Import
Dim N As Single
Dim R As Single
R=Abs(N) ‘retourne la valeur absolu
‘Si N=-1.2 R=1.2
R=Sign(N) ‘retourne le signe
‘Si N=-1.2 R=-1 (négatif) ; retourne 1 si nombre positif
R=Round(N) ‘retourne le nombre entier le plus proche ‘ N=1.7 R=2
‘ N=1.2 R=1
‘ N=1.5 R=2
On peut donner en second paramètre le nombre de digit:Math.Round(Valeur, 2)donnera 2 décimales après la virgule.
R=Floor(N) ‘retourne le plus grand entier égal ou inférieur.
‘ N=1.7 R=1
R=Ceiling(N)‘retourne le plus petit entier égal ou supérieur
‘ N=1.2 R=2
R=Max(2,3) ‘retourne le plus grand des 2 nombres.
‘retourne 3
R=Min(2,3) ‘retourne le plus petit des 2 nombres.
‘retourne 2
R=Pow(2,3) ‘retourne 2 puissance 3. ‘retourne 8
R=Sqrt(9) ‘retourne la racine carré.
‘retourne 3
Le type de données Boolean correspond à une valeur non signée interprétée comme True ou False. Si une variable est destinée à ne contenir que des informations de type true/false, yes/no ou on/off, déclarez-la avec un type Boolean.
La valeur par défaut de Boolean est False. Dans l'exemple suivant, RunningVB est une variable de type Boolean qui enregistre une simple valeur yes/no.
Dim bool As Boolean ' par défaut bool = False
If bool = False Then
("La valeur par défaut est bien FALSE") End If
Type VB Structure de type Allocation de CLR stockage nominal | Plage de valeurs | ||
Boolean | System.Boolean | 2 octets | True ou False. |
Byte | 1 octet | 0 à 255 (non signés). ![]() | |
Char | 2 octets | 0 à 65 535 (non signés). | |
Date | System.DateTime | 8 octets | 0:00:00 le 1er janvier 0001 à 23:59:59 le 31 décembre 9999. |
Decimal | System.Decimal | 16 octets | 0 à +/-79 228 162 514 264 337 593 543 950 335 sans décimale ; 0 à +/- 7,9228162514264337593543950335 avec 28 décimales ; le plus petit nombre différent de zéro étant +/-0,0000000000000000000000000001 (+/-1E-28). |
Double (virgule flottante à double précision) | System.Double | 8 octets | -1,79769313486231E+308 à -4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486231E+308 pour les valeurs positives. |
Integer | System.Int32 | 4 octets | -2 147 483 648 à 2 147 483 647. |
Long (entier de type Long) | System.Int64 | 8 octets | - 9 223 372 036 854 775 808 à 9 223 372 036 854 7 75 807. |
Object | System.Object (classe) | 4 octets | N'importe quel type peut être stocké dans une variable de type Object. |
Short | System.Int16 | 2 octets | -32 768 à 32 767. |
Single (virgule flottante en simple précision) | System.Single | 4 octets | -3,402823E+38 à -1,401298E-45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E+38 pour les valeurs positives. |
String (longueur variable) | System.String (classe) | Dépend de la plateforme d'implémentation | 0 à environ 2 milliards de caractères Unicode. |
On a vu qu'on peut afficher les chaînes de caractères, on fait des calculs avec les variables numériques.
L’intérêt de convertir peut se retrouver si on veut afficher un résultat numérique. En effet, on ne peut afficher que des String (chaîne de caractères) dans un label ou un textBox par exemple.
Aussi, il faut transformer cette donnée numérique en chaîne avant de l’afficher, on le fait avec la méthode .ToString :
Dim I As Integer=12
= I.ToString ' Conversion String=>numérique : Affiche '12'
A l’inverse une chaîne de caractère peut être transformée en numérique :
Par exemple, l'utilisateur saisie un nombre, mais il tape des caractères au clavier et c'est cette chaîne de caractères qui est retournée, il faut la transformer en numérique.
Dim S as String
Dim i as Integer
'Saisie par une InputBox de la valeur S="45"
I=Integer.Parse(S)
Dans cet exemple, on observe que le type Integer qui a une méthode (Parse) qui transforme une chaîne en entier.
On peut aussi utiliser, et c’est plus simple, CType pour convertir n’importe quel type en n’importe quel type :
Il suffit de donner à cette fonction la variable à modifier et le type à obtenir.
I=Ctype(S,Integer)
CType fait toutes les conversions, mais on peut aussi utiliser des fonctions qui sont spécifiques 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()
CStr()
Exemple : CDbl convertit expression et retourne un 'Double'.
Dim I As Integer=123
Dim D As Double
D=CDbl(I) 'donnera D=123 D est un Double
Remarque:
Il faut faire attention aux conversions de types car cela peut donner de drôles de résultats. Par exemple, les fonctions CInt et CLng devraient arrondir les parties décimales égales à 0,5 au nombre pair le plus proche. Par exemple, 0,5 s'arrondit à 0 et 1,5 s'arrondit à 2. Bizarre!!
La Classe System.Convert permet la conversion d'un type de base vers un autre: Quelques Exemples :
.ToString exemple : str = System.Convert.ToString(byteVal)
.ToByte ‘Pour convertir un Single en Byte
.ToSingle ‘Pour convertir un Byte en Single
.ToDecimal ‘en Decimal
On a des méthodes pour pratiquement convertir tous les types et tous les types. Rechercher dans la documentation pour le type qui vous intéresse.
On verra plus loin, la fonction Format utilisée pour convertir les valeurs numériques que vous voulez mettre aux formats dates, heures ou monnaie ou dans d'autres formats définis par l'utilisateur.
IsNumeric()
On utilise la fonction IsNumeric() pour déterminer si le contenu d'une variable peut être évalué comme un nombre, si la conversion est possible. 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.
Les tableaux permettent de classer des données de même type. Les tableaux vous permettent de faire référence à un ensemble de variables par le même nom et d'utiliser un numéro, appelé index ou indice, pour les distinguer.
Comment déclarer un tableau :
Dim Tableau(3) As Integer
Entraîne la création des 3 variables entiers sachant que les index commencent à 0.
Noter que comme c'est un tableau d'entiers, juste après la création du tableau les éléments sont initialisés à 0.
Tableau(1)= 12 ‘affecte le nombre 12 au 2eme élément du tableau.
Un tableau peut avoir plusieurs dimensions :
Dim T(2,2) as integer ‘3 X 3 éléments
Pour un tableau à 2 dimensions le premier argument représente les lignes, le second les colonnes.
1,1 | 1,2 | 1,3 |
2,1 | 2,2 | 2,3 |
3,1 | 3,2 | 3,3 |
Il est possible de créer des tableaux à 3, 4, etc.… dimensions:
Dim T(2,2,2) ‘3X3X3 éléments.
On peut créer des tableaux de tableaux:
Dim T(2),(2) ‘Il a autant d'élément que le tableau T (2,2)
Il est possible de créer des tableaux avec tous les types de variable (y compris les structures)
On peut instancier les éléments d’un tableau lors de sa déclaration :
Dim Mois() As String = {Janvier,Février,Mars……}
On verra dans un des exemples que l'on peut créer un tableau avec la méthode CreateInstance. Redim permet de redimensionner un tableau, si on ajoute Preserve les anciennes valeurs seront conservées.
ReDim Preserve Tableau(0 To 4)
Erase efface le tableau et récupère l’espace.
Un tableau est un objet !!
Créons 2 tableaux et examinons les principales méthodes.
Dim a(3) As String Dim b(3) As String
b=a ‘Copie le tableau a dans b
‘Est équivalent
Attention: il copie les références (l’adresse, l’endroit 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 (l’adresse en mémoire) est copié.
Pour obtenir une copie ‘indépendante’ faire : b=a.clone
Dans ce cas si vous modifié a(2), b(2) ne sera pas modifié.
Tous les tableaux viennent de la classe Array; vous pouvez accéder aux méthodes et propriétés de System.Array de chaque tableau Par exemple, la propriété Rank retourne le nombre de dimension du tableau et la méthode Sort trie ses éléments.
Exemple : Soit un tableau Mois()
Array.Clear(Mois,0,2) ‘Efface 2 éléments à partir de l’élément 0
Array.Reverse(Mois, 1, 3) ‘inverse 3 éléments à partir de l’élément 1
(Mois,1,Mois2,1,20) ‘copie 20 éléments de Mois à Mois2 à partir du 2eme élément.
(Mois) ‘Trie le tableau Mois
Malheureusement cette méthode marche sur des tableaux unidimensionnels uniquement.
Equals qui compare 2 tableaux.
IndexOf recherche un objet spécifié dans un tableau unidimensionnel (trié ou non), retourne l'index de la première occurrence.
Dim myIndex As Integer = Array.IndexOf(myArray, myString)
Retourne -1 si l'élément n'est pas trouvé.
LastIndexOf fait une recherche à partir de la fin.
Ubound retourne le plus grand indice disponible pour la dimension indiquée d'un tableau
Dim MonTableau(10, 15, 20) ‘ tableau multi-dimensionnel 10x15x20
Indice = UBound(MonTableau, 1) 'Retourne 10 (1=la 1ère dimension)
Indice = UBound(MonTableau, 2) 'Retourne 15 (2=la 2ème dimension)
Indice = UBound(MonTableau, 3) 'Retourne 20 (3=la 3ème dimension)
Length retourne un entier qui représente le nombre d'éléments dans le tableau.
Fait partie de System.Collections. Plus qu’une alternative aux tableaux, l’objet collection est une référence principalement utilisée dans Visual Basic afin d'assurer le suivi de divers éléments, tels que tous les contrôles d'un formulaire (par exemple, la collection Controls).
Par ailleurs, les utilisateurs peuvent créer leurs propres collections afin d'organiser et de manipuler des objets.
Une collection fonctionne plutôt comme un liste d'éléments dans laquelle il est possible d’ajouter ou d’enlever un élément à n’importe quel endroit sans avoir à se préoccuper de sa taille ni ou se trouve l'élément.
Le nombre d'élément n'est pas défini au départ comme dans un tableau. Dans une collection il n'y a que les éléments que l'on a ajoutés.
La particularité des collections réside sur les éléments qui sont repérés grâce à une Clé unique comme les listes et à un index comme les tableaux.
Les items affichées dans une ListBox donne une idée concrète de ce qu'est une collection.
Pour créer une collection d'objets, vous devez premièrement créer l'objet Collection.
Dim maCollection As New Collection
Dès que cet objet est créé, vous pouvez ajouter, enlever ou manipuler des éléments.
On utilise la syntaxe: ( élément, Clé) ("Bonjour", "30") ("Monsieur", "31") ("Et", "32")
("Madame", "33")
Il peut y avoir 2 autres paramètres:
(strElement, strClé, Before, After)
Dim maCollection As New Collection ("Element1", "1") ("Element3", "3", , 1)
("Element2", "2", 2)Before ou After peuvent être utilisés pour placer l'élément à insérer avant ou après un élément de la collection. Si Before ou After est un nombre c'est l'index des éléments qui est utilisé, si c'est une string c'est la clé.
La propriété Item permet l’accès aux éléments de la collection :
= ("33")'retourne Madame (l’élément correspondant à la clé 33)
= (4)'retourne Madame aussi (le 4ème index)
Attention le premier élément est ici l'élément 1 (l'index va de 1 à Count); c'est hérité du VB!!
Dans la mesure où la propriété Item est la propriété par défaut d'un objet Collection, vous pouvez l'omettre lorsque vous accédez à un élément d'une collection. Il est donc également possible d'écrire les exemples de code précédents comme suit :
= maCollection("33")
= maCollection(4)
La méthode Remove permet de supprimer un élément d'une collection :
object.Remove(index | key)
L'argument index peut être l'emplacement de l'élément à supprimer ou la clé de l'élément. Vous pouvez donc utiliser l'une des deux instructions suivantes pour la suppression d’un élément : maCollection.remove("33")
maCollection.remove(4)
La ArrayList est une collection particulière. C’est une version élaborée d’un tableau. Comme les tableaux,
• il n'y a pas de clé mais un index
• la capacité des listes d’objets n’est pas fixe
• elles fournissent des méthodes qui permettent d'ajouter, d'insérer ou de supprimer une série d'éléments.
• elles sont limitées à une dimension, pas les tableaux !
Attention le premier élément est ici l'élément 0 (l'index va de 0 à count-1) ; c'est du .NET!!
Dim L As New ArrayList() ‘On crée une collection ArrayList
Dim L As ArrayList = ArrayList.Repeat("A", 5)'On crée une collection de 5 éléments contenant chacun "A" (on répète "A")
L.Add("Bonjour") 'On ajoute un élément à la collections (L(0)) 'ou L.Item(0) : On affiche le 1er élément
(L.Count.ToString) 'On affiche le nombre d’élément.
L.Remove("Bonjour") 'On enlève un élément de la liste
L.Sort() 'Trie la collection
L.Clear() 'Efface tous les éléments
L.Containts("Bonjour") 'retourne True (la liste contient élément)
L.RemoveAt(0) 'On enlève l’élément 0 de la liste
L.Insert(position, aInserer) permet d’insérer à un index spécifié InsertRange insère une ArrayList dans une autre ArrayList.
Mêmes fonctionnalités que pour une collection mais limité sur le type chaîne. Cela à pour but d’optimiser l’exécution.
Dim myCol As New StringCollection()
(string)
Optimisé pour le stockage de paires clé/valeur.
La clé toujours unique permet de retrouver la valeur
Dim H As New Hashtable()
H.Add(Clé,Valeur) ’Ajoute un élément
H.Item(Clé) ’Retourne l’élément correspondant à une clé. H.ContainsKey(Clé) ’Retourne True si la clé est dans la table.
Collection de type FIFO (First In, First Out) : premier arrivé, premier sorti.
Dim myQueue As New Queue()
myQueue.DeQueue() supprime et retourne l’objet de début de liste myQueue.EnQueue(valeur) ajoute un objet en fin de liste () retourne l’objet de début sans le supprimer
Collection de type LIFO (Last In, First Out) : dernier entré, premier sorti.
Dim myStack As New Stack()
(valeur) insère un objet en haut de la pile () enlève et retourne un objet en haut de la pile
On peut utiliser une pile dans un programme pour gérer le déplacement de l'utilisateur dans un arbre, les éléments en cours sont stockés par Push, pour remonter en chemin inverse, on Pop. Généralisation de la notion de collection.
Certains objets ont une liste de donnée, Vb les organise en Collections. Généralités sur les collections
1er point : Une collection peut donc faire partie des propriétés d'un objet.
On a vu, par exemple, qu’un TextBox peut contenir du texte, et bien, ce contrôle à une collection nommé TextBox1.lines qui contient chaque ligne du texte (s'il y en a plusieurs : multiline=true)
Autre exemple, les contrôles ListBox possède une collection Items dans laquelle sont placé tous les éléments contenus dans la liste. Pour ajouter un élément on utilisera la méthode Add() de la collection Items: ( )
Encore plus: chaque formulaire possède une Collections Controls. Il s'agit d'une collection qui contient tous les contrôles de ce formulaire.
2ème point : Pourquoi le premier élément est 0 ou 1?
Le .NET Framework normalise les collections comme étant des collections de base zéro (ArrayList par exemple). La classe Collections de Visual Basic sert principalement à assurer une compatibilité avec des versions précédentes et fournit des collections de base 1.
3ème point : Les collections font partie de l'espace de nom System.Collections
Imports System.Collections
VB est naturellement très arrangeant. Par défaut il transforme, quand c’est possible, et si nécessaire un type de variable en un autre type.
Si je passe un nombre qui est en Double précision (Double) dans une variable en simple précision (Single), VB accepte, au risque de perdre de la précision (s’il y a un très grand nombre de chiffre significatif).
Dim D As Double
Dim S As Single
D=0.123456789
S=D 'affectation d’un type vers un autre type différent
(s) 'affiche 0,1234568
Cela peut être ennuyeux si c’est des calculs précis et le programmeur ne s’en rend pas forcément compte !!
Pour éviter cela il faut activer l’OPTION STRICT à ON Pour un projet en cours :
Menu Projet > Propriétés de Nom de projet.
Page de propriétés de Langage VB. Propriétés communes, génération.
En face de Option Strict, mettre On
Pour mettre l’option SCTRICT à ON par défaut pour tous les projets
Menu Outils > Option
Dans « Projet » puis « Valeurs par défaut VB »
En face de Option Strict, mettre On
Maintenant seules les conversions effectuées explicitement seront autorisées.
Ainsi, S=D est souligné dans le code pour signaler une conversion interdite.
(Par contre D=S est accepté car on passe d'une variable à une variable plus précise)
Il faudra maintenant, pour notre exemple, écrire :
S= CType(D,Single)
‘Cela entraîne une conversion de la valeur Double en Single ; s’il y a perte de précision, elle se produit quand même, MAIS le programmeur SAIT qu’il y a conversion, il prendra ou pas EN CONNAISSANCE DE CAUSE le risque.
Pour la déclaration des variables nous avions dit que toute variable utilisée devait être déclarée. Par défaut c’est vrai.
On pourrait (c’est fortement déconseillé) mettre cette option à Off. Cela ne rendrait plus obligatoire la déclaration des variables.
MaVariable=10 sans déclaration préalable serait acceptée.
Cela présenterait certains inconvénients : Si on faisait une faute de frappe en tapant le nom d’une variable, VB accepterait et créerait une nouvelle variable objet.
Dim MaVariable
MaVariabble=10 ‘Faute de frappe(bb)
Dans ce cas, je crois avoir mis 10 dans MaVariable. En fait j’ai mis 10 dans une nouvelle variable nommée MaVariabble. Mavariable à toujours une valeur=0.
Donc, c’est clair et sans appel : laissez Option Explicit à On. Dans ce cas si vous tapez le nom d'une variable non déclarée, elle est soulignée en bleu.
On peut aussi indiquer dans un module les options; ces instructions doivent être tapées avant toutes les autres.
Comme les variables, elles ont un nom et un type, mais leurs valeurs sont constantes. On les définit par le mot Const. On peut les initialiser en même temps.
Const NomFichier= "" ‘constante chaîne de caractères.
Const i As Integer =1 ‘constante Integer
L’intérêt des constantes est d’améliorer la lisibilité et d’améliorer la vitesse d’exécution.
Si une constante doit être modifiée ultérieurement, il suffit en mode conception, de modifier sa valeur ce qui modifie sa valeur dans l’ensemble du code de l’application.
On rappelle que seuls les types primitifs peuvent avoir des constantes (Byte, Boolean, Shot, Integer, Long, Single, Double, Decimal, Date, Char, String)
Il existe une liste de constante prédéfinie dans différentes Classes.
= Chr$(13)+Chr$(10) : sert à sauter une ligne.
("VISUAL" & & "BASIC")
On obtient à l’écran une boîte de dialogue avec le texte mis en forme de cette manière: VISUAL BASIC
= Chr$(9) : caractère de tabulation
ControlChars.NullChar : Aucun caractère
ControlChars.Nothing : Chaîne vide
Taper ControlChars. et, comme d’habitude, vous obtiendrez la liste des constantes.
On peut aussi utiliser les couleurs définies par VB
‘Pour le bleu
Si Import a été tapé,
PI contient 3,14…
E contient la base log naturel
Il est parfois nécessaire de savoir si une touche précise à été tapée par l'utilisateur au clavier, pour cela il faut connaître 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 recherchée et vous obtenez la constante correspondant à la touche:
Keys.Right 'Désigne le code de la touche '->'
On rappelle que True et False sont des valeurs Booléens faisant partie intégrante de VB. Pour les anciens de VB6 ne plus utiliser -1 et 0 (D'ailleurs c'est maintenant 1 et 0).
Conclusion : utiliser largement ces constantes fournies par VB, cela améliore la lisibilité et la maintenance.
Arithmétique ^, –, *, /, \, Mod, +, =
Assignation =, ^=, *=, /=, \=, +=, -=, &=
Comparaison =, <>, <, >, <=, >=, Like, Is
Concaténation &, +
Opérations logiques/de bits Not, And, Or, Xor
A And B retourne True si A et B sont vrais
A Or B retourne True si une des 2 est vrai
A Xor B retourne True si une et une seule est vrai Not A retourne True si A était faux et vice versa
\ Division entière ex : 10\3=3
Is L'opérateur Is détermine si deux références d'objet font référence au même objet. Toutefois, il n'effectue pas de comparaisons de valeurs. Si object1 et object2 font tous deux référence au même objet, l'argument result est True ; si tel n'est pas le cas, l'argument result est False.
5.10.1. Les structures conditionnelles
Présente le test d'une ou de plusieurs conditions Boolean.
Function Bonus(ByVal Performance As Integer, ByVal Salary As
Decimal) As Decimal
If Performance = 1 Then
Return Salary * 0.1
ElseIf Performance = 2 Then
Return Salary * 0.09
ElseIf Performance = 3 Then
Return Salary * 0.07
Else ‘cas par défaut Return 0 End If
End Function
Remarque: dans le cas où le ElsIf est utilisé, il est préférable de remplacer par le Select…Case pour plus de lisibilité…
Présente le test des diverses valeurs d'une expression unique.
Function Bonus(ByVal Performance As Integer, ByVal Salary As
Decimal) As Decimal
Select Performance Case 1
Return Salary * 0.1
Case 2
Return Salary * 0.09
Case 3
Return Salary * 0.07
Case Else 'Cas par défaut
Return 0 End Select
End Function
Décrit le test des diverses exceptions générées par votre code.
Dim GivenDate As Object 'contient une date récupérée et à traiter Dim NextCentury As Date Try
NextCentury = DateAdd("yyyy", 100, GivenDate)
Catch ThisExcep As System.ArgumentException
'un argument de fonction a une valeur incorrecte
Catch ThisExcep As ArgumentOutOfRangeException
'le résultat est supérieur au 31/12/9999
Catch ThisExcep As InvalidCastException
'GivenDate ne peut être interprété comme une date
Catch
'une exception non gérée est apparue Finally
'ce bloc est toujours éxecuté à la fin
End Try
Remarque : la fonction IIF(expression, true, false)
Function CheckIt (ByVal i As Integer) As String
CheckIt = IIf(i > 1000, "Grand chiffre", "Petit chiffre")
End Function
5.10.2. Les structures itératives
Décrit l'exécution d'un bloc d'instructions lorsqu'une condition est vraie.
Sub exempleWhile()
Dim i As Integer = 0
Dim Nombre As Integer = 10
While Nombre > 6 Nombre = Nombre - 1
i = i + 1 End While
MsgBox("On n’a bouclé " & i & " fois.") 'i=4
End Sub
Décrit l'exécution d'un bloc d'instructions jusqu'à ce qu'une condition soit satisfaite.
s’accompagne toujours de :
• While : tant que
• Ou Until : jusqu’à ce que
Autre subtilité de cette structure, la condition peut être mise en fin de boucle, cela permet d’effectuer au moins une fois le code avant le premier test.
Voici donc un exemple des différentes possibilités en prenant le cas d’un recherche d’un mot :
Do Until MotCherché=MotPointé
‘Pointer Mot suivant
Loop
Do Until MotCherché=MotPointé
‘Pointer Mot suivant
Loop
Do While MotCherché<>MotPointé
‘Pointer Mot suivant
Loop
Do
‘Pointer Mot suivant
Loop While MotCherché<>MotPointé
Décrit l'exécution d'un bloc d'instructions un nombre spécifié de fois. Voici son prototype:
For counter [ As datatype ] = start To end [ Step step ]
' code a executer
Next [ counter ]
Et un exemple :
Sub Preset(ByRef tab() As Integer)
Dim I As Integer
For I = 0 To (tab.Lenght – 1)
tab(I) = 128 Next I
End Sub
Décrit l'exécution d'un bloc d'instructions pour chaque élément d'une collection.
For Each elementvariable [ As datatype ] In collection
' code a executer
Next [ elementvariable ]
Exemple : mettre tous les arrières plans des contrôles de la feuille en noir
Dim ThisControl As System.Windows.Forms.Control
For Each ThisControl In ThisForm.Controls
ThisControl.BackColor = System.Drawing.Color.black
Next ThisControl
Quand on appelle une procédure (un sous-programme, une routine), le logiciel ‘saute’ au sousprogramme, il effectue celui-ci puis revient effectuer ce qui suit l’appel.
Nous avons déjà vu, qu’en VB, les sous programmes sont des Sub ou des Function.
On peut fournir aux sous-programmes des paramètres qui sont envoyez à la fonction. Exemple:
Function Carré ( V as Single) as Single
Return V*V End Function
Cette fonction retournera le carré du paramètre fournie.
Pour l'utiliser :
Dim resultat as Single
resultat= carré(2) 'resultat est alors égal à 4
On appelle la fonction carré avec le paramètre 2, elle retourne 4.
Les parenthèses.
Rappel, même s'il n'y a pas de paramètre, mettre des () lors de l'appel de procédure.
MaRoutine()
ATTENTION: Pas défaut les paramètres sont transmis PAR VALEUR Il y a 2 manières d’envoyer des paramètres :
• Par valeur : (By Val) c’est la valeur, le contenu de la variable qui est envoyé.
• Par référence :(By Ref) c’est l’adresse (le lieu physique où se trouve la variable) qui est envoyé. Si la Sub modifie la variable, cette modification sera visible dans la procédure appelante après le retour.
Exemple de procédures:
Sub MaProcedure (ByRef x as Long, Optional ByVal y As Long)
End Sub
Si j'appelle cette procédure par MaProcedure (A, B) c'est l'adresse de A qui sera envoyée et la valeur contenue dans B. Elles se retrouveront dans les variables x et y de la procédure
MaProcedure.
Vous remarquerez qu’un argument d’une procédure peut être optionnel (optional).
Quand on déclare une variable, jusqu’où est-elle visible?
Variable locale
Si on déclare une variable dans une procédure, elle est visible uniquement dans cette procédure, c'est une variable locale:
Sub MaProcedure (ByRef X As Integer) Dim Y as integer
End sub
Après le End Sub, Y (et X aussi) n’est plus accessible, la variable est détruite.
Variable statique
Une variable est dite Statique si, a la sortie de la procédure, la valeur continue d'exister et garde sa valeur. Ainsi, lors des appels ultérieurs de la procédure, on retrouvera la valeur de la variable.
Sub compteur()
Dim A as integer
Static B as integer A +=1
B +=1 End sub
A chaque appel de cette procédure A aura la valeur 0 puis 1 puis disparaîtra. B prendra les valeurs 0, puis 1, puis 2 (Incrémentation à chaque appel) Dans un bloc d'instruction
Variable locale uniquement
Si vous déclaré une variable dans un bloc, elle ne sera visible que dans ce bloc:
Do
Dim Compteur A integer
Compteur +=1
Loop
La variable Compteur existe uniquement entre Do et Loop. A chaque itération, la variable est recrée à chaque fois…
Variable privée
En remplaçant Dim par Private; dans ce cas la variable est propre au module ou au formulaire, elle est visible dans toutes les procédures du module ou du formulaire mais pas dans les autres.
Variable publique
En remplaçant Dim par Public; dans ce cas la variable est accessible dans la totalité du programme.
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 procédure Button1_Click.
Pour se repérer et se souvenir quelle est la portée d'une variable, on utilise une lettre en début du nom de la variable:
g_MaVariable sera public (g comme global).
m_Variable2 sera accessible au niveau du module.
Dans un module standard, on met toutes les variables Public accessibles par tous. Leurs noms débutent par g. Ce sont les variables (et constantes) générales utilisées dans la totalité de l'application: état du programme, utilisateur en cours
Pour utiliser un objet en VB, il faut :
• Que la DLL correspondante soit chargée dans le projet en tant que référence.
Exemple de DLL :
• Que l'espace de nom soit importé. Une DDL contient, en général, plusieurs des classes d'objet. Pour utiliser une classe, il faut l'inclure dans le programme. On va, par exemple, importer l'espace de nom System.Windows.Forms (contenue dans . Cet espace de noms contient les classes « fenêtre » et « contrôles »):
Exemple d’importation : Import System.Windows.Forms
Une fois la référence faite au projet
Dim Form1 As Form
Form1 est donc un objet fenêtre qui hérite de tous les membres de la classe Form, on peut donc utiliser une méthode de cet objet:
()
Ou une propriété:
Form1.BackColor=RED
Remarque : les Classes les plus courantes sont déjà chargées et disponible, ce qui simplifie un peu les choses.
Visual Studio .NET repose à présent sur une toute nouvelle plate-forme que le nomme « Framework .NET ». Cette plate-forme apporte un lot important de solutions innovantes : • tout est objet (et il supporte désormais l’héritage)
• multi plateformes
• multi langages
Pour mieux comprendre ces évolutions, il est nécessaire de comprendre l’architecture du framework .NET :
|
Figure : Architecture du Framework .NET
• 1ère couche : l’environnement de développement Visual Studio .NET qui fournit tous les outils de développement. Il intègre à la fois Visual Basic .NET pour le développement d’applications traditionnelles et le développement d’applications à destination du Web.
• 2ème couche : le langage de programmation : il existe déjà plus d’une trentaine de langages compatibles avec le Framework .NET
• 3ème couche : le langage IL : pseudo code intermédiaire avant l’étape de compilation.
• 4ème couche : une application se compose toujours de fenêtres. Pour les plateformes Windows, PPC ou même smartphone, le type utilisé est le Windows Form. Pour une plateforme Web, c’est le Web Form.
• 5ème couche : les classe de bases sont spécifiques à la plateforme. Par exemple, il existe une classe Windows Form pour les applications Windows mais il existe aussi une classe Windows Form spécifique au PocketPC.
• 6ème couche : Le Common Langage Runtime ou CLR : il prend en charge la compilation, puis l’exécution des programmes en intégrant la gestion de l’allocation de mémoire avec le Garbage Collector.
Ou le « ramasse-miettes » en français. Il est là pour palier aux fuites de mémoires qui restent un grand classique des problèmes que l’on rencontre en programmation.
Il s’agit par exemple, d’espaces alloués en mémoire et qui ne sont plus utilisés ou encore de références qui demeurent actives sur des objets dont on ne sert plus.
Pour résoudre ce problème, le Framework .NET a été doté d’un mécanisme nommé « Garbage Collector » qui se charge de scruter la mémoire utilisée par les applications .NET et de la récupérer pour la réalloué automatiquement.
On a vu qu'il existait des classes prédéfinies (celle du Framework par exemple) mais on peut soi même CREER SES PROPRES CLASSES:
Prenons un exemple, on veut créer une classe Voiture.
Public Class Voiture
'pour avoir une destruction deterministe lors d’un Dispose()
Implements System.IDisposable
'définition des attributs de la classe
Private m_marque As String
'constructeur sans arguments Public Sub New() m_marque = “” End Sub
'constructeur surchargé
Public Sub New(ByVal strMarque As String)
If strMarque.Length > 0 Then m_marque = strMarque
End If End Sub
'def d'une propriété de la classe pour acceder à un attribut
Public Property marque() As String Get
Return m_marque
End Get
Set(ByVal Value As String)
If Value.Length > 0 Then m_marque = Value
End If
End Set
End Property
'Exemple d’une methode
Public Function maMethode() As monType
'code de la fonction
End Function
'destructeur implicite (appelé à la l'arrêt de l'application)
Protected Overrides Sub finalize()
Dispose() End Sub
'destructeur explicite ET déterministe
Public Sub Dispose() Implements System.IDisposable.Dispose
m_marque = Nothing End Sub
End Class
Rappel: lors de l’implémentation d’une classe, trios choses à penser:
• Le(s) constructeur(s)
• Les accesseurs aux attributs de la classe
• Le(s) destructeur(s)
Pour la construction, plusieurs constructeurs peuvent se surcharger dans le cas ou vous voulez définir votre objet plus ou moins précisément (avec plus ou moins de propriétés)
Les accesseurs permettent l’accès aux attributs privés (ou protected pour l’héritage) de votre objet. Ils peuvent permettre seulement l’accès à la valeur (Get) ou la modification de cette valeur (Set), ou même encore les deux à la fois.
Concernant la destruction, 2 différents moments d’exécution sont gérés dans :
• finalize() : le destructeur implicite qui s’exécute automatiquement lors de l’arrêt de l’application
• dispose() : le destructeur explicite utilisé par le programmeur pour pouvoir détruire son objet a tout moment dans l’exécution de l’application
Remarque : par défaut, a l’appel de ce destructeur, la destruction n’est pas immédiate, elle est indéterminée, c’est-à-dire que l’on ne s’est pas réellement à quel moment cela va se produire.
L’implémentation de l’interface IDisposable permet de rendre déterministe cette destruction et donc de mieux maîtriser la gestion mémoire.
Rappel : une interface est une classe qui contient simplement la définition de ses membres, mais pas leur implémentation.
Public Interface IMultimedia
Property Titre() As String
Sub Lecture()
End Interface
Public Class CDAudio
Implements IMultimedia
Public Sub Lecture() Implements _
NomProjet.IMultimedia.Lecture
‘implementation de la méthode
End Sub
Public Property Titre() As String
Get
Return m_titre
End Get
Set(ByVal Value As String) m_titre = Value
End Set
End Property
End Class
Cela permet d’avoir un squelette commun de développement pour toutes les classes utilisant cette interface et ainsi avoir des outils communs pour différents types d’objets qui se ressemblent.
Dans notre exemple, tous les objets « Multimédia » (CDAudio, Film, DVD, etc…) ont un titre et peuvent être lu.
L’héritage offre la capacité «d’étendre» une classe déjà existante, en lui ajoutant des fonctionnalités, des méthodes, ou des attributs.
Il devient donc possible, grâce à l’héritage, de créer de nouvelles classes, tout en ré exploitant les classes déjà créées, et ceci, en évitant une recopie complète.
Une classe, qui hérite d’une autre classe, se « spécialise » par rapport à sa classe mère. Comme exemple, on pourrait donner le suivant :
Class VEHICULE
Protected m_marque ‘Déclaration attribut PROTECTED
‘…
Overridable Sub Roule() ‘Méthode pouvant être redéfinie
‘…
End Sub
‘…
End Class
Class BERLINE
Inherits VEHICULE
Private m_couleurCapote
‘…
Public Sub New(ByVal strMarque as string, _
ByVal strCouleurCapote as string)
Me.m_couleurCapote = strCouleurCapote
Me.m_marque = strMarque ‘utilisation classique de la
‘propriété de la classe mère
End Sub
‘…
Overrides Sub Roule()‘Méthode redéfinie ds cette classe fille
‘…
End Sub
End Class
Introduction
1.1. L’objectif de cette formation
1.2. L’axe à suivre
1.3. L’environnement de développement
1.4. Avant VB, la notion fondamentale de l’objet
1.4.1. Les classes et les objets
1.4.2. Propriétés (attributs) d ‘un objet
1.4.3. Méthodes
1.4.4. Evènements
1.4.5. La mise en application dans
1.4.5.1. Fenêtres et contrôles
1.4.5.2. Tout est objet
1.4.5.3. Tout objet a des propriétés
1.4.5.4. Les objets peuvent avoir des méthodes
1.4.5.5. Certains objets ont des évènements
1.4.5.6. Interface et implémentation
1.4.5.7. Visibilité
1.4.6. En résumé
2. Principe et structure des programmes
2.1. Une programmation évènementielle
2.1.1. Principes de la programmation VB
2.1.2. Exemple : le fameux « Hello World »
2.1.2.1. Que voit l'utilisateur du programme?
2.1.2.2. Que se passe t-il dans le programme?
2.1.2.3. Que doit faire le programmeur pour arriver à ce résultat?
2.1.3. En pratique, ce que fait le programmeur
2.1.3.1. La conception de l’interface utilisateur
2.1.3.2. L’écriture du code correspondant aux événements
2.1.4. Exécuter et déboguer le programme
2.1.5. Pour résumer la programmation événementielle
2.2. Les instructions
2.3. Les procédures
2.3.1. Les procédures liées aux événements
2.3.2. Les procédures non-liées
2.3.3. Les procédures « Sub » et les procédures « Function »
2.3.4. Les procédures non-liées dans les modules standard
2.3.5. Private / Public
2.4. Les modules
3. Environnement de développement
3.1. Le projet
3.2. Une fenêtre (Windows Form)
3.3. Les procédures de la fenêtre
3.4. Ajouter un contrôle
3.5. Propriétés d’un contrôle
3.6. Les composants d’un projet
3.7. L’aide Visual Basic
4. L’interface utilisateur
4.1. Introduction
4.2. Les feuilles
4.3. Les boutons
4.4. Les TextBox
4.5. Les labels
4.6. Les cases à cocher
4.7. Les listes
4.8. Les boites toutes faites
4.9. Regroupement de contrôles
4.10. Positions des contrôles
4.11. Les menus
4.12. Rendre une interface active
4.13. ToolBar / StatusBar
4.14. Image
5. Langage Visual Basic
5.1. String
5.2. Variables Numériques
5.3. Booléens
5.4. Conversion
5.5. Les tableaux
5.6. Les collections
5.7. Soyons STRICT et EXPLICITE
5.8. Les constantes
5.9. Les opérateurs
5.10. Les structures de contrôle
5.10.1. Les structures conditionnelles
5.10.2. Les structures itératives
5.11. Rappel sur les procédures
5.12. Portée des variables
5.13. Références et espaces de noms
5.14. Structure d’un développement .NET
5.15. Module de classe
Nous allons apprendre à utiliser Visual Basic .NET avec le Framework.
Nous étudierons principalement: les applications Windows.
Les applications Windows sont des programmes directement exécutables qui utilisent des fenêtres Windows: des programmes de traitement de texte, d'image, de musique, des jeux, de petits utilitaires, des logiciels métiers (médicaux)
Nous laisserons de coté les applications Web (en ) et les applications console..
Nous étudierons donc comment créer une application Windows et pour cela, nous allons suivre différentes étapes :
- On étudiera la notion d'objet, d'événement (section 2),
- On étudiera le langage (section 3),
- On utilisera les objets 'fenêtre' et les 'divers contrôles' pour créer l'interface utilisateur (section 3),
- On découvrira la manière de créer une application (section 4),
- On apprendra à créer une classe (section 5),
- Enfin, on verra comment faire le lien avec les bases de données (section 6) avec quelques rappels sur les requêtes SQL
La façon la plus courante de développement en est d’utiliser Microsoft Visual Studio .net, il contient une interface de développement (programme permettant d'écrire un logiciel et de créer un programme exécutable) , , …
Il existe différentes versions : initiation, professionnelle, entreprise et architecte.
La version initiation (avec MSDN Library – MicroSoft Developpement Network Library) est amplement suffisante pour cette formation ainsi que dans le milieu professionnel. Cette même version servira par la suite, pour la formation
Une version d’évaluation de ce produit est disponible sur le site de Microsoft.
Concernant la configuration matérielle, un système professionnel (Windows 2000 pro ou Windows XP Pro) et un minimum de 256 de mémoire vive sont vivement conseillé.
Enfin, le confort d’un grand écran vous semblera indispensable quand vous vous confrontez au grand nombre de fenêtres.
Pour bien comprendre ce qu’est un objet, nous allons prendre des exemples dans la vie courante puis nous passerons à des exemples dans Visual Basic.
Ma voiture fait partie des « voitures », du type, du genre « voiture » (d’un point de vue générale). Une voiture qu’elle soit de marque française ou étrangère, qu’elle soit cabriolet ou que se soit un break, reste un voiture. Les « voitures » représentent donc une classe d’objet (Class) qui a ses caractéristiques : elle a une marque, une gamme, une couleur, une puissance, … mais je ne peux pas utiliser « les voitures ».
De manière générale, une classe est une représentation abstraite de quelque chose, tandis qu'un objet est un exemple utilisable de ce que représente la classe.
Pour fabriquer ma voiture, je prends les caractéristiques de la classe « voitures » (c’est comme un moule) et je fabrique (j’instance) une voiture, je la nomme « MaVoiture ».
Une classe « les voitures » >>> Une instance de, un objet « MaVoiture »
Si on considère encore l’exemple de l’objet « MaVoiture », cette dernière possède des caractéristiques ou propriétés : une marque, une couleur, une puissance …
Pour indique la couleur de « MaVoiture », on utilise la notation suivante :
MaVoiture.couleur
Pour modifier une propriété d’un objet, si on veut une voiture vert par exemple :
MaVoiture.couleur = "vert"
MaVoiture.Phares.Avant indique les phares avant de le voiture.
MaVoiture.Phares.Avant.Allumé indique l’état des phares (Allumé ou non)
Si je fais :
MaVoiture.Phares.Avant.Allumé=True (Vrai) cela allume les phares !
MaVoiture fait des choses : elle roule par exemple.
Pour faire rouler la voiture j’appelle la méthode ‘Roule’
MaVoiture.Roule
Si c’est possible pour cette méthode, je peux indiquer à quelle vitesse la voiture doit rouler :
MaVoiture.Roule(100) 'j’ai ajouté un paramètre
Il est possible parfois d’indiquer en plus si la voiture doit rouler en marche avant ou en marche arrière.
MaVoiture.Roule(10, "Arriere")
Il y a donc 2 manières d’appeler la méthode Roule : avec 1 ou 2 paramètres, on dit que la méthode est surchargée; chaque manière d'appeler la méthode s'appelle "signature".
Des évènements peuvent survenir sur un objet.
MaVoiture_démarre est un évènement, quand la voiture se met en route (si par exemple j'ai fait MaVoiture.Roule(100)), cet évènement démarre survient automatiquement.
L’ événement est donc l’application de méthodes suite à une action précise.
Tous cela ce sont des images, mais elles sont destinées à illustrer ce qu’est un objet.
1.4.5.1. Fenêtres et contrôles
Une application Windows se compose de fenêtres (nommée aussi Windows form) dans lesquelles se trouvent des contrôles (bouton, liste, texte…).
Exemple de fenêtre avec 4 contrôles : 2 boutons, une zone de texte (un label) et une icône :
Dans une application Windows, il y a aussi des lignes de code utilisant des variables pour faire des calculs.
1.4.5.2. Tout est objet :
En , tout est objet :
• les fenêtres (on dit les formulaires),
• les variables,
• les contrôles (les boutons, liste, image, case à cocher..)
•
Il faut un moule pour faire un objet. Le moule c’est une classe.
Le moule va servir à créer un objet, on dit une instance.
On peut créer une multitude d’instance (une multitude d’objets) avec le même moule.
Pour créer, démouler un objet, on utilise les mots clé Dim et As New.
Dim objet As New Classe
New est un constructeur.
Je dessine une fenêtre FormDémarrage (c'est la Classe, le moule) puis :
Dim F As New FormDémarrage
Crée une fenêtre qui se nomme 'F' à partir du moule, du modèle (FormDémarrage) que j’ai dessiné.
Autre exemple :
Comment créer une variable nommé 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
1.4.5.3. Tout objet a des propriétés :
F.BackColor indique la couleur de fond de la fenêtre.
S’il y a un bouton, la couleur de fond du bouton sera :
Bouton.BackColor
ou
F.Bouton.BackColor
Noter la syntaxe : La couleur du bouton qui est dans la fenêtre F
Et donc, on modifie la propriété de la sorte suivante :
Bouton.BackColor=Red 'modifie la couleur de fond du bouton
Autre exemple:
La propriété Visible: si elle a la valeur True, l'objet est visible et si elle est à False l'objet n'est donc pas visible.
Bouton.Visible=False 'fait disparaître le bouton
objets peuvent avoir des méthodes
Prenons un exemple simplifié. Les Listes déroulante (ListBox) ont une méthode Clear qui permet de les vider.
Si je veux vider toutes les lignes d'une liste nommé Liste1, je fais:
Liste1.Clear ‘la liste est vidée
Les propriétés et méthodes se nomment les membres d'un objet.
1.4.5.5. Certains objets ont des évènements
Reprenons notre bouton. Quand l'utilisateur click dessus, l'évènement Bouton_Click survient.
Ce sont les objets contrôles (bouton, case à cocher..) et les formulaires qui ont des évènements.
Vous remarquerez que le nom de l’événement Bouton_Click est composé du nom de l’objet (Bouton) suffixé du nom caractérisant l’évènement (Click).
Ce que je vois de l'objet, c'est son interface (la définition de ces propriétés, ces méthodes :
l’ensemble de ces membres)
Exemple: la méthode Clear fait partie de l'interface d'une ListBox. Par contre le code qui effectue la méthode (celui qui efface physiquement toutes les lignes de la listeBox),ce code se nomme implémentation, lui n'est ni visible ni accessible.
1.4.5.7. Visibilité
Quand un objet est crée, il est visible (et donc utilisable), uniquement dans la partie du programme où il a été défini.
Par exemple, et habituellement, je peux voir et modifier la couleur d'un bouton uniquement dans le code de la fenêtre où il est situé.
Pour les variables, on parle de portée: la variable peut être locale (Private) ou de portée générale (Public) visible partout.
Une variable publique sera donc utilisable dans l’ensemble des codes de toutes les fenêtres.
Habituellement, la portée d’une variable est privée. Pour la rendre publique, il faudra le préciser explicitement dans son code.
En Visual tout est objet.
Les classes sont des types d'objet.
Pour créer un objet à partir d'une classe, il faut utiliser les mots clé Dim ..As New
Les membres (propriétés et méthodes) de cette classe permettront de manipuler l’objet suite à un événement.
Nous allons comprendre la programmation évènementielle, c’est à dire comment fonctionne Visual Basic. Comme dans toute programmation, il est important de se placer sur deux niveaux :
• Ce que voit l'utilisateur.
• Ce qu'a fait le développeur pour arriver à ce résultat.
Le programmeur va dessiner l’interface utilisateur (fenêtre, bouton, liste..).
C’est Visual Basic qui va entièrement s’occuper de la gestion des événements.
Le but de cet exemple est d’afficher 'Bonjour' quand on clique sur un bouton. C'est pas original, mais c’est le premier programme que l’on fait lors de l’apprentissage d’un nouveau langage.
2.1.2.1. Que voit l'utilisateur du programme?
L’utilisateur final, celui qui utilise le logiciel, voit une fenêtre avec un bouton, Si il appuie sur ce bouton il voit s’afficher « Bonjour ».
2.1.2.2. Que se passe t-il dans le programme?
Quand l'utilisateur clique sur le bouton, cela déclenche automatiquement un événement
(Button1_Click). Cet évènement contient du code qui affiche « Bonjour ».
2.1.2.3. Que doit faire le programmeur pour arriver à ce résultat?
Pour atteindre ce résultat, le programmeur va dessiner la fenêtre, le bouton, la zone d'affichage du texte (un label) puis il va simplement indiquer dans l'évènement Button_Click d' afficher « Bonjour ».
Le fait de déterminer la procédure à appeler ou de réaliser l’appel est entièrement pris en charge par VB.
Le programmeur est en mode conception (ou mode Design) pour écrire ce programme.
2.1.3.1. La conception de l’interface utilisateur
Ce que verra l’utilisateur final, c'est l'interface utilisateur : une fenêtre avec des boutons, des listes, du texte.. :
Il crée une fenêtre : Menu Projet, Ajouter un formulaire Windows, cliquer sur Windows Form, une fenêtre ‘Form1’ apparaît.
Il ajoute un bouton : Pour cela il utilise la Boite à outils.
Pour l’exemple, il faut aussi ajouter un label de la même manière.
Un label est un contrôle qui permet d’afficher un texte.
2.1.3.2. L’écriture du code correspondant aux événements
L’utilisateur doit double-cliquer sur le bouton qu'il a dessiné pour accéder à l’événement Click de ce bouton.
Une fenêtre de conception de code s’ouvre et il apparaît :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
End Sub
Cela correspond à la procédure évènement (entre Sub et End Sub) qui, quand le programme fonctionne, est automatiquement déclenchée quand l’utilisateur du logiciel clique sur l’objet Button1.
Une procédure est un ensemble de ligne de code qui commence par Sub et se termine par End Sub.
Pour afficher "Bonjour" dans le label, celui-ci possède une propriété nommée Text qui contient le texte à afficher.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
= "Bonjour"
End Sub
Voilà, votre premier programme est écrit !
Il est possible de tester immédiatement le programme en mode « déboguage », sans quitter l'environnement de développement:
Utiliser le menu ‘Déboguer’ puis ‘Démarrer’ qui lance l’exécution du programme ou cliquer sur la flèche:
Vous lancez l'exécution avec le premier bouton, le second servant à arrêter temporairement l'exécution, le troisième à terminer l'exécution.
Remarque : Encore plus rapide, on peut aussi taper sur F5 pour lancer le programme.
C'est ce fichier exécutable qui est fourni à l'utilisateur.
Le programmeur utilise des outils de dessin pour construire une interface utilisateur : des fenêtres avec des contrôles dessus: menus, boutons, case à cocher..
VB, pour chaque feuilles ou pour chaque contrôle, génère une liste d’événements, (Evènement lié au chargement d'une fenêtre, évènement lié au fait de cliquer sur un bouton, évènement survenant quand on modifie un texte )
Il suffit, dans la procédure événement qui nous intéresse, d’écrire le code qui doit être effectué lorsque cet événement survient.
Comme nous l’avons vu le code sert a agir sur l’interface (Afficher un texte, ouvrir une fenêtre, remplir une liste, un tableau), mais il peut aussi effectuer des calculs, évaluer des conditions et prendre des décisions, travailler en boucle de manière répétitive et ainsi effectuer les taches nécessaires.
Une instruction est un code permettant d'effectuer une certaine opération, une déclaration, une définition.
Dim A As Integer 'est une instruction (de déclaration)
A=1 'est aussi une instruction et effectue une opération.
C'est habituellement une 'ligne de code' 'exécutable'.
Pour mettre des commentaires dans un programme, on le fait précédé de « ' » :
'Ceci est un commentaire, ce n'est pas une instruction.
Le commentaire, quand à lui, ne sera pas exécuté.
Une procédure est un ensemble d'instructions, de lignes de code, un groupement d'instructions bien définies effectuant une tache précise.
Exemple concret d'une procédure: la procédure Button_Click du premier programme !
Si on double-clique sur la fenêtre, on a accès aux procédures évènement liées à cette fenêtre, si on double-clique sur un objet (bouton, case à cocher… on voit apparaître les procédures évènement de ce contrôle.
Si on double clique sur le fond d’une fenêtre (dans le programme « Bonjour »), on voit apparaître les procédures liées à cette fenêtre et aux contrôles contenus dans cette fenêtre :
Public Class Form1
Inherits
Dim a As String
#Region " Code généré par le Concepteur Windows Form "
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles
= ««
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
= "Bonjour" End Sub
End Class
Si on détaille un peu le code de cette feuille, on distingue 3 parties:
• Public Class Form1
Ce n’est pas une procédure mais la définition de la fenêtre. La fenêtre fait partie des . Ces lignes sont générées automatiquement par VB. Si vous déroulez cette partie, en cliquant sur le petit +, vous pouvez lire le code permettant de créer la fenêtre, les contrôles.. C'est généré automatiquement par VB.
• Private Sub Form1_Load
Chaque fenêtre a une procédure Form_Load qui est exécutée lorsque la fenêtre est chargée, on y met généralement le code initialisant la feuille.
• Private Sub Button1_Click
C’est la procédure liée au bouton et qui contient le code à effectuer quand l’utilisateur clique sur le bouton. C’est là que l’on écrira le code qui doit s’effectuer lorsque l’utilisateur clique sur le bouton.
De la même manière que pour la fenêtre, vous pouvez voir dans la liste en haut, tous les événements liés aux boutons qui génèrent une procédure :
o Click lorsque l'utilisateur clique sur le bouton.
o DoubleClick lorsque l'utilisateur double-clique sur le bouton. o MouseDown se déclenche si appuie du bouton de la souris o MouseUp se déclenche si relâchement du bouton de la souris o …
On voit donc que le formulaire (la fenêtre) et tous les contrôles d'une application ont chacun des procédures pour chaque évènement qui peut survenir.
Parfois on a besoin de code qui fait une tache particulière, qui est utilisé à plusieurs endroits et qui n’est pas liée à un événement. On crée dans ce cas une procédure indépendante des évènements.
Le système des procédures permet aussi de découper un problème complexe en quelques fonctions moins complexes et indépendantes les unes des autres.
Ces procédures sont en fait des sous-programmes : si une ligne appelle une procédure, le programme ‘saute’ au début de la procédure, il effectue le code de la procédure puis revient juste après la ligne qui avait appelé la procédure et continue les lignes suivantes.
L’appel d’une procédure se fait de la sorte :
Call NomdeProcedure()
ou
NomdeProcedure()
Les procédures sont bien délimitées. Il faut distinguer 2 sortes:
• Les procédures Function: Elles débutent par Function et se terminent par End Function. Des arguments peuvent lui être passés. La différence avec une procédure « Sub » et que, parfois, on a besoin que la procédure retourne un résultat, qu'elle donne un résultat à la procédure appelante. C’est dans ce cas que l’on utilise une fonction.
Exemple :
Function SurfaceCercle(Rayon as Single) As Float
Return 3.14*Rayon*Rayon
End Function
On appelle une fonction et on récupère le résultat de la sorte suivante :
S=SurfaceCercle(12)
As Float en fin de ligne, après la fermeture de la parenthèse, indique que la fonction retourne une variable de type Float (chiffre à virgule). Il faut donc que la variable qui reçoit la valeur retournée (S dans notre exemple) soit aussi un Float.
Il existe une autre manière de retourner le résultat d'une fonction, reprenons l'exemple précédent, on peut écrire:
Function SurfaceCercle( Rayon as Single)
SurfaceCercle= 3.14*Rayon*Rayon
Exit Function
End Function
Ici on utilise le nom de la fonction pour retourner le résultat , avec un signe '='.
Exit Function permet aussi de sortir de la fonction, cela a le même effet que Return sauf que Return peut être suivi d'un argument de retour (et pas Exit Function).
Utilisez plutôt la méthodeReturn. C’est plus clair et plus conforme avec les autres langages de programmation.
Il est à noter que la fonction SurfaceCercle est une procédure non-liées à un événement et qu’elle est donc d’intérêt général
N’importe quelle procédure doit pouvoir l’appeler, de plus elle n’intervient pas sur les contrôles des formulaires et n’est donc pas lié aux formulaires.
On la placera donc dans un module standard qui est un module du programme qui ne contient que du code. (Pas d’interface utilisateur)
L’intérêt est de regrouper les fonctions qui ont des liens dans le même module que l’on nommera de manière explicite.
Exemple : dans le module Module_Calcul_Surface, on retrouvera les fonctions surface_carre, surface_cercle, …
Avant le mot Sub ou Function on peut ajouter Private indiquant que la procédure est accessible uniquement dans le module. C’est donc une procédure privée.
Les procédures liées aux évènements d’une feuille sont privées par défaut.
Public indiquant que la procédure est accessible à partir de toute l’application.
S’il n’y a rien devant Sub et que la procédure n’est pas liée à un événement, la procédure est
Public
Le mieux est de toujours définir si une procédure est publique ou privée de manière explicite.
On a vu qu'un programme est décomposé en modules, chaque module contenant des procédures.
Chaque module correspond physiquement à un fichier '.vb'.
Il existe 3 types de modules :
• Les modules de formulaires
- Contenant le dessin des fenêtres de l’interface utilisateur (ou formulaire) et donc les contrôles (boutons, listes, zones de texte, cases à cocher…)
- Contenant aussi les procédures liées aux événements de la feuille (Button_Click)
- Contenant les procédures indépendantes des événements mais qui interviennent sur l’interface. Ce sont des Sub() ou des Function().
• Les modules standard
Ils servent de stockage de procédures. Procédures « d’intérêt général » ou « non-liées »
Ce sont des Sub() ou des Function() qui peuvent être appelées à partir de n’importe quel endroit (pourvu qu'ils soient Public).
Ils peuvent aussi servir à créer les objets ou déclarer les variables Public qui seront utilisées donc accessible par la totalité du programme.
Ils ont vocation à fabriquer des objets, on verra cela plus loin.
C'est l'IDE: Environnement de développement intégré de Visual Studio de Microsoft.
Quand on lance , le logiciel présente une fenêtre Projets qui permet d'ouvrir un projet existant ou de créer un nouveau projet:
Dans le cas d'une création d'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 nécessaire le chemin de l'emplacement du projet qui est par défaut ' C:\Documents and Settings\Nom Utilisateur\Mes documents\Visual Studio Projects' enfin valider sur 'Ok'.
Pour ajouter un fenêtre (un formulaire) : Menu Projet, Ajouter un formulaire Windows, Cliquer sur Windows Form, une fenêtre ‘Form1’ apparaît ('Form2' pour la seconde feuille).
La zone de travail se trouve au centre de l'écran: C'est l'onglet [Design] ci-dessous qui donne donc accès au dessin de la feuille (du formulaire) on peut ajouter des contrôles, modifier la taille de ces contrôles..
L'onglet donne accès aux procédures liées à Form1. Pour obtenir cet onglet, il suffit de double-cliquer n’importe où dans un espace libre la feuille. (en évitant tout contrôle)
La liste déroulante de gauche donne la liste des objets, celle de droite, les évènements correspondants.
Il est possible en double-cliquant dans le formulaire ou un contrôle de se retrouver directement dans le code de la procédure correspondant à cet objet.
L’ajout d’un contrôle se fait grâce au principe du « glisser-coller »
Quand une feuille ou un contrôle est sélectionné dans la fenêtre Design, ses propriétés sont accessibles dans la fenêtre de propriétés à droite en bas.
Ici ce sont les propriétés du contrôle 'Button1' (BackColor, Image, Texte, etc.… que l’on peut modifier directement.)
Pour cela il faut utiliser L'explorateur de solution en haut à droite, il permet de voir et d'avoir accès au contenu du projet:
qui est une feuille.
qui est un module standard.
Références qui contient les espaces de nom.
AssemblyInfo contient les informations nécessaires pour créer un installateur.
Il suffit de cliquer sur la ligne dans l'explorateur de solution pour voir apparaître le module et son code dans la fenêtre principale.
Si on clique sur un espace de noms dans la liste Références, cela ouvre la fenêtre Explorateur d'objet qui montre l'arborescence des Classes et une description sommaire en bas de la fenêtre.
Quand on tape du code, VB affiche, quand il le peut, des aides. VB permet de choisir dans une liste une des propriétés d'un objet.
Exemple: Si je crée une variable chaîne de caractères (Dim Chaine As String , on verra cela plus loin), et que je tape le nom de la variable suivi d'un point 'Chaîne.' la liste des méthodes possibles s'affiche.
Chaine.
Quand je pointe dans la liste un des membres (propriété ou méthode) un carré jaune affiche la définition de la fonction avec ses paramètres et une explication.
VB aide à retrouver les paramètres d'une fonction:
Si on tape le nom d'une fonction et l’ouverture d’une parenthèse, VB affiche les paramètres possibles dans un cadre.
En plus il affiche les différentes manières d'utiliser les paramètres (les différentes signatures), on peut les faire défiler avec les petites flèches du cadre jaune.
VB donne accès à l'aide sur les contrôles. Si le curseur est sur un contrôle et qu je tape F1 l'aide s'ouvre pour donner accès à la description des différents membres de cet objet.
Aussi, une aide dynamique est constamment mise à jour. Pour la voir, il faut cliquer sur l'onglet 'Aide Dynamique' en bas à droite (même fenêtre que la fenêtre propriété). Elle donne une liste de liens en rapport avec le contexte en cours.
Enfin il est toujours possible de rechercher des informations en passant par le point d’interrogation de la barre d’outils :
• Sommaire (plan , arbre de l'aide)
• Index (liste des mots)
• Recherche (rechercher un mot)
L’interface utilisateur correspondant aux fenêtres et contrôles que verra l'utilisateur.
Pour rappel, on a vu que le développeur dessine cette interface en mode conception (Design) dans l'IDE.
Avec l’exemple du « Hello World », nous avions vu comment créer un projet, ajouter un formulaire Windows (Windows Form), placer un label et interagir avec ce label grâce à un bouton. Nous avions vu aussi qu’il était possible de modifier propriétés de ces objets comme la couleur de fond (propriété « backcolor ») ou le texte (propriété « Text »).
Tous les objets ont des propriétés communes.
Ces propriétés communes sont héritées de la classe Control et nous allons les détailler :
Name : il s’agit du nom de l’objet tel qu’il est géré par l’application.
Par défaut, VB baptise tous les objets que vous créez de noms génériques, comme Form1, Form2, Form3 pour les fenêtre, List1, List2 pour les listes, Label1, Label2, …
Remarque : Il est vivement conseillé, avant toute autre chose, de rebaptiser les objets que vous venez de créer afin de leur donner des noms plus évocateurs.
• 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
Par exemple, le bouton sur lequel est écrit « OK » sera nommé « btnOK ».
Text : il s’agit du texte qui est associé à l’objet.
Dans le cas d’une fenêtre, c’est le texte qui apparaîtra dans la barre en haut. Pour un TextBox ou un Label c’est évidement le texte qui sera affiché.
On peut modifier cette propriété en mode conception ou dans le code.
Exemple : Avec du code comment faire pour que le bouton btnOk porte l’inscription ‘Ok’ = "Ok"
Enabled : accessible
Indique si un contrôle peut répondre à une interaction utilisateur.
La propriété Enabled permet l'activation ou la désactivation des contrôles au moment de l'exécution. Par exemple, vous pouvez désactiver les contrôles ne s'appliquant pas à l'état actuel de l'application. Vous pouvez également désactiver un contrôle pour interdire son utilisation. Par exemple, un bouton peut être désactivé pour empêcher l'utilisateur de cliquer dessus. Si un contrôle est désactivé, il ne peut pas être sélectionné. Un contrôle désactivé est généralement gris.
Exemple : désactiver le ButtonOk btnOk.Enabled = False
Visible : Indique si un contrôle est visible ou non.
Exemple : rendre invisble le bouton ‘ok’ btnOk.visible = False
Attention ! Pour rendre visible une fenêtre on utilisa la méthode .Show.
Font : Permet le choix de la police de caractères affichée dans l’objet.
BackColor, ForeColor : Couleur du fond, Couleur de l’avant plan Pour un bouton Forecolor correspond au cadre et aux caractères.
Exemple :
ButtonOk.ForeColor=
On l'utilise souvent comme un Flag (drapeau) 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 ="CD" cela permet ultérieurement de voir ce qu'il y a dans la liste.
Ces propriétés sont communes et essentiellement utilisées. Cependant, il y a bien d'autres propriétés propres aux objets.
On a vu que les objets de l'interface utilisateur ont des procédures déclenchées par les évènements de cet objet.
C’est le cas, par exemple, quand l'utilisateur clique sur un bouton « btnOk » , la procédure btnOk_Click s'effectue.
Certains évènements sont communs à tous les contrôles:
• Click
• DoubleClick
• GotFocus
• LostFocus
• KeyUp
• KeyPress
• KeyDown
Il y a toujours des méthodes Changed déclenchées par un changement d'état: CheckedChanged pour une case à cocher, TextChanged pour un contrôle texte.
Pour ne pas alourdir les exemples, nous écrivons souvent une version simplifiée de l'en-tête de la procédure.
Elles correspondent aux fenêtres ou formulaires ou Windows Form. Toute l’interface se trouve sur des fenêtres.
Bien sur, la fenêtre possède les propriétés qui peuvent être modifiées en mode design dans la fenêtre 'Propriétés' à droite ou par du code:
Name : Nom du formulaire. Pour elles aussi, Il faut leurs donner un nom explicite. Par exemple :
FrmDemarrage
Dès qu’une fenêtre est créée, il faut modifier immédiatement ses propriétés en mode conception pour lui donner l’aspect que l’on désire.
Text : C’est le texte qui apparaîtra dans la barre en haut.
WindowState : Donne l’état de la fenêtre : Plein écran (Maximized), normale (Normal), dans la barre de tache (Minimized).
Exemple: mettre une fenêtre en plein écran avec du code.
me.WindowState = FormWindowState.Maximized
(Quand on tape me.WindowsState= Vb donne la liste des valeurs possible)
ControlBox : Si cette propriété à comme valeur False, les boutons de contrôle situés à droite de la barre de la fenêtre n’apparaissent pas.
MaximizeBox : Si cette propriété à comme valeur False, le boutons de contrôle ‘Plein écran’ situés à droite de la barre de la fenêtre n’apparaît pas.
MinimizeBox : Si cette propriété à comme valeur False, le boutons de contrôle ‘Minimize’ situés à droite de la barre de la fenêtre n’apparaît pas.
FormBorderStyle : Permet de choisir le type des bords de la fenêtre : sans bord (None), bord simple (FixedSingle) ne permettant pas à l’utilisateur de modifier la taille de la fenêtre, bord permettant la modification de la taille de la fenêtre (Sizable).. Exemple:
Me.FormBorderStyle =FormBorderStyle.Sizable
StartPosition : Permet de choisir la position de la fenêtre lors de son ouverture.
Fenêtre au centre de l’écran ? à la position qui existait lors de la conception ?
Exemple :
Me.StartPosition = FormStartPosition.CenterScreen
MinSize et MaxSize : Donne les dimensions minimums et maximums que l'on peut utiliser pour redimensionner une fenêtre.
Opacity : Allant de 0% à 100%, permet de créer un formulaire plus ou moins transparent.
Me.TopMost : Pour définir au moment de la conception un formulaire en tant que formulaire d'avant-plan d'une application. Exemple :
Me.TopMost = True
2 méthodes :
• () pour ouvrir une feuille non modale.
Attention : une fenêtre est un objet et est 'visible' suivant les règles habituelles des objets. Si on instance une fenêtre à partir d'une procédure, elle sera visible dans cette procédure. Si elle est 'Public' et instancié dans un module standard, elle sera visible partout.
Quand la feuille est chargée la procédure Form1_Load() est activée. On pourra donc y mettre le code initialisant la feuille.
Form1_Activated() est exécuté ensuite car la feuille deviendra active.
Form1.GotFocus() est enfin exécuté puisque la fenêtre prend le focus.
Form1.Enter() est exécuté lorsque l'utilisateur entre dans la fenêtre.
Dès qu'une propriété change de valeur un évènement propriété ‘Changed' se déclenche: Form1.BackColorChanged() se déclenche par exemple quand la couleur du fond change.
Form1.Resized() se déclenche quand on modifie la taille de la fenêtre. (c'est intéressant pour interdire certaines dimensions)
Form1.Closing() se produit pendant la fermeture de la fenêtre (on peut annuler cette fermeture en donnant à la variable Cancel la valeur True)
Form1.Closed() se produit lorsque la fenêtre est fermée.
Il y en a beaucoup d'autres comme par exemple les évènements qui surviennent quand on utilise la souris (MouveUp, MouseDown, MouseMove) ou le clavier (KeyUp, KeyDown, KeyPress) sur la fenêtre ; Left Right, Size, Position pour positionner la fenêtre ou définir sa taille..
On a déjà vu que pour faire apparaître ne fenêtre 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 rend la fenêtre invisible.
On se rend compte que quand on dessine une fenêtre Form2 par exemple, VB crée une nouvelle classe.
Public Class Form2
… End Class
Elle hérite de : on voit bien dans le code:
Inherits
Cette partie du code contient :
• les procédures liées aux évènements.
Name est utilisé pour lui donner un nom explicite (BoutonOk BoutonCancel)
FlatStyle donne un aspect au bouton
Text contient le texte a afficher sur le bouton.
Si on y inclut un « & » la lettre qui suit sera souligné et sert de raccourci clavier. &Ok donne sur le bouton Ok
ForeColor correspond à la couleur de ce texte
BackColor étant la couleur du fond
TextAlign permet de positionner le texte dans le bouton.
Image contient le nom de l’image à afficher sur le bouton (si on veut afficher une image).
(AlignImage permet de positionner l’image sur le bouton.)
On peut aussi puiser une image dans une ImageList grâce à la propriété ImageList et ImageIndex, on peut ainsi changer d’image.
La propriété BackGroundImage permet de mettre une image de fond.
Evènement
Click() : quand l’utilisateur clique sur le bouton la procédure Button1_Click() est traitée.
Les contrôles TextBox contiennent du texte qui peut être modifié par l'utilisateur du programme.
Text qui contient le texte qui a été tapé est la principale propriété à retenir.
La propriété .text permet aussi de modifier le texte visible dans le contrôle.
= "Bonjour" 'Affiche "Bonjour" dans le contrôle. monTexte = 'Récupération du contenu du contrôle.
Un TextBox correspond à un mini éditeur de texte.(Mais sans enrichissement : sans gras, ni italique…) La police de caractères affectant la totalité du texte peut simplement être modifiée par la propriété Font. La couleur du texte peut être modifiée par ForeColor, mais la totalité du texte aura la même couleur.
Parmi les multiples propriétés de ce contrôle, signalons :
• Multiline autorise ou non l’écriture sur plusieurs lignes.
• PaswordChar crypte le texte entré sous forme d’étoiles.
• MaxLength limite le nombre de caractères qu’il est possible de saisir.
• TextLength donne la longueur du texte
En mode « MultiLine » la collection Lines contient dans chacun de ses éléments une des lignes affichées dans le contrôle (TexBox1.Lines(0) contient la première, TexBox1.Lines(1) la seconde..).
Les TextBox contiennent une méthode Undo:annulation de la dernière modification.
La propriété CanUndo du TextBox doit être à True.
Ensuite pour modifier:
If textBox1.CanUndo = True Then () textBox1.ClearUndo() ' Vider le buffer Undo. End
On peut ajouter du texte au contenu déjà présent dans le TextBox
textBox2.AppendText(MonText)
Les événements liés au TextBox :
• KeyDown survient quand on appuie sur le touche.
• KeyPress quand la touche est enfoncée.
• KeyUp quand on relâche la touche.
TexTBox1_KeyPress permet de récupérer la touche imprimable dans e.KeyChar mais impossible d'en modifier la valeur (e.KeyChar est en lecture seule)
e.KeyDown et .KeyUp permettent, par exemple, de voir si MAJ ALT CTRL ont été pressés.
Il y a 2 sortes de Label:
• Le Label • Le LinkLabel que nous étudierons en TP
On en a déjà utilisé pour afficher le fameux « Hello World »
Les contrôles Label sont généralement utilisés pour fournir un texte descriptif à un contrôle. Vous pouvez par exemple utiliser un contrôle Label pour ajouter un texte descriptif à un contrôle TextBox. Ceci a pour but d'informer l'utilisateur du type de données attendu dans le contrôle.
Exemple:
Donner votre nom:
La légende qui s'affiche dans l'étiquette est contenue dans la propriété Text du label. Pour modifier le texte du label par du code:
="Donner votre Prénom"
Il est également possible d’y afficher une image avec la propriété .Image
Remarque:
La mise à jour de l'affichage du Label (comme les autres contrôles d'ailleurs) est effectuée en fin de Sub. Si on écrit:
Dim i As Integer
For i = 0 To 100
= 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 désire voir les chiffres défiler avec affichage de 0 puis 1 puis
2 il faut rafraîchir l'affichage à chaque boucle avec la méthode Refresh()
Dim i As Integer
For i = 0 To 100
= i.ToString: Label1.Refresh()
Next i
Il y a 2 sortes de case à cocher:
Les « cases à cocher » (CheckBox): Elles sont carrées, et indépendantes les unes des autres, même si elles sont regroupées dans un cadre pour faire plus joli.
Les « boutons radio » (RadioButton): Elles sont rondes et font toujours partie d’un groupe (Elle sont dans une fenêtre ou dessiné dans un objet GroupBox). Ce groupe est indispensable, car au sein d’un groupe de RadioButton, un seul bouton peut être cochée à la fois : si l’utilisateur en coche un, les autres se décochent.
Text, bien sur, permet d’afficher le libellé à coté du bouton, on peut aussi mettre une image avec la propriété Image.
CheckAlign permet de mettre la case à cocher à droite ou à gauche du texte.
Checked : la propriété la plus intéressante de ces cases car elle permet de savoir si elle est cochée ou non. Sa valeur change de False à True si la case est cochée.
RadioButton.Checked=True 'Coche le bouton
La procédure RadioButton.CheckedChange() permet d’intercepter le changement d’état d’un bouton.
Il y a 4 sortes de listes:
• Les ListBox.
• Les CheckedListBox
• Les Combos
• Les ListView.
Lorsque la propriété MultiColumn a la valeur true, la liste s’affiche avec une barre de défilement horizontale.
Lorsque la propriété ScrollAlwaysVisible a la valeur true, la barre de défilement s'affiche, quel que soit le nombre d'éléments.
La propriété SelectionMode indique le nombre d'éléments pouvant être sélectionnés en même temps.
SelectedIndex retourne un entier correspondant au premier élément sélectionné dans la zone de liste. Si aucun élément n'est sélectionné, la valeur de la propriété SelectedIndex est à -1. Lorsque plusieurs éléments sont sélectionnés, la valeur de la propriété SelectedIndex correspond au rang du premier élément sélectionné dans la liste.
La propriété SelectedItem retourne l'élément sélectionné ("poisson" dans l'exemple si dessus.
La propriété Items.Count indique le nombre d'éléments contenus dans la liste. Attention le premier élément est toujours l’élément 0, aussi le nombre d’éléments est égal au numéro de l’élément le plus haut plus un.
Items est une collection contenant tous les éléments chargés dans la liste.
Si la propriété Sorted est à True, la liste est triée automatiquement.
Pour ajouter ou supprimer des éléments dans un contrôle ListBox, il faut utiliser la méthode
, Items.Insert, Items.Clear ou Items.Remove. En mode conception, vous pouvez également utiliser la propriété Items.
Exemples :
- Charger dans une ListBox1 les nombres de 1 à 100 :
For i = 1 To 100
(i.ToString) Next i
A retenir !La listBox contient une collection d'Items. Elle n’a pas de nombre initialement défini d’élément. D’ailleurs son contenue est dans la collection ListBox.Items()
- On peut 'charger' une ListBox automatiquement avec un tableau en utilisant Datasource:
Dim tab() As String = {"one", "two", "three"}
ListBox1.DataSource = tab
Dim x As Integer
x = ("Hello") List1.SelectedIndex = x
On utilise la valeur retournée (x dans notre exemple) par la méthode Add.
C’est une Listbox mais avec une case à cocher sur chaque ligne.
Attention ! SelectedItems et SelectedIndices ne déterminent pas les éléments qui sont cochés, mais ceux qui sont en surbrillance. La collection stockée dans la propriété CheckedItems vous donne par contre les éléments cochés. La méthode GetItemChecked (avec comme argument le numéro d'index) détermine si l’élément est coché.
Exemple :
Pour déterminer les éléments cochés dans un contrôle CheckedListBox, testez chaque élément de la collection CheckedItems, en commençant par 0. Notez que cette méthode fournit le numéro que porte l'élément dans la liste des éléments cochés, et non dans la liste globale. Par conséquent, si le premier élément de la liste n'est pas coché alors que le deuxième l'est, le code ci-dessous affiche une chaîne du type « Item coché 1 = Dans la liste : 2 ». If CheckedListBox1.CheckedItems.Count <> 0 Then
'S’il y a des éléments cochés une boucle balaye les éléments cochés
'(collection CheckedItems) et affiche le numéro de l’élément DANS LA LISTE toutes lignes.
Dim i As Integer
Dim s As String = ""
For i = 0 To CheckedListBox1.CheckedItems.Count - 1 s = s & "Item coché " & (i+1).ToString & " = " & « Dans la liste : »& CheckedListBox1.CheckedItems(i).ToString &
Next i
(s)
End If
On rappelle comme toujours que quand on parle du 3eme élément cela correspond à l’index 2.
C’est le contrôle le plus utilisé entre toutes les listes.
Les « ComboBox » (listes combinées) possèdent deux caractéristiques essentielles par rapport aux « ListBox ».
Elles peuvent être déroulantes ou déjà déroulée: c’est-à-dire qu’on ne voit qu’un seul élément de la liste à la fois, et qu’il faut cliquer sur la flèche du côté pour " déplier " la liste, ou bien que la liste est déjà visible. C’est la propriété DropDownList qui gère cela.
La combos du bas a sa propriété DropDownList=Simple
L’utilisateur peut donc cliquer dans la liste (ce qui met le texte cliqué dans la zone texte), ou taper un nouveau texte.
Items.Count : propriété qui renvoie le nombre d’éléments d’une liste.
Multiselect : propriété qui permet la sélection multiple. Sorted : propriété qui trie les éléments d’une liste.
: méthode qui ajoute un élément à une liste.
Items.Clear : méthode qui efface tous les éléments d’une liste. Item.Remove : méthode qui supprime un élément de la liste.
Comment récupérer la zone texte quand elle change ?
On utilise l'évènement TextChanged qui se déclenche quand le texte est modifié.
Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
=
End Sub
De plus en plus puissant, le contrôle ListView permet d’afficher des listes multi colonnes, ou des listes avec icône ou case à cocher.
La propriété View permet de déterminer l’aspect général du contrôle, elle peut prendre les valeurs :
Details permet une liste avec sous élément et titre de colonnes.
Liste utilise un ascenseur horizontal.
LargeIcon
SmallIcone
Par programmation :
= View.Details
Utilisons le mode détails (Appelé mode Rapport)
Comment remplir les en-têtes de colonnes?
Grâce à la propriété Columns, on peut déterminer le nom de la colonne, sa taille et son alignement :
(•NomColonne1•, 60, )
Comment ajouter une ligne dans un ListView ?
Dim LVI As New ListViewItem
= •col1_ligne1•
(•col2_ligne1•)
(LVI)
Ces fenêtres toutes faites existent pour vous faciliter le travail. Il existe :
• Les MessageBox.
• Les InputBox
• Les OpenFileDialog
• Les SaveFileDialog
C’est une fonction qui affiche un message dans une boîte de dialogue, attend que l'utilisateur clique sur un bouton (Ok ou Oui-Non..), puis retourne un nombre entier qui indique le bouton choisi par l'utilisateur.
(TexteAAfficher, Titre, TypeBouton, Icone,
BoutonParDéfaut)
TexteAAfficher : Obligatoire. Expression String affichée comme message de la boîte de dialogue (longueur maximale 1 024 caractères). N'oubliez pas d'insérer un retour chariot si le texte est long, cela crée 2 lignes.
Titre : Expression String affichée dans la barre de titre de la boîte de dialogue. Si l'argument Titre est omis, le nom de l'application est placé dans la barre de titre.
TypeBouton : représente la somme des valeurs spécifiant le nombre et le type de boutons à afficher :
• MessageBoxButtons.OKOnly ‘Un seul bouton : Ok
• MessageBoxButtons.YesNo ‘Deux boutons : Oui/Non
• MessageBoxButtons.OkCancel ‘OK ou Annuler
• MessageBoxButtons.AbortRetryIgnore‘Annule,Recommence, ou Ignore’
Icône : représente le style d'icône à utiliser :
• MessageBox.Icons.Exclamation
• MessageBox.Icons.Question
• MessageBox.Icons.Information
BoutonParDéfaut : définit le bouton où s’applique le focus par défaut
• MessageBox.DefaultButtons.DefaultButton1
• MessageBox.DefaultButtons.DefaultButton2
• MessageBox.DefaultButtons.DefaultButton3
Retourne une constante qui indique quel bouton a été pressé :
•
•
• DialogResult.Cancel
• DialogResult.Retry
•
Remarque : L’ancienne syntaxe VB6 avec MsgBox est conservée :
Comme en javascript, une fonction permet d’ouvrir une fenêtre qui pose une question. Elle retourne la réponse tapée par l’utilisateur. Cette fois-ci, le retour est effectué dans une simple variable String.
Dim Nom As String
Nom = InputBox("Bonjour","Tapez votre nom ?")
Cela donne :
On pourrait rajouter un 3eme argument : la réponse par défaut.
Si l’utilisateur clique sur le bouton annuler, une chaîne vide est retournée.
Ouvre une boite de dialogue permettant de choisir un nom et un chemin de fichier. Par contre, c’est au programmeur d'écrire le code lisant les fichiers.
Dans la boite à Outils, cliquez sur OpenFileDialog puis cliquez sur la fenêtre en cours : un contrôle OpenFileDialog1 apparaît sous le fenêtre.
Dans le code à l’endroit où doit s’ouvrir la fenêtre, tapez :
OpenFileDialog1.ShowDialog()
C’est suffisant pour créer une fenêtre montrant l’arborescence des fichiers et répertoires 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 répertoire précis.
Par exemple je veux ouvrir un fichier .TXT dans le répertoire c:\MesTextes
Il faut dans ce cas, AVANT la méthode ShowDialog() renseigner certaines propriétés du contrôle OpenFileDialog1 :
With OpenFileDialog1
.Filter="Fichiers txt|*.txt" 'filtre uniquement sur les .txt
.Multiselect=False 'sélectionner 1 seul fichier
.CheckFileExists=True 'Vérifie si fichier existe
End With
Comment afficher la boite et vérifier si l'utilisateur à cliqué sur ouvrir?
If OpenFileDialog1.ShowDialog= Then end if
Maintenant, OpenFileDialog1.FileName contient le nom du fichier sélectionné (avec extension et chemin)
Path.GetFileName(OpenFileDialog1.FileName) donne le nom du fichier sans chemin.
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 création d'un nouveau fichier
SaveFileDialo1.OverwritePrompt=True'Message si le fichier existe déjà évite l'effacement d'ancienne données
SaveFileDialo1.DefaultExt="txt"'extension par défaut
On récupère aussi dans .FileName le nom du fichier si la propriété .ShowDialog a retourné
On peut regrouper des contrôles dans :
• Les GroupBox.
• Les Panels.
• Les PictureBox.
• Les TabControl.
Il est possible de regrouper des contrôles dans un container, par exemple plusieurs RadioButton. Le container peut être un GroupBox ou un Panel.
GroupBox Panel
(AutoScroll =True et BorderStyle=Single)
Le contrôle Panel est similaire au contrôle GroupBox ; mais, seul le contrôle Panel peut disposer de barres de défilement et seul le contrôle GroupBox peut afficher une légende.
La légende de la GroupBox est définie par la propriété Text.
Ce contrôle permet de créer des onglets comme dans un classeur, entièrement gérés par VB. Chaque page peut contenir d'autres contrôles.
En mode conception, en passant par la propriété TabPages, on ajoute des onglets dont la propriété Text contient le texte à afficher en haut (Ici: Page 1..). Il suffit ensuite de cliquer sur chaque onglet et d'y ajouter les contrôles.
A l’exécution, les onglets fonctionneront automatiquement.
Exemple: 3 cases à cocher permettent de colorer un label en vert rouge ou bleu. Comment gérer les évènements?
C'est plus élégant d'avoir une procédure unique qui, en fonction de la case à cocher qui a déclenché l'évènement, changera la couleur.
Remarque : la notion de groupe de contrôle comme en VB6 n'existe plus. Par contre par l'intermédiaire du Handles, il est possible d'associer plusieurs évènements à une seule procédure:
Private Sub CouleurCheckedChanges (ByVal sender As System.Objet, ByVal e As System.EventArgs)
Handles CouleurVert.CheckedChanged, CouleurRouge.CheckedChanged, CouleurBleu.CheckedChanged
End Sub
Cette procédure sera activée quand les cases à cocher CouleurVert CouleurBleu, CouleurRouge changeront d'état.
A noter que Sender est le contrôle ayant déclenché l'évènement et e l'évènement correspondant.
Pour modifier la couleur il faut ajouter dans la procédure:
Select Case
Case "CouleurRouge"
Lbl.BackColor= ..Rouge ..
Tous les contrôles héritent donc tous de la classe Windows Forms. Les Windows Forms ont des propriétés, que tous les contrôles récupèrent. C’est ces propriétés qui vont nous servir à dimensionner et positionner nos contrôles.
Left, Top coordonnées du coin supérieur droit (ou Bottom, Right inférieur gauche) Location : coordonnées X,Y du coin supérieur droit du contrôle en pixels.
Height, Width pour la hauteur et la largeur du contrôle en pixels. Size : hauteur, largeur peut aussi être utilisé.
Exemple :
=188
=300
Ou
Button.Location= New System.Drawing.Point(188,300)
(System.Drawing.Point() positionne un point dans l’espace)
Pour que l’utilisateur puisse redimensionner la fenêtre qu’il a sous les yeux (en cliquant sur les bords) il faut que la propriété FormBorderStyle de la fenêtre = Sizable.
Mais si l’utilisateur modifie la taille de la fenêtre qui contient les contrôles, la taille des contrôles ne suit pas.
Le bord ancré d’un contrôle reste à égale distance du bord du conteneur quand le conteneur (la fenêtre) est redimensionné.
En mode conception il suffit de cliquer sur '. . .' en face de Anchor pour voir s’ouvrir une fenêtre, cliquer sur les bords que vous voulez ancrer. Par défaut les bord Top (haut) et left(gauche) sont ancrés : vos contrôles ne bougeront donc pas au re-dimensionnement de la fenêtre (qui sert de conteneur) sur ces bords gauche et bas.
Exemple :
Prenons 2 contrôles dans une fenêtre, celui de gauche a la propriété Anchor=left et celui de droite à left et right.
Si je déplace le bord droit (ou le gauche d’ailleurs) : le contrôle droit est redimensionné, les 2 contrôles restent cote à cote.
Dock
Amarre aux bords. Il y a même possibilité d’amarrer aux 4 bords (Fill) pour remplir le conteneur. On va utiliser cela pour faire une barre d’état par exemple.
Beaucoup d’applications contiennent un menu. En général, on remarque que le contenu de ce menu (Fichier, Edition, Outils, Aide, …) est standardisé afin que l’utilisateur s’y retrouve sans aide.
Pour créer le principale menu de votre application, Iil suffit de chercher dans la boite à outils le contrôle qui se nomme « main menu » et le déposer sur la fenêtre : il apparaît en dessous de la fenêtre.
Pour inscrire les différents éléments du menu, il suffit de mettre le curseur sur le menu en haut de la fenêtre, ou est écrit « Taper ici » : tapez le texte du menu, « Fichier » par exemple.
Il apparaît automatiquement un ‘Tapez Ici‘ pour les lignes dessous (le sous-menu) ou le menu suivant.
Les lignes du menu sont nommées automatiquement MenuItem1, MenuItem2,
Quand le curseur est sur une ligne du menu, la fenêtre de propriété donne les propriétés de la ligne :
• La propriété ShortKey permet de créer un raccourci.
• La propriété Visible permet de faire apparaître ou non une ligne.
Si vous double-cliquez sur la ligne du menu vous voyez apparaître la procédure événement liée à la ligne du menu :
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem1.Click
End Sub
Quand l’utilisateur clique sur une ligne du menu, c’est le code contenu dans cette procédure qui est effectué.
C'est un menu qui s'ouvre quand, sur un objet, on clique sur le bouton droit de la souris.
En allant dans la boite à outils, chercher un Context menu, on le dépose sur la fenêtre : il apparaît en dessous de la fenêtre.
Si on le sélectionne avec la souris, il apparaît en haut et comme pour le menu principal, on peut ajouter des lignes.
Il faut ensuite affecter ce Context Menu à un contrôle; pour cela donner à la propriété ContextMenu du contrôle le nom du ContextMenu.
TextBox1.ContextMenu= ContextMenu1
Si vous double-cliquez sur une ligne du menu vous voyez apparaître les procédures évènement correspondantes.
Lorsqu'une fenêtre ou un contrôle est actif on dit qu'il a le focus. Si une fenêtre prend le focus, sa barre de titre en haut prend la couleur active, si c'est un contrôle texte, le curseur apparaît dedans.
Comment donner le focus à une fenêtre ?
Si une fenêtre est visible la méthode Activate lui donne le focus.
Form1.Activate()
Dans ce cas l'évènement Form1_Activated survient. L’événement Form1_Deactivated est déclenché quand la fenêtre perd le focus.
Comment donner le focus à un contrôle ?
TxtNom.Select() 'donne le focus au textBox et met le curseur dedans.
Rappel : On peut interdire a un contrôle le focus en donnant la valeurFalse à sa propriétéCanFocus.
L'évènement GotFocus se produit quand le contrôle prend le focus.
System.EventArgs) Handles TextBox1.GotFocus
End Sub
L'évènement LostFocus se produit quand le contrôle perd le focus.
Les évènements Enter, Leave se produit quand l'utilisateur entre ou sort du contrôle. En plus du focus, cela permet d’obtenir un verrou exclusif sur ce contrôle. En d’autres termes, si un autre processus tente d’accéder au contrôle, il se mettra en attente jusqu’à ce que le premier contrôle libère le verrou avec Leave.
Certains contrôles ne peuvent pas avoir le focus, comme les labels par exemple.
Dans une application ou un utilisateur saisi beaucoup de données dans de multiples contrôles, il passe souvent d'un contrôle (TextBox par exemple) au suivant avec la touche TAB.
|
Comment permettre cela? Chaque contrôle à une propriété TabIndex qui s'incrémente automatiquement en commençant par 0 puis 1, 2, 3 quand on ajoute des contrôles sur une fenêtre.
Lorsque l'utilisateur appuie sur TAB, le focus passe au contrôle qui a le TabIndex immédiatement supérieur.
On peut modifier le TabIndex des contrôles pour modifier l'ordre de tabulation.
Quand TabStop a la propriété False (au niveau d'un contrôle) celui ci est exclu de l'ordre de tabulation et le focus ne s'arrête pas.
Dans beaucoup d'applications certains contrôles ont un raccourci clavier:
Exemple: Nouveau est une ligne de menu. N étant souligné, ALT-N déclenche la ligne de menu, donne le focus au contrôle.
Comment faire cela: Dans la propriété Text du contrôle, quand on tape le texte en mode conception, il faut mettre un '&' avant la lettre qui servira de raccourci clavier.
'&Nouveau' dans notre exemple donnera bien Nouveau et ALT N fonctionnera.
Pour une TextBox, la propriété Text ne peut pas être utilisée, aussi il faut mettre devant la
TextBox un contrôle label (qui lui ne peut pas avoir le focus), si le TabIndex du label et du
En règle générale, la barre de boutons représente des raccourcis sur les fonctions les plus utilisées dans le « main menu ».
Voici un exemple classique, sous le menu il y a une barre de bouton: Nouveau, Ouvrir, Enregistrer, Chercher, Imprimer
Il faut chercher dans la boite à outils un contrôle ToolBar, il se place en haut, sous le menu. Mettre aussi un ImageList. (Un contrôle ImageList est un contrôle qui stocke des images, chaque image étant chargés en mode conception et repérées par un numéro (0,1,2,3..)
Dans les propriétés du ToolBar mettre dans la propriété ImageList, le nom du contrôle ImageList qui contient les images des boutons.
Ouvrir la collection Buttons dans la fenêtre des propriétés de la ToolBar pour pouvoir ajouter ou modifier les boutons:
Vous pouvez ajouter ou enlever des boutons. Chaque bouton a ses propriétés affichées à droite:
• Name : Nom du Bouton
• ImageIndex donne le numéro de l'image (contenue dans l'ImageList) qui doit s'afficher dans le bouton.
• ToolTipText donne le texte du ToolTip (Carré d'aide qui apparaît quand on est sur le bouton) Il faut aussi que la propriété ShowToolTip de la ToolBar soit à True
L'évènement déclenché par le click de l'utilisateur sur un bouton est: ToolBar1_ButtonClick
L'argument e contient les arguments de l'évènement click de la ToolBar. e.Button contient le nom du bouton qui a déclenché l'évènement. Pour chaque nom de bouton, on appellera la procédure correspondante ensuite.
Comme d'habitude, il suffit de double-cliquer sur la ToolBar pour faire apparaître
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()
Open()
ElseIf e.Button Is SaveButton Then
Save()
ElseIf e.Button Is PreviewButton Then PrintPreview()
End If
End Sub
La barre d'état se trouve en bas de la fenêtre et affiche des informations relatives aux opérations en cours.
Dans la fenêtre des propriétés 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"
Pour afficher des images, il existe le contrôle PictureBox.
Le contrôle PictureBox sert à afficher des graphismes au format bitmap, GIF, JPEG ou icône (Extension .BMP .GIF .JPG .WMF .ICO). Les GIF animés sont acceptées et s'animent sous VB.
L'image affichée est déterminée par la propriété Image, laquelle peut être définie au moment de l'exécution ou du design. La propriété SizeMode détermine la façon dont l'image et le contrôle se dimensionnent l'un par rapport à l'autre.
On peut charger une image en mode conception ou dans le code:
PictureBox1.Image = Image.FromFile("")
(L'objet de la Classe Image charge une image d'un fichier puis l'affecte à la propriété Image.)
Remarque : Pour quoi la syntaxe suivante ne fonctionne t’elle pas ?
PictureBox1.Image.FromFile("")
Car, dans la première syntaxe la première utilisation du mot « image » est pour une propriété du PictureBox et la seconde utilisation du mot « image » représente la classe Image.
Comment effacer une image?
If Not (PictureBox1.Image Is Nothing) Then
PictureBox1.Image.Dispose() ‘destructeur (pour l’objet image affecté à la propriété image)
PictureBox1.Image = Nothing ‘Réinitialisation de la valeur par défaut de la propriété Image (Propriété Image à Null)
End If
Les objets de la Classe Image ont, comme d'habitude, des propriétés et des méthodes.
PictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipX)
La méthode Save sauvegarde l'image dans un fichier.
("c:\")
Noter bien que le nom de l'extension suffit à imposer le format de l'image. On peut charger une image .GIF puis la sauvegarder en .BMP
Il y a bien d'autres propriétés gérant les dimensions, la palette de l'image.
Le contrôle ImageList sert de containeur à image, c'est une collection d'images. Les images qu'il contient seront utilisées par d'autres contrôles (PictureBox, Listview, TreeView, Button .). Il n'est pas visible en exécution.
En conception il apparaît en bas sous la fenêtre. A droite figurent ses propriétés, en particulier, la collection Images qui contient les images et la propriété TransparentColor qui indique la couleur qui doit être transparent, c'est à dire non visible.
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ée.
Ensuite pour utiliser une image de l'ImageList dans un autre contrôle, il faut modifier les propriétés de cet autre contrôle (un bouton par exemple).
La propriété ImageList du bouton doit contenir le nom du contrôle imageList et ImageIndex du bouton doit contenir l'index de l'image dans l'imageList.
btOk.ImageList = imagelist1 btOk.ImageIndex = 2
Un ImageList peut aussi être chargée par code:
(Image.FromFile(NomImage))
On ajoute à la collection Images une image venant d'un fichier nommé NomImage. On peut surchargé la méthode Add en fournissant en plus la couleur transparente.
(Image.FromFile(imageToLoad),
CouleurTransparente)
La taille des images peuvent aussi être modifiée par code:
imageList1.ImageSize = New Size(255, 255) imageList1.TransparentColor = Color.White
Il faut déclarer une variable avant de l’utiliser, pour cela on utilise l’instruction DIM
Cette variable peut être utilisée pour conserver une chaîne de caractère. Dans ce cas, on fait une affectation.
Str= "TOTO"
On peut afficher le contenu de la chaîne dans un label (zone présente dans une fenêtre et ou on peut afficher du texte) par exemple :
= Str
Remarquons que pour définir une chaîne de caractères il faut utiliser des " " : Ce qui est entre " et " est la chaîne de caractères. On parle de chaîne littérale: (une représentation textuelle d'une valeur particulière)
Après avoir été crée une String contient « NOTHING » et non pas une chaîne vide (""), il faudra l'initialiser pour qu'elle contienne quelque chose.
Dim Str As String 'Str contient Nothing
Str= "" 'Str contient "" : chaîne vide
Str= "TOTO" 'Str contient "TOTO"
Si je veux inclure un caractère " dans la chaîne il faut le doubler pour qu'il ne soit pas considérer comme caractère de fin de chaîne:
Str="Bonjour""TOTO""" 'Afficher cela donne : Bonjour "TOTO"
On peut initialiser la variable en même temps qu’on la dimensionne.
Dim Chaîne as string = "Toto"
On peut dimensionner plusieurs variables d'un même type sur une même ligne.
Dim x, y, z As String 'Dimensionner 3 variables string
Les Variables 'chaîne de caractères' sont des objets 'STRING'. Le type String (Chaîne de caractères) est une Classe qui a des méthodes.
Pas besoin de connaître toutes les méthodes, il suffit (Après déclaration de la String par DIM Str AS String) de taper Str. .Et vous voyez apparaître toutes les propriétés et méthodes :
.Split
.StarsWith
..
.ToUpper
.Trim
.ToUpper
Mettre en majuscules une chaîne de caractère
Str=Str.ToUpper() ‘Si Str contenait "abc", il contiendra "ABC"
.ToLower
Transforme par contre la chaîne en minuscule.
Si je compare A = "Vb" et B= "vb" elles sont différentes.
Si je compare A.ToLower et B.ToLower elles sont égales.
.Trim
Permet de supprimer des caractères en début et fin de chaîne.
Dim A As String = "#@[email protected]#"
Dim B As Char() = {"#", "@"}
(B)'Donne A= "Informatique"
Attention : Bien utiliser Char() qui est un tableau de caractères pour définir les caractères à supprimer.
Dim B As string= "#@" est déconseillé car produisant des résultats curieux. On peut à la rigueur utiliser les String pour un seul caractère.
Pour enlever les espaces avant et après la chaîne (Cas le plus fréquent) :
(" ")
Il existe aussi StartTrim et EndTrim pour agir seulement sur le début ou la fin de la chaîne.
.Length
Taille d’une chaîne en nombre de caractère.
Dim S as String= "VB"
(S.Length.ToString) ‘Affiche 2
.Concat
Concaténation de plusieurs chaîne : mise bout à bout :
S = String.Concat(A,B)
Vous pouvez aussi utiliser l’opérateur de concaténation : S=A&B
(S=A+B marche mais est déconseillé)
.Insert
Insère une chaîne dans une autre.
Dim S as string= "VisualBasic"
S= A.Insert(6," " ) ‘Donne S= "Visual Basic"
.Replace
Remplace partout dans une chaîne de départ, une chaîne par une autre.
Dim S as string= "Visual_Basic"
S= S.Replace("_"," " ) ‘Donne S= "Visual Basic"
Dim LaDate as string= "12.02.1990"
LaDate= LaDate.Replace(".","/" ) ‘Donne S= "12/02/1990"
.Split
Découpe en plusieurs sous Chaînes une chaîne de départ, cela par rapport à un séparateur.
Dim S as string= "Philippe;Jean ;Toto"
Dim Separateur as Char = ";"
Dim Nom() as String ‘Tableau de String
Nom=S.Split(Separateur)
Donne :
Nom(0)= »Philippe »
Nom(1)= »Jean »
Nom(2)= »Toto »
Remarque: Quand on dimensionne Nom(), on ne donne pas le nombre d'élément, c'est Split qui crée autant d'élément qu'il faut.
.IndexOf .LastIndexOf
Dim A as String= ""
Dim chrPoint as Char()={"."}
Dim chrE as Char()={"."}
A.IndexOf(chrPoint) ‘retourne 3 (la numérotation commence à 0)
A.LastIndexOf(chrE) ‘retourne la dernière occurrence du E = 6
.Compare
Compare 2 chaînes :
String.Compare(a,b)
Retourne un entier
• Négatif si a<b
• 0 si a=b
• Positif si a>b
.Substring
Extrait une partie d’une chaîne
Dim A as string= "Informatique"
(A.Substring(2,3)) ‘Affiche for
.Char
Une chaîne peut être perçue comme un tableau de caractères (instances Char) ; vous pouvez extraire un caractère particulier en faisant référence à l'index de ce caractère par l'intermédiaire de la propriété Chars. Par exemple :
Dim maString As String = "ABCDE" Dim monChar As Char
monChar = maString.Chars(3) 'monChar = "D"
Une variable numérique peut contenir des données numériques. Une variable numérique peut être entière:
• Integer (entier)
• Short (entier court)
• Long (Entier long)
• Byte (entier de 0 à 255)
mais aussi, une variable peut être réelle (avec virgule)
• Single (virgule flottante simple précision)
• Double (virgule flottante double précision)
• Decimal (virgule fixe haute précision)
On déclare une variable numérique avec DIM, on peut l’initialiser en même temps :
Dim i as Integer= 3
Si la variable est numérique, il faut la transformer en String avant de l’afficher :
Dim I As Integer=12
= I.ToString
.ToString fait partie des méthodes. Il y en a d'autres:
.GetType retourne le type de la variable
Dim i As Integer
= i.GetType.ToString 'Affiche: System.Int32
.MaxValue .MinValue donne le plus grand et le plus petit nombre possible dans le type de variable.
On verra qu’on peut utiliser des opérateurs + - * / .
Dim I As Integer = 2
Dim J As Integer
On rappelle que le séparateur est le point :
J=1.2 ‘veut dire J=1,2 en bon français !!
Il existe des fonctions mathématiques. Pour quelles soient disponibles il faut d’abord importer l’espace de nom Import
Dim N As Single
Dim R As Single
R=Abs(N) ‘retourne la valeur absolu
‘Si N=-1.2 R=1.2
R=Sign(N) ‘retourne le signe
‘Si N=-1.2 R=-1 (négatif) ; retourne 1 si nombre positif
R=Round(N) ‘retourne le nombre entier le plus proche ‘ N=1.7 R=2
‘ N=1.2 R=1
‘ N=1.5 R=2
On peut donner en second paramètre le nombre de digit:Math.Round(Valeur, 2)donnera 2 décimales après la virgule.
R=Floor(N) ‘retourne le plus grand entier égal ou inférieur.
‘ N=1.7 R=1
R=Ceiling(N)‘retourne le plus petit entier égal ou supérieur
‘ N=1.2 R=2
R=Max(2,3) ‘retourne le plus grand des 2 nombres.
‘retourne 3
R=Min(2,3) ‘retourne le plus petit des 2 nombres.
‘retourne 2
R=Pow(2,3) ‘retourne 2 puissance 3. ‘retourne 8
R=Sqrt(9) ‘retourne la racine carré.
‘retourne 3
Le type de données Boolean correspond à une valeur non signée interprétée comme True ou False. Si une variable est destinée à ne contenir que des informations de type true/false, yes/no ou on/off, déclarez-la avec un type Boolean.
La valeur par défaut de Boolean est False. Dans l'exemple suivant, RunningVB est une variable de type Boolean qui enregistre une simple valeur yes/no.
Dim bool As Boolean ' par défaut bool = False
If bool = False Then
("La valeur par défaut est bien FALSE") End If
CLR stockage nominal
Plage de valeurs
Boolean
System.Boolean
2 octets
True ou False.
Byte
1 octet
0 à 255 (non signés).
Char
2 octets
0 à 65 535 (non signés).
Date
System.DateTime
8 octets
0:00:00 le 1er janvier 0001 à 23:59:59 le 31 décembre 9999.
Decimal
System.Decimal
16 octets
0 à +/-79 228 162 514 264 337 593 543 950 335 sans décimale ; 0 à +/-
7,9228162514264337593543950335 avec
28 décimales ; le plus petit nombre différent de zéro étant +/-0,0000000000000000000000000001 (+/-1E-28).
Double
(virgule flottante à double précision)
System.Double
8 octets
-1,79769313486231E+308 à
-4,94065645841247E-324 pour les valeurs négatives ; 4,94065645841247E-324 à 1,79769313486231E+308 pour les valeurs positives.
Integer
System.Int32
4 octets
-2 147 483 648 à 2 147 483 647.
Long
(entier de type Long)
System.Int64
8 octets
-
9 223 372 036 854 775 808 à 9 223 372 036 854 7 75 807.
Object
System.Object
(classe)
4 octets
N'importe quel type peut être stocké dans une variable de type Object.
Short
System.Int16
2 octets
-32 768 à 32 767.
Single
(virgule flottante en simple précision)
System.Single
4 octets
-3,402823E+38 à -1,401298E-45 pour les valeurs négatives ; 1,401298E-45 à 3,402823E+38 pour les valeurs positives.
String
(longueur variable)
System.String (classe)
Dépend de la plateforme
d'implémentation
0 à environ 2 milliards de caractères Unicode.
On a vu qu'on peut afficher les chaînes de caractères, on fait des calculs avec les variables numériques.
Aussi, il faut transformer cette donnée numérique en chaîne avant de l’afficher, on le fait avec la méthode .ToString :
Dim I As Integer=12
= I.ToString ' Conversion String=>numérique : Affiche '12'
A l’inverse une chaîne de caractère peut être transformée en numérique :
Par exemple, l'utilisateur saisie un nombre, mais il tape des caractères au clavier et c'est cette chaîne de caractères qui est retournée, il faut la transformer en numérique.
Dim S as String
Dim i as Integer
'Saisie par une InputBox de la valeur S="45"
I=Integer.Parse(S)
Dans cet exemple, on observe que le type Integer qui a une méthode (Parse) qui transforme une chaîne en entier.
On peut aussi utiliser, et c’est plus simple, CType pour convertir n’importe quel type en n’importe quel type :
Il suffit de donner à cette fonction la variable à modifier et le type à obtenir.
I=Ctype(S,Integer)
CType fait toutes les conversions, mais on peut aussi utiliser des fonctions qui sont spécifiques 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()
CStr()
Exemple : CDbl convertit expression et retourne un 'Double'.
Dim I As Integer=123
Dim D As Double
D=CDbl(I) 'donnera D=123 D est un Double
Remarque:
Il faut faire attention aux conversions de types car cela peut donner de drôles de résultats. Par exemple, les fonctions CInt et CLng devraient arrondir les parties décimales égales à 0,5 au nombre pair le plus proche. Par exemple, 0,5 s'arrondit à 0 et 1,5 s'arrondit à 2. Bizarre!!
La Classe System.Convert permet la conversion d'un type de base vers un autre: Quelques Exemples :
.ToString exemple : str = System.Convert.ToString(byteVal)
.ToSingle ‘Pour convertir un Byte en Single
.ToDecimal ‘en Decimal
On a des méthodes pour pratiquement convertir tous les types et tous les types. Rechercher dans la documentation pour le type qui vous intéresse.
On verra plus loin, la fonction Format utilisée pour convertir les valeurs numériques que vous voulez mettre aux formats dates, heures ou monnaie ou dans d'autres formats définis par l'utilisateur.
IsNumeric()
On utilise la fonction IsNumeric() pour déterminer si le contenu d'une variable peut être évalué comme un nombre, si la conversion est possible. 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.
Les tableaux permettent de classer des données de même type. Les tableaux vous permettent de faire référence à un ensemble de variables par le même nom et d'utiliser un numéro, appelé index ou indice, pour les distinguer.
Comment déclarer un tableau :
Dim Tableau(3) As Integer
Entraîne la création des 3 variables entiers sachant que les index commencent à 0.
Noter que comme c'est un tableau d'entiers, juste après la création du tableau les éléments sont initialisés à 0.
Tableau(1)= 12 ‘affecte le nombre 12 au 2eme élément du tableau.
Un tableau peut avoir plusieurs dimensions :
Dim T(2,2) as integer ‘3 X 3 éléments
Pour un tableau à 2 dimensions le premier argument représente les lignes, le second les colonnes.
1,1 | 1,2 | 1,3 |
2,1 | 2,2 | 2,3 |
3,1 | 3,2 | 3,3 |
Il est possible de créer des tableaux à 3, 4, etc.… dimensions:
Dim T(2,2,2) ‘3X3X3 éléments.
On peut créer des tableaux de tableaux:
Dim T(2),(2) ‘Il a autant d'élément que le tableau T (2,2)
Il est possible de créer des tableaux avec tous les types de variable (y compris les structures)
Dim Mois() As String = {Janvier,Février,Mars……}
On verra dans un des exemples que l'on peut créer un tableau avec la méthode CreateInstance. Redim permet de redimensionner un tableau, si on ajoute Preserve les anciennes valeurs seront conservées.
ReDim Preserve Tableau(0 To 4)
Erase efface le tableau et récupère l’espace.
Un tableau est un objet !!
Créons 2 tableaux et examinons les principales méthodes.
Dim a(3) As String Dim b(3) As String
b=a ‘Copie le tableau a dans b
‘Est équivalent
Attention: il copie les références (l’adresse, l’endroit 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 (l’adresse en mémoire) est copié.
Pour obtenir une copie ‘indépendante’ faire : b=a.clone
Dans ce cas si vous modifié a(2), b(2) ne sera pas modifié.
Tous les tableaux viennent de la classe Array; vous pouvez accéder aux méthodes et propriétés de System.Array de chaque tableau Par exemple, la propriété Rank retourne le nombre de dimension du tableau et la méthode Sort trie ses éléments.
Exemple : Soit un tableau Mois()
Array.Clear(Mois,0,2) ‘Efface 2 éléments à partir de l’élément 0
Array.Reverse(Mois, 1, 3) ‘inverse 3 éléments à partir de l’élément 1
(Mois,1,Mois2,1,20) ‘copie 20 éléments de Mois à Mois2 à partir du 2eme élément.
(Mois) ‘Trie le tableau Mois
Malheureusement cette méthode marche sur des tableaux unidimensionnels uniquement.
Equals qui compare 2 tableaux.
IndexOf recherche un objet spécifié dans un tableau unidimensionnel (trié ou non), retourne l'index de la première occurrence.
Dim myIndex As Integer = Array.IndexOf(myArray, myString)
Retourne -1 si l'élément n'est pas trouvé.
Ubound retourne le plus grand indice disponible pour la dimension indiquée d'un tableau
Dim MonTableau(10, 15, 20) ‘ tableau multi-dimensionnel 10x15x20
Indice = UBound(MonTableau, 1) 'Retourne 10 (1=la 1ère dimension)
Indice = UBound(MonTableau, 2) 'Retourne 15 (2=la 2ème dimension)
Indice = UBound(MonTableau, 3) 'Retourne 20 (3=la 3ème dimension)
Length retourne un entier qui représente le nombre d'éléments dans le tableau.
Fait partie de System.Collections. Plus qu’une alternative aux tableaux, l’objet collection est une référence principalement utilisée dans Visual Basic afin d'assurer le suivi de divers éléments, tels que tous les contrôles d'un formulaire (par exemple, la collection Controls).
Par ailleurs, les utilisateurs peuvent créer leurs propres collections afin d'organiser et de manipuler des objets.
Une collection fonctionne plutôt comme un liste d'éléments dans laquelle il est possible d’ajouter ou d’enlever un élément à n’importe quel endroit sans avoir à se préoccuper de sa taille ni ou se trouve l'élément.
Le nombre d'élément n'est pas défini au départ comme dans un tableau. Dans une collection il n'y a que les éléments que l'on a ajoutés.
La particularité des collections réside sur les éléments qui sont repérés grâce à une Clé unique comme les listes et à un index comme les tableaux.
Les items affichées dans une ListBox donne une idée concrète de ce qu'est une collection.
Pour créer une collection d'objets, vous devez premièrement créer l'objet Collection.
Dim maCollection As New Collection
Dès que cet objet est créé, vous pouvez ajouter, enlever ou manipuler des éléments.
On utilise la syntaxe: ( élément, Clé) ("Bonjour", "30") ("Monsieur", "31") ("Et", "32")
("Madame", "33")
Il peut y avoir 2 autres paramètres:
Dim maCollection As New Collection ("Element1", "1") ("Element3", "3", , 1)
("Element2", "2", 2)Before ou After peuvent être utilisés pour placer l'élément à insérer avant ou après un élément de la collection. Si Before ou After est un nombre c'est l'index des éléments qui est utilisé, si c'est une string c'est la clé.
La propriété Item permet l’accès aux éléments de la collection :
= ("33")'retourne Madame (l’élément correspondant à la clé 33)
= (4)'retourne Madame aussi (le 4ème index)
Attention le premier élément est ici l'élément 1 (l'index va de 1 à Count); c'est hérité du VB!!
Dans la mesure où la propriété Item est la propriété par défaut d'un objet Collection, vous pouvez l'omettre lorsque vous accédez à un élément d'une collection. Il est donc également possible d'écrire les exemples de code précédents comme suit :
= maCollection("33")
= maCollection(4)
La méthode Remove permet de supprimer un élément d'une collection :
object.Remove(index | key)
L'argument index peut être l'emplacement de l'élément à supprimer ou la clé de l'élément. Vous pouvez donc utiliser l'une des deux instructions suivantes pour la suppression d’un élément : maCollection.remove("33")
maCollection.remove(4)
La ArrayList est une collection particulière. C’est une version élaborée d’un tableau. Comme les tableaux,
• il n'y a pas de clé mais un index
• la capacité des listes d’objets n’est pas fixe
• elles fournissent des méthodes qui permettent d'ajouter, d'insérer ou de supprimer une série d'éléments.
• elles sont limitées à une dimension, pas les tableaux !
Attention le premier élément est ici l'élément 0 (l'index va de 0 à count-1) ; c'est du .NET!!
Dim L As ArrayList = ArrayList.Repeat("A", 5)'On crée une collection de 5 éléments contenant chacun "A" (on répète "A")
L.Add("Bonjour") 'On ajoute un élément à la collections (L(0)) 'ou L.Item(0) : On affiche le 1er élément
(L.Count.ToString) 'On affiche le nombre d’élément.
L.Remove("Bonjour") 'On enlève un élément de la liste
L.Sort() 'Trie la collection
L.Clear() 'Efface tous les éléments
L.Containts("Bonjour") 'retourne True (la liste contient élément)
L.RemoveAt(0) 'On enlève l’élément 0 de la liste
L.Insert(position, aInserer) permet d’insérer à un index spécifié InsertRange insère une ArrayList dans une autre ArrayList.
Mêmes fonctionnalités que pour une collection mais limité sur le type chaîne. Cela à pour but d’optimiser l’exécution.
Dim myCol As New StringCollection()
(string)
Optimisé pour le stockage de paires clé/valeur.
La clé toujours unique permet de retrouver la valeur
Dim H As New Hashtable()
H.Add(Clé,Valeur) ’Ajoute un élément
H.Item(Clé) ’Retourne l’élément correspondant à une clé. H.ContainsKey(Clé) ’Retourne True si la clé est dans la table.
Collection de type FIFO (First In, First Out) : premier arrivé, premier sorti.
Dim myQueue As New Queue()
myQueue.DeQueue() supprime et retourne l’objet de début de liste myQueue.EnQueue(valeur) ajoute un objet en fin de liste () retourne l’objet de début sans le supprimer
Collection de type LIFO (Last In, First Out) : dernier entré, premier sorti.
Dim myStack As New Stack()
(valeur) insère un objet en haut de la pile () enlève et retourne un objet en haut de la pile
Certains objets ont une liste de donnée, Vb les organise en Collections. Généralités sur les collections
1er point : Une collection peut donc faire partie des propriétés d'un objet.
On a vu, par exemple, qu’un TextBox peut contenir du texte, et bien, ce contrôle à une collection nommé TextBox1.lines qui contient chaque ligne du texte (s'il y en a plusieurs : multiline=true)
Autre exemple, les contrôles ListBox possède une collection Items dans laquelle sont placé tous les éléments contenus dans la liste. Pour ajouter un élément on utilisera la méthode Add() de la collection Items: ( )
Encore plus: chaque formulaire possède une Collections Controls. Il s'agit d'une collection qui contient tous les contrôles de ce formulaire.
2ème point : Pourquoi le premier élément est 0 ou 1?
Le .NET Framework normalise les collections comme étant des collections de base zéro (ArrayList par exemple). La classe Collections de Visual Basic sert principalement à assurer une compatibilité avec des versions précédentes et fournit des collections de base 1.
3ème point : Les collections font partie de l'espace de nom System.Collections
Imports System.Collections
VB est naturellement très arrangeant. Par défaut il transforme, quand c’est possible, et si nécessaire un type de variable en un autre type.
Si je passe un nombre qui est en Double précision (Double) dans une variable en simple précision (Single), VB accepte, au risque de perdre de la précision (s’il y a un très grand nombre de chiffre significatif).
Dim D As Double
Dim S As Single
D=0.123456789
S=D 'affectation d’un type vers un autre type différent
(s) 'affiche 0,1234568
Cela peut être ennuyeux si c’est des calculs précis et le programmeur ne s’en rend pas forcément compte !!
Pour éviter cela il faut activer l’OPTION STRICT à ON Pour un projet en cours :
Page de propriétés de Langage VB. Propriétés communes, génération.
En face de Option Strict, mettre On
Pour mettre l’option SCTRICT à ON par défaut pour tous les projets
Menu Outils > Option
Dans « Projet » puis « Valeurs par défaut VB »
En face de Option Strict, mettre On
Maintenant seules les conversions effectuées explicitement seront autorisées.
Ainsi, S=D est souligné dans le code pour signaler une conversion interdite.
(Par contre D=S est accepté car on passe d'une variable à une variable plus précise)
Il faudra maintenant, pour notre exemple, écrire :
S= CType(D,Single)
‘Cela entraîne une conversion de la valeur Double en Single ; s’il y a perte de précision, elle se produit quand même, MAIS le programmeur SAIT qu’il y a conversion, il prendra ou pas EN CONNAISSANCE DE CAUSE le risque.
Pour la déclaration des variables nous avions dit que toute variable utilisée devait être déclarée. Par défaut c’est vrai.
On pourrait (c’est fortement déconseillé) mettre cette option à Off. Cela ne rendrait plus obligatoire la déclaration des variables.
MaVariable=10 sans déclaration préalable serait acceptée.
Cela présenterait certains inconvénients : Si on faisait une faute de frappe en tapant le nom d’une variable, VB accepterait et créerait une nouvelle variable objet.
Dim MaVariable
MaVariabble=10 ‘Faute de frappe(bb)
Dans ce cas, je crois avoir mis 10 dans MaVariable. En fait j’ai mis 10 dans une nouvelle variable nommée MaVariabble. Mavariable à toujours une valeur=0.
Donc, c’est clair et sans appel : laissez Option Explicit à On. Dans ce cas si vous tapez le nom d'une variable non déclarée, elle est soulignée en bleu.
On peut aussi indiquer dans un module les options; ces instructions doivent être tapées avant toutes les autres.
Const NomFichier= "" ‘constante chaîne de caractères.
Const i As Integer =1 ‘constante Integer
L’intérêt des constantes est d’améliorer la lisibilité et d’améliorer la vitesse d’exécution.
Si une constante doit être modifiée ultérieurement, il suffit en mode conception, de modifier sa valeur ce qui modifie sa valeur dans l’ensemble du code de l’application.
On rappelle que seuls les types primitifs peuvent avoir des constantes (Byte, Boolean, Shot, Integer, Long, Single, Double, Decimal, Date, Char, String)
Il existe une liste de constante prédéfinie dans différentes Classes.
= Chr$(13)+Chr$(10) : sert à sauter une ligne.
("VISUAL" & & "BASIC")
On obtient à l’écran une boîte de dialogue avec le texte mis en forme de cette manière: VISUAL BASIC
= Chr$(9) : caractère de tabulation
ControlChars.NullChar : Aucun caractère
ControlChars.Nothing : Chaîne vide
Taper ControlChars. et, comme d’habitude, vous obtiendrez la liste des constantes.
On peut aussi utiliser les couleurs définies par VB
‘Pour le bleu
Si Import a été tapé,
PI contient 3,14…
E contient la base log naturel
Il est parfois nécessaire de savoir si une touche précise à été tapée par l'utilisateur au clavier, pour cela il faut connaître 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 recherchée et vous obtenez la constante correspondant à la touche:
Keys.Right 'Désigne le code de la touche '->'
On rappelle que True et False sont des valeurs Booléens faisant partie intégrante de VB. Pour les anciens de VB6 ne plus utiliser -1 et 0 (D'ailleurs c'est maintenant 1 et 0).
Arithmétique ^, –, *, /, \, Mod, +, =
Assignation =, ^=, *=, /=, \=, +=, -=, &=
Comparaison =, <>, <, >, <=, >=, Like, Is
Concaténation &, +
Opérations logiques/de bits Not, And, Or, Xor
A And B retourne True si A et B sont vrais
A Or B retourne True si une des 2 est vrai
A Xor B retourne True si une et une seule est vrai Not A retourne True si A était faux et vice versa
\ Division entière ex : 10\3=3
Is L'opérateur Is détermine si deux références d'objet font référence au même objet. Toutefois, il n'effectue pas de comparaisons de valeurs. Si object1 et object2 font tous deux référence au même objet, l'argument result est True ; si tel n'est pas le cas, l'argument result est False.
5.10.1. Les structures conditionnelles
Présente le test d'une ou de plusieurs conditions Boolean.
Function Bonus(ByVal Performance As Integer, ByVal Salary As
Decimal) As Decimal
If Performance = 1 Then
Return Salary * 0.1
ElseIf Performance = 2 Then
Return Salary * 0.09
ElseIf Performance = 3 Then
Return Salary * 0.07
Else ‘cas par défaut Return 0 End If
End Function
Remarque: dans le cas où le ElsIf est utilisé, il est préférable de remplacer par le Select…Case pour plus de lisibilité…
Function Bonus(ByVal Performance As Integer, ByVal Salary As
Decimal) As Decimal
Select Performance Case 1
Return Salary * 0.1
Case 2
Return Salary * 0.09
Case 3
Return Salary * 0.07
Case Else 'Cas par défaut
Return 0 End Select
End Function
Décrit le test des diverses exceptions générées par votre code.
Dim GivenDate As Object 'contient une date récupérée et à traiter Dim NextCentury As Date Try
NextCentury = DateAdd("yyyy", 100, GivenDate)
Catch ThisExcep As System.ArgumentException
'un argument de fonction a une valeur incorrecte
Catch ThisExcep As ArgumentOutOfRangeException
'le résultat est supérieur au 31/12/9999
Catch ThisExcep As InvalidCastException
'GivenDate ne peut être interprété comme une date
Catch
'une exception non gérée est apparue Finally
'ce bloc est toujours éxecuté à la fin
End Try
Remarque : la fonction IIF(expression, true, false)
Function CheckIt (ByVal i As Integer) As String
CheckIt = IIf(i > 1000, "Grand chiffre", "Petit chiffre")
End Function
5.10.2. Les structures itératives
Décrit l'exécution d'un bloc d'instructions lorsqu'une condition est vraie.
Sub exempleWhile()
Dim i As Integer = 0
Dim Nombre As Integer = 10
While Nombre > 6 Nombre = Nombre - 1
i = i + 1 End While
MsgBox("On n’a bouclé " & i & " fois.") 'i=4
End Sub
Décrit l'exécution d'un bloc d'instructions jusqu'à ce qu'une condition soit satisfaite.
s’accompagne toujours de :
• While : tant que
• Ou Until : jusqu’à ce que
Autre subtilité de cette structure, la condition peut être mise en fin de boucle, cela permet d’effectuer au moins une fois le code avant le premier test.
Voici donc un exemple des différentes possibilités en prenant le cas d’un recherche d’un mot :
‘Pointer Mot suivant
Loop
Do Until MotCherché=MotPointé
‘Pointer Mot suivant
Loop
Do While MotCherché<>MotPointé
‘Pointer Mot suivant
Loop
Do
‘Pointer Mot suivant
Loop While MotCherché<>MotPointé
Décrit l'exécution d'un bloc d'instructions un nombre spécifié de fois. Voici son prototype:
For counter [ As datatype ] = start To end [ Step step ]
' code a executer
Next [ counter ]
Et un exemple :
Sub Preset(ByRef tab() As Integer)
Dim I As Integer
For I = 0 To (tab.Lenght – 1)
tab(I) = 128 Next I
End Sub
Décrit l'exécution d'un bloc d'instructions pour chaque élément d'une collection.
For Each elementvariable [ As datatype ] In collection
' code a executer
Next [ elementvariable ]
Exemple : mettre tous les arrières plans des contrôles de la feuille en noir
Dim ThisControl As System.Windows.Forms.Control
For Each ThisControl In ThisForm.Controls
ThisControl.BackColor = System.Drawing.Color.black
Next ThisControl
Quand on appelle une procédure (un sous-programme, une routine), le logiciel ‘saute’ au sousprogramme, il effectue celui-ci puis revient effectuer ce qui suit l’appel.
Nous avons déjà vu, qu’en VB, les sous programmes sont des Sub ou des Function.
On peut fournir aux sous-programmes des paramètres qui sont envoyez à la fonction. Exemple:
Function Carré ( V as Single) as Single
Return V*V End Function
Cette fonction retournera le carré du paramètre fournie.
Pour l'utiliser :
Dim resultat as Single
resultat= carré(2) 'resultat est alors égal à 4
On appelle la fonction carré avec le paramètre 2, elle retourne 4.
Les parenthèses.
Rappel, même s'il n'y a pas de paramètre, mettre des () lors de l'appel de procédure.
MaRoutine()
• Par valeur : (By Val) c’est la valeur, le contenu de la variable qui est envoyé.
• Par référence :(By Ref) c’est l’adresse (le lieu physique où se trouve la variable) qui est envoyé. Si la Sub modifie la variable, cette modification sera visible dans la procédure appelante après le retour.
Exemple de procédures:
Sub MaProcedure (ByRef x as Long, Optional ByVal y As Long)
End Sub
Si j'appelle cette procédure par MaProcedure (A, B) c'est l'adresse de A qui sera envoyée et la valeur contenue dans B. Elles se retrouveront dans les variables x et y de la procédure
MaProcedure.
Vous remarquerez qu’un argument d’une procédure peut être optionnel (optional).
Quand on déclare une variable, jusqu’où est-elle visible?
Variable locale
Si on déclare une variable dans une procédure, elle est visible uniquement dans cette procédure, c'est une variable locale:
Sub MaProcedure (ByRef X As Integer) Dim Y as integer
End sub
Après le End Sub, Y (et X aussi) n’est plus accessible, la variable est détruite.
Variable statique
Une variable est dite Statique si, a la sortie de la procédure, la valeur continue d'exister et garde sa valeur. Ainsi, lors des appels ultérieurs de la procédure, on retrouvera la valeur de la variable.
Sub compteur()
Dim A as integer
Static B as integer A +=1
B +=1 End sub
A chaque appel de cette procédure A aura la valeur 0 puis 1 puis disparaîtra. B prendra les valeurs 0, puis 1, puis 2 (Incrémentation à chaque appel) Dans un bloc d'instruction
Variable locale uniquement
Si vous déclaré une variable dans un bloc, elle ne sera visible que dans ce bloc:
Do
Dim Compteur A integer
Compteur +=1
Loop
La variable Compteur existe uniquement entre Do et Loop. A chaque itération, la variable est recrée à chaque fois…
En remplaçant Dim par Private; dans ce cas la variable est propre au module ou au formulaire, elle est visible dans toutes les procédures du module ou du formulaire mais pas dans les autres.
Variable publique
En remplaçant Dim par Public; dans ce cas la variable est accessible dans la totalité du programme.
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 procédure Button1_Click.
Pour se repérer et se souvenir quelle est la portée d'une variable, on utilise une lettre en début du nom de la variable:
g_MaVariable sera public (g comme global).
m_Variable2 sera accessible au niveau du module.
Dans un module standard, on met toutes les variables Public accessibles par tous. Leurs noms débutent par g. Ce sont les variables (et constantes) générales utilisées dans la totalité de l'application: état du programme, utilisateur en cours
Pour utiliser un objet en VB, il faut :
• Que la DLL correspondante soit chargée dans le projet en tant que référence.
Exemple de DLL :
• Que l'espace de nom soit importé. Une DDL contient, en général, plusieurs des classes d'objet. Pour utiliser une classe, il faut l'inclure dans le programme. On va, par exemple, importer l'espace de nom System.Windows.Forms (contenue dans . Cet espace de noms contient les classes « fenêtre » et « contrôles »):
Exemple d’importation : Import System.Windows.Forms
Une fois la référence faite au projet
Dim Form1 As Form
Form1 est donc un objet fenêtre qui hérite de tous les membres de la classe Form, on peut donc utiliser une méthode de cet objet:
()
Ou une propriété:
Form1.BackColor=RED
Visual Studio .NET repose à présent sur une toute nouvelle plate-forme que le nomme « Framework .NET ». Cette plate-forme apporte un lot important de solutions innovantes : • tout est objet (et il supporte désormais l’héritage)
• multi plateformes
• multi langages
Pour mieux comprendre ces évolutions, il est nécessaire de comprendre l’architecture du framework .NET :
|
Figure : Architecture du Framework .NET
• 1ère couche : l’environnement de développement Visual Studio .NET qui fournit tous les outils de développement. Il intègre à la fois Visual Basic .NET pour le développement d’applications traditionnelles et le développement d’applications à destination du Web.
• 2ème couche : le langage de programmation : il existe déjà plus d’une trentaine de langages compatibles avec le Framework .NET
• 3ème couche : le langage IL : pseudo code intermédiaire avant l’étape de compilation.
• 4ème couche : une application se compose toujours de fenêtres. Pour les plateformes Windows, PPC ou même smartphone, le type utilisé est le Windows Form. Pour une plateforme Web, c’est le Web Form.
• 5ème couche : les classe de bases sont spécifiques à la plateforme. Par exemple, il existe une classe Windows Form pour les applications Windows mais il existe aussi une classe Windows Form spécifique au PocketPC.
Ou le « ramasse-miettes » en français. Il est là pour palier aux fuites de mémoires qui restent un grand classique des problèmes que l’on rencontre en programmation.
Il s’agit par exemple, d’espaces alloués en mémoire et qui ne sont plus utilisés ou encore de références qui demeurent actives sur des objets dont on ne sert plus.
Pour résoudre ce problème, le Framework .NET a été doté d’un mécanisme nommé « Garbage Collector » qui se charge de scruter la mémoire utilisée par les applications .NET et de la récupérer pour la réalloué automatiquement.
On a vu qu'il existait des classes prédéfinies (celle du Framework par exemple) mais on peut soi même CREER SES PROPRES CLASSES:
Prenons un exemple, on veut créer une classe Voiture.
Public Class Voiture
'pour avoir une destruction deterministe lors d’un Dispose()
Implements System.IDisposable
'définition des attributs de la classe
Private m_marque As String
'constructeur sans arguments Public Sub New() m_marque = “” End Sub
'constructeur surchargé
Public Sub New(ByVal strMarque As String)
If strMarque.Length > 0 Then m_marque = strMarque
End If End Sub
'def d'une propriété de la classe pour acceder à un attribut
Public Property marque() As String Get
Return m_marque
End Get
Set(ByVal Value As String)
If Value.Length > 0 Then m_marque = Value
End If
End Set
End Property
'Exemple d’une methode
Public Function maMethode() As monType
'code de la fonction
End Function
'destructeur implicite (appelé à la l'arrêt de l'application)
Protected Overrides Sub finalize()
Dispose() End Sub
'destructeur explicite ET déterministe
m_marque = Nothing End Sub
End Class
Rappel: lors de l’implémentation d’une classe, trios choses à penser:
• Le(s) constructeur(s)
• Les accesseurs aux attributs de la classe
• Le(s) destructeur(s)
Pour la construction, plusieurs constructeurs peuvent se surcharger dans le cas ou vous voulez définir votre objet plus ou moins précisément (avec plus ou moins de propriétés)
Les accesseurs permettent l’accès aux attributs privés (ou protected pour l’héritage) de votre objet. Ils peuvent permettre seulement l’accès à la valeur (Get) ou la modification de cette valeur (Set), ou même encore les deux à la fois.
Concernant la destruction, 2 différents moments d’exécution sont gérés dans :
• finalize() : le destructeur implicite qui s’exécute automatiquement lors de l’arrêt de l’application
• dispose() : le destructeur explicite utilisé par le programmeur pour pouvoir détruire son objet a tout moment dans l’exécution de l’application
Remarque : par défaut, a l’appel de ce destructeur, la destruction n’est pas immédiate, elle est indéterminée, c’est-à-dire que l’on ne s’est pas réellement à quel moment cela va se produire.
L’implémentation de l’interface IDisposable permet de rendre déterministe cette destruction et donc de mieux maîtriser la gestion mémoire.
Rappel : une interface est une classe qui contient simplement la définition de ses membres, mais pas leur implémentation.
Public Interface IMultimedia
Property Titre() As String
Sub Lecture()
End Interface
Public Class CDAudio
Implements IMultimedia
Public Sub Lecture() Implements _
NomProjet.IMultimedia.Lecture
‘implementation de la méthode
End Sub
Public Property Titre() As String
Return m_titre
End Get
Set(ByVal Value As String) m_titre = Value
End Set
End Property
End Class
Cela permet d’avoir un squelette commun de développement pour toutes les classes utilisant cette interface et ainsi avoir des outils communs pour différents types d’objets qui se ressemblent.
Dans notre exemple, tous les objets « Multimédia » (CDAudio, Film, DVD, etc…) ont un titre et peuvent être lu.
L’héritage offre la capacité «d’étendre» une classe déjà existante, en lui ajoutant des fonctionnalités, des méthodes, ou des attributs.
Il devient donc possible, grâce à l’héritage, de créer de nouvelles classes, tout en ré exploitant les classes déjà créées, et ceci, en évitant une recopie complète.
Une classe, qui hérite d’une autre classe, se « spécialise » par rapport à sa classe mère. Comme exemple, on pourrait donner le suivant :
Class VEHICULE
Protected m_marque ‘Déclaration attribut PROTECTED
‘…
Overridable Sub Roule() ‘Méthode pouvant être redéfinie
‘…
End Sub
‘…
End Class
Class BERLINE
Inherits VEHICULE
Private m_couleurCapote
‘…
Public Sub New(ByVal strMarque as string, _
ByVal strCouleurCapote as string)
Me.m_couleurCapote = strCouleurCapote
Me.m_marque = strMarque ‘utilisation classique de la
‘propriété de la classe mère
End Sub
‘…
Overrides Sub Roule()‘Méthode redéfinie ds cette classe fille
‘…
End Sub
End Class