Cours complet en Visual Basic.net
Date de publication : 06/10/2007 , Date de mise à jour : 07/10/2007
Par
Aspic (autres articles)
Cet article constitue un cours complet en vb.net (framework 1.1 et 2.0). Vous trouverez les bases nécessaires pour commencer la programmation en vb.net. Ce cours est avant tout destiné aux débutants mais les amateurs de vb.net sont les bienvenus.
I. Introduction
I-A. Etes vous apte à commencer à programmer ?
I-B. A la découverte de Visual Basic
I-C. Les inconvénients du Framework
II. Structure du programme
II-A. Présentation des objets
II-B. Instructions et procédures
II-C. Les modules
III. Le langage Visual Basic
III-A. Les variables
III-A-1. Les variables
III-A-2. Les différents types de variables
III-A-3. Convertir des variables
III-A-4. La portée des variables
III-B. Les structures conditionnelles
III-B-1. Avec "If -Then"
III-B-2. Avec "Select Case - End Select"
III-C. Les boucles
III-C-1. Avec "For - Next"
III-C-2. Avec "Do - Loop"
III-C-3. Avec "While - End While"
III-C-4. Avec "For Each - Next"
III-D. Les opérateurs
III-D-1. Les opérateurs d'arithmétique et de concaténation
III-D-2. Les opérateurs de logique
III-D-3. Les opérateurs de comparaison
III-E. Les constantes et énumérations
III-F. Les tableaux
III-G. Les options de codage
IV. L'interface utilisateur
IV-A. Présentation
IV-B. La Form
IV-C. La Console
IV-D. Le Bouton
IV-E. Le Label
IV-F. La Textbox
IV-G. Les cases à cocher
IV-H. La Combobox
IV-I. Les listes
IV-J. La Picturebox
IV-K. La Progressbar
IV-L. Le Tabcontrol
IV-M. Les boîtes de dialogue
V. Le débogage
V-A. Les différents types d'erreurs
V-B. Comment éliminer les bugs ?
VI. La diffusion de l'application
VI-A. Comment créer une installation (Setup) ?
VI-B. Faire connaître son application
VI-C. Créer un raccourci pour votre application
VII. Remerciements et liens intéressants
VII-A. Remerciements
VII-B. Liens intéressants
I. Introduction
I-A. Etes vous apte à commencer à programmer ?
Considérant que vous savez normalement déjà allumer un PC et l'éteindre, utiliser une souris et un clavier de préférence, et que vous êtes motivé pour écrire des programmes en Visual Basic.NET, que ce soit pour le plaisir ou le travail, vous êtes donc prêt à débuter la programmation en VB.NET !
En plus d'un PC, il vous faut un exemplaire de Visual studio.NET. Dans le cas où vous douteriez de vos capacités à apprendre la programmation, souvenez-vous d'Albert Einstein (le célèbre physicien qui a inventé la théorie de la relativité). Un de ses instituteurs avait déclaré qu'il apprenait si lentement qu'il était sans doute attardé !
Peut-être en réponse à cela, Albert Einstein a dit un jour : " L'imagination est plus importante que le savoir ". Certaines personnes soutiennent qu'il aurait aussi dit : " Si mon instituteur est si intelligent, où est son prix Nobel ? " (Ce qui reste à vérifier !!)
Avec de l'imagination, un ordinateur et VS.NET (Visual Studio qui est l'outil de développement), vous êtes fin prêt pour le grand saut dans le monde de la programmation…
I-B. A la découverte de Visual Basic
Le Visual Basic.NET est la dernière version de Visual Basic. Pour comprendre les changements que Microsoft a apportés au langage Visual Basic dans cette version, il faut comprendre ce que Microsoft tente d'accomplir avec le concept .NET.
Il existe des centaines de langages de programmation différents pour résoudre différentes tâches. Un gros problème est que ces langages de programmation ne sont pas conçus pour travailler ensemble.
Même les langages de programmation d'un même éditeur, comme Microsoft, ont des problèmes à travailler ensemble. Les versions précédentes de Visual C++ et Visual Basic enregistrent les données, telles que chaînes et nombres, de façon différente. Du fait qu'il est très fastidieux de découvrir tous les moyens particuliers employés par chaque langage de programmation pour enregistrer et manipuler les chaînes et les nombres, la plupart des programmeurs écrivent leurs programmes à l'aide d'un seul langage de programmation, même lorsqu'un second langage convient mieux pour résoudre un problème particulier. Par exemple, le Visual Basic est très utile pour faire des applications de bureautique, le C++ est plus puissant que le Basic et donc à utiliser pour les très gros programmes. Quant au Java, il est utilisé dans la conception de sites Internet sophistiqués.
Microsoft a donc développé quelque chose baptisé " .NET Framework ", qui agit comme couche intermédiaire entre le système d'exploitation (Windows) et tous les programmes que vous écrivez. Cela résout deux problèmes majeurs.
Le premier problème résolu par le .NET est la possibilité pour différents langages de coopérer entre eux. Au lieu d'octroyer à chaque langage un accès direct au système d'exploitation de l'ordinateur, l'infrastructure .NET Framework force les langages qui ont été conçus pour travailler avec .NET (comme VB.NET) à stocker leurs chaînes et nombres exactement de la même manière. De la sorte, vous pouvez écrire un programme utilisant différents langages sans vous préoccuper du fait qu'un langage stocke et manipule les données de façon différentes d'un autre langage de programmation.
Le second problème résolu par le .NET Framework concerne la distribution du programme. Actuellement, la plupart des utilisateurs exécutent des programmes stockés sur leurs disques durs… Bref passons enfin aux choses plus intéressantes !
I-C. Les inconvénients du Framework
Tout ordinateur se plante périodiquement et la mise en place de nouvelles technologies résorbe rarement les faiblesses des technologies déjà mises en place. Aussi promoteur que soit .NET, ne vous laissez pas abuser par le marketing de Microsoft…
Le .NET Framework, étant un logiciel est sujet à toutes sortes de bugs qui font de l'usage de l'ordinateur une expérience frustrante. D'autant plus que cette technologie n'est disponible que pour les versions récentes de Windows (XP et suivant). Si vous souhaitez écrire des programmes pour Linux ou Windows versions antérieures, vous devez passer par la version 6.0 de Visual Basic.
Bon c'est fini pour l'introduction, passons au codage pur ! Mais avant tout, regardons d'un peu plus près, les structures utilisées dans la technologie .NET.
II. Structure du programme
II-A. Présentation des objets
Déjà il faut savoir ce qu'est un objet en programmation. Prenons un exemple de la vie courante :
Une voiture est un objet. Jusqu'à présent, rien de bien compliqué. Cette voiture a des phares, un volant, des pédales, un capot, une couleur, une marque… Ce sont des propriétés de la voiture. De plus, toutes ses propriétés ont des valeurs. Par exemple, la couleur de la voiture peut être bleue ou rouge (bleu et rouge sont les valeurs de la propriété " couleur "). En programmation c'est un peu pareil : La voiture fait partie d'un grand ensemble qui est " les voitures ". " Les voitures " représentent la " class " en programmation. L'objet est " ma voiture ". Un objet est créé suivant un modèle qu'on appelle une Class.
Dim MaVoiture As New LesVoitures
|
MaVoiture a été instanciée (par le mot clé 'new'). Utilisons quelques propriétés de MaVoiture :
MaVoiture.Couleur = " Bleue "
MaVoiture.Phares = 2
|
 |
Les chaînes de caractères (texte comme 'Bleue') sont entre guillemets. Les nombres ne sont pas entre guillemets.
|
MaVoiture possède aussi des méthodes. Par exemple, elle roule : c'est une méthode.
Une méthode est caractérisée par des parenthèses.
Mais une méthode peut demander des paramètres. Par exemple, à quelle vitesse doit rouler MaVoiture ? Un paramètre est un renseignement envoyé à la méthode.
Dans cet exemple, MaVoiture est un objet, Roule est une méthode et 100 est un entier (Integer).
On peut aussi fournir plusieurs paramètres :
MaVoiture.Roule(100, avant)
|
Enfin, un objet (ici MaVoiture), peut avoir des événements. Dans notre exemple, MaVoiture peut tomber en panne, démarrer ou s'arrêter. 'TomberEnPanne', 'Demarrer' ou 'Arrêter' sont des événements.
MaVoiture.Roule(100, avant)
|
Si on récapitule, un objet est donc dérivé d'une Class. Un objet possède des propriétés, des méthodes et des événements (et d'autres choses…)
II-B. Instructions et procédures
Une instruction permet d'effectuer une opération, une déclaration, une définition.
C'est habituellement une 'ligne de code exécutable'. Une instruction est exécutée lorsque le programme marche. Plusieurs instructions peuvent se suivre sur une même ligne, séparées par ':'
Dim B As String : B="Bonjour"
|
Si une ligne est très longue, on peut passer à la ligne grâce à '_'
Dim B As String = "Bonjour monsieur ": C= _
"le professeur"
Dim B As String = "Bonjour monsieur ": C= "le professeur"
|
Quand un programme tourne, les instructions sont effectuées ligne après ligne.
1 Dim B As String
2 B="Bonjour"
3 Dim A As Integer
4 A= 3
5 A= A + 1
|
La ligne 1 est exécutée puis la ligne 2 puis la 3, la 4...
Bien que l'on puisse avoir des numéros de ligne, ils ne sont plus utilisés actuellement et ils sont invisibles.
Pour mettre des commentaires dans un programme, on le fait précéder d'une apostrophe. À la différence d'une instruction, le commentaire ne sera pas exécuté.
Une procédure est un ensemble d'instructions qui effectue une fonction précise. En Visual Basic.NET, il existe deux sortes de procédures : les 'sub' et les 'function' . Les 'sub' commencent par le mot clé 'sub' puis finissent par 'end sub' et ne retournent aucune valeur contrairement aux fonctions qui débutent par 'function' puis finissent par 'end function' et qui retournent une valeur précise.
Sub DemarrerProgramme()
End Sub
Function CalculerPi()
End Function
|
 |
Pour appeler une fonction ou un sub on utilise le mot clé " Call ". Il n'est pas obligatoire et est devenu inutile en .Net (c'est un reste de VB6).
|
Call DemarrerProgramme
CalculerPi()
|
II-C. Les modules
Les modules sont des feuilles (ou formulaires) qui contiennent plusieurs procédures et/ou fonctions. Un module commence toujours par le mot clé 'Module' et finit par 'End Module'
Module NomDeMonModule
Sub Test1()
End Sub
Function Test_1()
End Function
Function Test_2()
End Function
Sub Test2()
End Sub
End Module
|
 |
Les 'sub' et 'fonctions' ne peuvent pas avoir les mêmes noms sauf si le nombre de paramètres est différent.
|
Récapitulatif : Une instruction est une ligne de code qui va être exécutée par le programme. Une fonction retourne une valeur contrairement à la procédure qui n'en retourne pas. Un module n'est en fait qu'une feuille contenant de nombreuses procédures et fonctions.
III. Le langage Visual Basic
III-A. Les variables
En programmation, une des choses essentielle est l'utilisation des variables. Une variable est une sorte de boîte qui contient une valeur. Par exemple, je mets une chaussure dans une boite. La 'boite' représente la variable et la valeur est la 'chaussure'. L'intérêt principal des variables est leur utilisation ultérieure. En effet, on peut utiliser une variable à n'importe quel moment dans le programme en fonction de la portée de cette variable. (Voir chapitre sur la portée des variables)
III-A-1. Les variables
En ce qui concerne les noms des variables, on peut utiliser des majuscules, minuscules et chiffres. Les espaces et autres caractères spéciaux ne sont pas acceptés (accents, @, ...).
 |
Le nom de la variable ne peut pas commencer par un chiffre !
|
MaVariable
COOL
Je_Suis_1_Variable
2Variable
2_Variable
The Variable
Différent
|
 |
Donnez des noms explicites aux variables pour ne pas vous y perdre dans le programme. De plus, vous pouvez mettre la première lettre de votre variable en majuscule. Si votre variable est composée de plusieurs noms, séparez les par des " _ " ou mettez une majuscule à chaque nouveau mot (préférez la première méthode).
|
Variable_pour_calculer_pi
VariablePourCalculerPi
|
Maintenant pour utiliser une variable, il faut avant tout la déclarer et l'instancier dans certains cas. Pour cela on utilise le mot clé " Dim " pour la déclarer et " new " pour l'instancier. De plus, il vaut lui assigner un type (Voir plus loin dans le chapitre)
Dim Ma_Variable As String
Dim Nombre As Integer
Dim Compteur As Integer
Dim Msn As New Msn_Protocol
Dim Test As New Class
|
On peut aussi instancier les variables précédentes comme cela :
Dim Ma_Variable As String = " toto "
Dim Nombre As Integer = 45
Dim Compteur As Integer = 1000
|
Une variable peut aussi être instanciée par une fonction :
Dim Pi As Decimal = Fonction_pour_calculer_pi()
|
III-A-2. Les différents types de variables
Il existe une multitude de types de variable. A notre niveau, on en utilisera essentiellement 4 : String, Integer, Boolean et Byte
Regroupons tous les types dans un tableau
| Type de variable |
Mémoire occupée |
Plage de nombres acceptés |
Utilisation principale |
| Boolean |
2 octets |
True (0) ou False (1) |
Pour les conditions |
| Byte |
1 octet |
De 0 à 255 |
Pour les fichiers |
| Char |
2 octets |
De 0 à 65 535 |
Pour les caractères alphanumériques |
| Date |
8 octets |
Dates entre le 1 Janvier 0001 et le 31 Décembre 9999 |
Pour les dates |
| Decimal |
16 octets |
+ / - 79 228 162 514 264 337 593 543 950 335 sans séparateur décimal sinon + / - 7.9 228 162… avec 28 chiffres après le séparateur décimal |
Pour les nombres décimaux |
| Double |
8 octets |
- 1,79769313486231E+308 à - 4.94065645841247E-324 (nombres négatifs) et 4.94065645841247E-324 à 1,79769313486231E+308 (nombres positifs) |
Pour les grands nombres à virgule (avec double précision) |
| Integer |
4 octets |
De - 2 147 483 648 à 2 147 483 647 |
Pour les nombres entiers |
| Long |
8 octets |
De - 9 223 372 036 854 775 808 à 9 223 372 036 854 775 807 |
Pour les entiers longs |
| Short |
2 octets |
De - 32 768 à 32 767 |
Pour les entiers courts |
| Single |
4 octets |
De - 3.402823E-45 à - 1.401298E+38 |
Pour les grands nombres à virgule (avec simple précision) |
| String |
Variable |
0 à 2 milliards de caractères Unicode |
Pour les chaîne de caractères |
 |
Utiliser les types qui prennent le moins de mémoire. Par exemple, si vous souhaitez stocker une note dans votre variable, utilisez le type Integer mais n'utilisez pas le type Long dans la mesure où votre variable sera comprise entre 0 et 20 (ou 40 ou 100 en fonction des examens lol)
Une chaîne de caractères n'est en fait que du texte (" Je suis gentille ") et elle se met TOUJOURS entre guillemets contrairement aux nombres !
En VB.NET 2005 (dernière version de Microsoft), il existe 4 autres types de variables mais cela ne concerne pas notre cours.
|
III-A-3. Convertir des variables
Dans tous les langages de programmation, il peut être utile voire même nécessaire de convertir des variables d'un type dans un autre type. Cela permet d'éviter la création de nouvelles variables qui alourdiraient le programme.
Tableau récapitulatif des fonctions permettant de convertir des variables
| Fonction de conversion |
Convertir vers le type... |
| CBool |
Boolean |
| CByte |
Byte |
| CChar |
Char |
| CDate |
Date |
| CDbl |
Double |
| CDec |
Decimal |
| CInt |
Integer |
| CLng |
Long |
| CObj |
Object |
| CShort |
Short |
| CSng |
Single |
| CStr |
String |
Dim Pi As Decimal = 3.14
Dim a As Integer = 15
Dim Pi_Entier As Integer = CInt(Pi)
Dim a_caractère As String = CStr(a)
|
 | Dans le langage VB.NET, la virgule n'existe pas. On utilise le point qui remplace la virgule.
|
 | Noter que ces fonctions sont construites à partir de C (pour Convert) et de l'abréviation du type.
Pour convertir un Object dans un type (String, Integer...), on utilise la commande 'CType' [ CType(a, String) 'a va être convertit en 'String']
|
III-A-4. La portée des variables
Une variable peut être utilisée que si elle est visible dans le programme. Pour définir le niveau de visibilité de chaque variable, il existe un mot clé propre à chaque cas.
Tableau pour la portée des variables
| Mot clé |
Portée de la variable |
| Public |
Partout dans le programme |
| Private |
Partout dans la classe ou le module où elle a été créée |
| Dim |
Seulement dans la procédure ou la fonction créée |
| Protected |
Les membres Protected sont similaires aux Private, mais ils ont une particularité en cas d'héritage. Ce point ne sera pas abordé |
| Friend |
Les membres Friend ne sont accessibles qu'à l'intérieur du projet, et pas par des éléments extérieurs au projet en cours |
| Shared |
Permet de partager une variable. N'est pas indispensable |
 |
Ce tableau est aussi valable pour les procédures et les fonctions
|
Module Test_Portee
Private Sub Test()
End Sub
Protected Sub Azerty(ByVal Argument As String)
End Sub
Private Shared Function Calcul(ByVal Nombre As Integer)
End Function
End Module
|
Cependant, il est déconseillé d'utiliser des variables globales (publics) car cela est une source importante d'erreurs. Pour affecter une valeur à une variable public, il est préférable de passer par une procédure d'affectation.
Module Test
Public Nombre As Integer
Public Sub Routine_Qui_Va_Affecter_La_Variable(ByVal Valeur As Integer)
Nombre = Valeur
End Sub
End Module
Call Routine_Qui_Va_Affecter_La_Variable(45)
MsgBox(Nombre.ToString)
|
Bien sûr qu'il est possible directement de faire directement
Mais cela est source d'erreurs... En effet, vous pouvez modifier la variable à tout moment sans même vous en rendre compte ! A utiliser à vos risques et périls
III-B. Les structures conditionnelles
Les conditionnelles comme les boucles permettent de gérer le déroulement du code. Il existe deux grands types de conditionnelles : celles avec " If - Then " et celles avec " Select Case - End Select "
III-B-1. Avec "If -Then"
Structure générale :
If condition 1 vraie Then
Else
End If
|
If : Mot clé signifiant " si " et qui ouvre la structure
Then : Mot clé signifiant " alors "
Else : Mot clé signifiant " sinon "
End If : Mot clé permettant de fermer la structure
En français : Si la condition 1 est vraie alors on exécute le bloc Then sinon on exécute le bloc Else.
Dim code As Integer = 1739
If code = 1739 Then
MsgBox("condition vraie")
Else
MsgBox("condition fausse")
End If
|
On peut tester une condition fausse et dans ce cas utiliser Not.
If Not A=B Then MsgBox("A est différent de B")
|
Il peut y avoir des opérateurs logiques dans la condition:
Des structures If - Then peuvent être imbriquées. C'est-à-dire que l'on peut emboîter plusieurs conditions dans une seule condition :
If condition_1 vraie Then
If condition_2 vraie Then
MsgBox("Condition_1 Vraie et Condition_2 Vraie")
Else
If condition_3 Vraie Then
MsgBox("Condition_1 Vraie et Condition_2 Fausse et Condition_3 Vraie")
End If
End If
End If
|
 |
Astuce : Pour ne pas vous tromper, utilisez les tabulations et décalez chaque structure (dans l'exemple : Bleue, Violet et Vert) et son code au même niveau. Pour vérifier s'il n'y a pas d'erreur, comptez les 'If', il doit y en avoir autant que des 'End If'. Visual Studio vous avertira en cas d'erreur.
|
Autre syntaxe possible :
If Condition1 vraie Then
..
ElseIf condition2 Then
..
ElseIf condition3 Then
..
End If
|
III-B-2. Avec "Select Case - End Select"
Cette structure est très utile pour tester un grand nombre de possibilités en fonction de la valeur d'une expression :
Structure générale :
Select Case X
Case 1 :
Case 2 :
Case Else :
End Select
|
Select Case : Mot clé permettant d'ouvrir la structure
Case : Représente les différents cas (Case 1 = cas 1, Case 2 = cas 2, Case Else = autre cas...)
End Select : Mot clé permettant de fermer la structure
X : Expression à évaluer (nombre, chaîne de caractères, booléen…)
faire Y : Exécute le cas 1
faire Z : Exécute le cas 2
faire A : Exécute le cas "else"
Prenons un exemple : Un serveur envoie un certain code mais on ne sait pas si c'est le 1, le 2 ou un autre (comme 1000, 453, 876…) et vous voulez vous connecter si le code envoyé correspond au 1, vous déconnecter s'il correspond au 2 et afficher un message d'erreur si c'est un autre code autre que le 1 et le 2.
Voilà la structure :
Select Case code
Case 1 :
Case 2 :
Case Else :
End Select
|
La structure précédente est relativement simple mais limitée. On peut aussi utiliser d'autres types d'expressions plus complexes et plus pratiques :
Plusieurs expressions peuvent être séparées par des virgules.
Le mot-clé To permet de définir les limites d'une plage de valeurs correspondantes pour N.
Le mot-clé Is associé à un opérateur de comparaison (=, <> < <=, > ou >=) permet de spécifier une restriction sur les valeurs correspondantes de l'expression. Si le mot-clé Is n'est pas indiqué, il est automatiquement inséré.
Vous pouvez aussi mixer les différents cas précédents.
Enfin, vous pouvez aussi indiquer des plages et des expressions multiples pour des chaînes de caractères. Dans l'exemple suivant, Case correspond aux chaînes qui sont absolument identiques à " ttt ", aux chaînes comprises entre "bbb" et "eee" dans l'ordre alphabétique, ainsi qu'à la valeur de " Nombre " :
Select Case N
Case 8, 9, 10
End Select
Select Case N
Case 8 To 20
End Select
Select Case N
Case Is >= 15
End Select
Select Case N
Case 3 To 6, 7 To 15, 200, 1654, Is > MaxNumber
End Select
Select Case N
Case "ttt", "bbb" To "eee", Nombre
End Select
|
III-C. Les boucles
Les boucles permettent de répéter un bloc d'instruction autant de fois qu'on l'a indiqué à la boucle. Elles sont très utilisées par exemple pour faire des calculs itératifs (Méthode d'Euler) ou de lister le contenu d'un tableau. Il en existe quatre types majeurs : celles avec " For - Next ", celles avec " Do - Loop ", celles avec " While - End While " et celles avec " For Each - Next "
III-C-1. Avec "For - Next"
Structure générale :
For Variable = Debut To Fin
Next Variable
|
For : Mot-clé permettant d'ouvrir la boucle.
To : Mot-clé signifiant " jusqu'à "
Next : Mot-clé pour fermer la boucle.
Variable : Variable qui va servir de compteur pour la boucle.
Debut : Début du compteur.
Fin : Fin du compteur.
Dim i As Integer
For i = 3 To 10
Next i
|
La variable i va s'incrémenter automatiquement de 1 à la fin de chaque boucle.
On peut aussi définir un pas, le compteur s'incrémente de la valeur du pas à chaque boucle :
Dim i As Integer
For i = 3 To 10 Step 2
MsgBox(i.ToString)
Next i
|
 |
On peut aussi utiliser un pas négatif mais cela est plus compliqué.
|
La variable de la boucle peut être déclarée en même temps que la boucle. De plus, la variable après le Next est facultative.
For Test As Integer = 0 To 43
Next
|
Dernière chose, on peut quitter la boucle prématurément :
For Test As Integer = 0 To 43
If Test = 3 then Exit For
Next
|
III-C-2. Avec "Do - Loop"
Structure générale :
Do
Loop Until Condition
Do
Loop While Condition
|
Do : Mot-clé qui ouvre la boucle.
Loop : Mot-clé qui ferme la boucle.
While : Mot-clé qui signifie " Tant que "
Until : Mot-clé qui signifie " Jusqu'à ce que "
Condition : La condition pour rester dans un Loop While ou pour sortir d'un Loop Until.
 |
Il faut préciser après le " Loop " une condition précéder de " While " ou " Until ". Dans le cas contraire, la boucle est sans fin !
|
Dim i As Integer = 0
Do
i = i + 1
MsgBox(i.ToString)
Loop Until i = 10
Dim Fichier As String
Do
Loop While Fichier <> "NomDeMonFichier "
|
III-C-3. Avec "While - End While"
Structure générale :
While Condition
End While
|
While : Mot-clé permettant d'ouvrir la boucle.
End While : Mot-clé qui ferme la boucle.
Condition : La condition pour rester dans la boucle.
Dim Compteur As Integer = 0
While Compteur < 20
Compteur
|