|
Site |
Cours VB.net |
|
|
|
Les instructions,les procédures |
|
|
Qu'est ce qu'une instruction , une procédure?
Quelle différence entre les procédures:
liées aux évènement?
les procédures non liées?
Les 'Sub', les 'Functions'.
Les instructions:
Une instruction est le texte permettant d'effectuer une opération, une déclaration, une définition.
Dim A As Integer est une instruction (de déclaration)
A=1 est aussi une instruction qui effectue une opération.
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 à ' _'
(caractère 'Espace' puis caractère"_" puis immédiatement après, passage à la ligne) :
Dim B As String = "Bonjour monsieur ": C= _
"le professeur"
est équivalent à:
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 non visibles:
Dim B As String
B="Bonjour"
Dim A As Integer
A= 3
A= A + 1
Pour mettre des commentaires dans un programme, on le fait précéder de "'" .
'Ceci est un commentaire, ce n'est pas une instruction.
Le commentaire ne sera pas exécuté.
Les procédures:
Une procédure est un ensemble d'instructions, de lignes de code, un groupement d'instructions bien définies effectuant une tache précise.
Les procédures sont bien délimitées:
Il y en a de 2 sortes:
Les procédures Sub:
Elles débutent par le mot Sub et se terminent par End Sub.
Les procédures Function:
Elles débutent par Function et se terminent par End Function.
Exemple:
Sub Maprocédure
A=1
End Sub
Exemple concret d'une procédure: la procédure Button_Click du premier programme.(Celui qui affiche 'Bonjour'; elle ne contient qu'une ligne de code. Le mot Sub est précédé de Private, on verra plus loin ce que cela signifie.

Vous avez vu que l’on peut dessiner l'interface, une fenêtre Form1 par exemple. En mode conception, après avoir dessiné 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.

Quand on voit ces procédures, on peut y inclure du code.
Nous allons voir qu'il y a 2 types de procédures: les procédures liées aux évènements et celles qui ne sont pas liées.
Procédures liées aux événements.
Si on double clique sur le fond d’une fenêtre,(Celle du 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 System.Windows.Forms.Form
Dim a As String
#Region " Code généré par le Concepteur Windows Form " '<===En VB 2003 uniquement
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Text = ""
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = "Bonjour"
End Sub
End Class
Détaillons:
On voit 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 Windows.Forms.Form..
Ces lignes sont générées automatiquement par VB.
En VB 2003,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. (le chapitre 8-2 explique en détails le code généré par VB, mais c'est un peu complexe pour les débutants pour le moment!!)
En VB 2005 cette partie générée par VB n'est pas visible directement.
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éroulez maintenant la liste à droite vous aurez tous les événements qui génèrent une procédure :
Load Lors du chargement de la fenêtre
Unload Lors du déchargement de la fenêtre
Activated Lorsque la fenêtre devient active
GotFocus Lorsque la fenêtre prend le focus
Resize Lorsque la fenêtre est redimensionnée
…
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 écrit 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 :
Click Lorsque l'utilisateur clique sur le bouton.
DoubleClick Lorsque l'utilisateur double-clique sur le bouton.
MouseDown ‘se déclenche si appui du bouton de la souris
MouseUp ‘se déclenche si relâchement du bouton de la souris
…
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.
Procédures non liées:
Parfois on a besoin de code qui fait une tâche 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.
Exemple : plusieurs fois dans le programme j’ai besoin de calculer la surface d’un cercle à partir de son rayon et de l’afficher sur un label.
Plutôt que de retaper dans chaque procédure le code, je peux créer une procédure 'Sub' nommée AfficheSurfaceCercle.
Il suffit ensuite si nécessaire d’appeler la procédure qui effectue le calcul et affiche le résultat puis revient effectuer le code situé après l’appel.
Comment appeler une procédure?
Par Call NomdeProcedure() ou par
NomdeProcedure()
'Call' est facultatif.
Noter les parenthèses après le nom de la procédure.
Procédures Sub :
Comment créer cette procédure Sub?
Dans la fenêtre de code, tapez :
Sub AfficheSurfaceCercle puis validez. Vous obtenez :
Sub AfficheSurfaceCercle()
End sub
Le code de la procédure est compris entre le Sub et le End Sub.
Pour que le calcul se fasse, il faut fournir, (transmettre de la procédure qui appelle à la procédure Sub) la valeur du rayon.
Pour indiquer que la Sub doit recevoir un paramètre (un argument en VB) ajouter entre les parenthèses :
Sub AfficheSurfaceCercle( Rayon as Single)
Cela signifie qu’il existe une procédure qui reçoit comme paramètre une variable de type Single (Réel simple précision) contenant le Rayon.
Ajouter le code :
Label.text =(3.14*Rayon*Rayon).ToString
Que fait cette ligne ?
Elle fait le calcul: '3.14*Rayon*Rayon' ('*' signifie multiplier), on transforme le résultat en chaîne de caractères (grâce à '.ToString') que l’on met dans la propriété .text du label : Cela affiche le résultat. (On verra toute cette syntaxe en détail ultérieurement)
On obtient:
Sub AfficheSurfaceCercle( Rayon as Single)
Label.text =(3.14*Rayon*Rayon).ToString
End sub
Comment appeler cette Sub?
N’importe quelle procédure pourra appeler la Sub AfficheSurfaceCercle en envoyant la valeur du rayon afin d'afficher la surface du cercle dans un label.
Exemple d’appel pour un rayon de 12 :
AfficheSurfaceCercle(12)
Affiche dans le label: 452.16
On peut sortir prématurément de la Sub avec Exit Sub (ou aussi par Return )
Sub AfficheSurface( Rayon as Single)
Label.text =(3.14*Rayon*Rayon).ToString
Exit Sub
...
End sub
Procédures 'Function' :
Parfois on a besoin que la procédure retourne un résultat, qu'elle donne en retour un résultat à la procédure appelante. . Dans ce cas on utilise une Fonction.
Exemple: je veux créer une fonction à qui je fournis un rayon et avoir en retour la surface d'un cercle.
Comment créer cette Function?
Tapez Function SurfaceCercle puis validez, ajouter (Rayon As Single)
Tapez Return 3.14*Rayon*Rayon
Ce que la fonction doit retourner est après Return (ce que la procédure doit renvoyer à la procédure appelante.)
On obtient la fonction complète:
Function SurfaceCercle( Rayon as Single)
Return 3.14*Rayon*Rayon
End Function
Comment appeler cette Function?
Dans la procédure qui appelle, il faut une variable pour récupérer la valeur retourner par la Fonction:
S= NomdelaFonction()
N’importe quelle procédure pourra appeler la fonction et obtenir le résultat dans la variable S par exemple pour un rayon de 12 :
Dim S As Single
S=SurfaceCercle(12)
On appelle la fonction SurfaceCercle en envoyant le paramètre '12', ce qui fait que à l'entrée de la fonction, Rayon=12, le calcul est effectué et le résultat du calcul (452.16) est retourné grâce à Return. S récupère ce résultat.
Après l'appel de cette fonction, S est égal à 452.16
Il est possible de spécifier le type retourné par la fonction:
Function SurfaceCercle( Rayon as Single) As Single
As Single en fin de ligne après () indique que la fonction retourne un Single. Il faut donc que la variable qui reçoit la valeur retournée (S dans notre exemple) soit aussi un Single.
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 '='.
Utilisez plutôt la méthode Return.
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).
Module standard :
La sub AfficheSurfaceCercle affiche le résultat dans le formulaire où elle est située.
Par contre la fonction SurfaceCercle est 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ée 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.
Y mettre les procédures.
Private Public :
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 la procédure est publique
Remarques :
1- Pour sortir d’une procédure Sub avant la fin, utiliser Exit Sub (Exit Function pour une fonction).
2-Quand vous appelez une procédure, il faut toujours mettre des parenthèses même s'il n'y a pas de paramètres.
FrmSplash.ShowDialog ()
Eventuellement on peut faire précéder l'appel du mot clé Call, mais ce n'est pas obligatoire.
Call FrmSplash.ShowDialog ()
3- Quand vous créez une procédure utilisez "la casse Pascal" pour créer les noms de routine:
la première lettre de chaque mot est une majuscule (C'est donc une convention).
Sub
CalculTotal()
Lexique anglais=>Français:
Call = Appel.
Return= Retour.
Private= Privé.
Show= spectacle, exposition.
To show= montrer.
|
|
|
|
|