|
Site |
Cours VB.net |
|
|
|
Les Structures de contrôle |
|
|
Elles permettent de gérer le déroulement du code.
On étudiera:
If Then
Select Case
For Next
Do Loop
While End While
For Each
Switch
IIF
Choose
If then
Permet de créer une structure décisionnelle :
If Condition Then
End if
Si la Condition est vraie alors……
Une instruction (ou un bloc d’instructions) peut être exécutée si une condition est vraie.
Exemple:
If A=B then
MsgBox("A=B")
End If
Si A = B alors on exécute le bloc de code entre Then et End If, il affiche dans une fenêtre MessageBox « A=B »
Noter que, si on le désire, on peut écrire sur la même ligne après Then (Pas besoin de End If).
If A=B Then MsgBox("A=B")
C'est équivalent
On peut tester une condition fausse et dans ce cas utiliser Not.
If Not A=B Then MsgBox("A différent de B")
Si A et B sont différent (Not A=B signifie NON égaux) afficher "A différent de B".
(On aurait pu écrire If A<>B Then...)
Il peut y avoir des opérateurs logiques dans la condition:
If A=B And C=D then.. 'Si A égal B et si C égal D
Autre exemple :
Dim n As String ="33" on crée une String , on y met les caractères "33"
If Not IsNumeric(n) then
MsgBox ("n n’est pas un nombre")
Exit Sub
End if
Si n n’est pas numérique alors afficher dans une boite de dialogue: « n n’est pas un nombre » puis quitter la procédure (Exit Sub)
Noter bien que comme il y a plusieurs instructions après Then on crée un bloc d’instruction de plusieurs lignes entre Then et End If.
Simplification d'écriture:
Au lieu de
If Condition = True Then
End if
On peut écrire:
If Condition Then
End if
Condition étant de toute manière évaluée pour voir si elle est égale à True.
On peut aussi utiliser la structure :
Si..Alors..Sinon
If condition then
.. ‘effectué si condition vraie
..
Else
..’effectué si condition fausse
..
End if
Exemple:
If A=B then
MsgBox("A=B")
Else
MsgBox("A différend de B")
End If
Des structures If Then peuvent être imbriquées :
If..
If..
..
Else
If..
..
End if
End if
End If
Pour bien repérer les différents niveaux, utiliser les tabulations et décaler le ‘If then’ et son code au même niveau.
Pour vérifier s’il n’y a pas d’erreur, compter les ‘If’, il doit y en avoir autant que des ‘End If’. VB souligne le ‘If’ si il n’y a pas de ‘End if’.
Dernière syntaxe:
If Condition1 Then
..
ElseIf
condition2 Then..
ElseIf condition3 Then
..
end if
Si condition1...
Sinon si condition2
Sinon si condition3
Fin Si
Select Case
Créer une structure décisionnelle permettant d’exécuter un grand nombre de blocs de code différents en fonction de la valeur d’une expression :
Select Case expression
Case valeur1
‘code effectué si expression=valeur1
……
Case valeur2
‘code effectué si expression=valeur2
……
Case valeur3
‘code effectué si expression=valeur3
……
..
Case Else
‘code effectué dans tous les autres cas
End Select
Attention si expression=valeur1 le code entre Case Valeur1 et Case valeur2 (et uniquement celui là) est effectué, puis l’exécution saute après End Select.
Exemple d’un code affichant le jour de la semaine :
J est un entier contenant le numéro d’ordre du jour
N=J Mod 7 ‘ contient le reste de la division entière de J par 7
Select Case N
Case 1 'Si N=1
MsgBox "Lundi" 'Afficher 'Lundi'
Case 2
MsgBox "Mardi"
Case 3
MsgBox "Mercredi"
..
..
Case Else
MsgBox "Nombre pas entre 1 et 7"
End select
Nous venons d’utiliser une expression simple après chaque Case mais on peut utiliser des expressions plus complexes :
Plusieurs clauses d'expression peuvent être séparées par des virgules.
Select Case N
Case 8,9,10
‘Effectuer le code si N=8 ou N=9 ou N=10
Le mot clé To permet de définir les limites d'une plage de valeurs correspondantes pour N.
Select Case N
Case 8 To 20
‘Effectuer le code si N est dans la plage 8 à 20
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é.
Select Case N
Case Is >= 5
‘Effectuer le code si N supérieur ou égal à 5.
Vous pouvez utiliser plusieurs expressions ou plages dans chaque clause Case (séparées par des virgules). Par exemple, la ligne suivante est valide :
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
Vous pouvez aussi indiquer des plages et des expressions multiples pour des chaînes de caractères. Dans l'exemple suivant, Case correspond aux chaînes qui sont absolument identiques à « aaa », aux chaînes comprises entre «ccc» et «ddd» dans l'ordre alphabétique, ainsi qu'à la valeur de Var :
Case "aaa", "ccc" To "ddd", Var
Pour les 'Pro':
Les "Case" peuvent contenir n'importe quelle expression. Aussi il est possible de tester dans les conditions, non pas les valeurs d'une même variable, mais divers fonctions totalement indépendantes ou comme ici des fonctions travaillant toutes sur une même variable. C'est un usage méconnu du Select Case qui clarifie l'écriture et qui évite de multiples If Then ou Goto.
Ici une routine reçoit une String contenant un nom de fichier, elle teste si le nom n'est pas vide puis si le fichier existe..
Sub TestFichier (File As String)
Select Case true
Case len(File) = 0
msgbox "Pas de nom de fichier"
Case Not Exit(File)
errorState=File.NotExist
Case Not Open(File)
errorState=File.NotOpen
Case Not Overwrite(File)
errorState=File.NotOverwrite
Case else
'placer les exceptions ici
End Select
End Sub
For Next
Permet de faire des boucles.
Les boucles sont très utilisées pour parcourir une plage de valeur qui permet par exemple de parcourir tous les éléments d’un tableau ou pour effectuer de manière itérative un calcul.
Le nombre de boucle va être déterminé par une variable qui sert de compteur.
Le nombre d’exécution est déterminé au départ de la boucle car le compteur a une valeur de départ, une valeur d’arrêt.
Pour variable allant de 'début' à 'fin'
Boucler
donne en VB
For variable=début To fin
..
Next variable
Dim i as Integer
For i=1 to 10
MsgBox i.toString
Next i
En langage courant : Pour i allant de 1 à 10, afficher la valeur de i dans une MessageBox.
La variable compteur va prendre successivement les valeurs 1 puis 2 puis 3…… jusqu'à 10 et effectuer à chaque fois le code qui est entre For et Next.
Si on décompose :
i=1 Affiche « 1 », arrivé à Next, remonte à For, i =2 , affiche « 2 »……
…… i=10 , affiche « 10 » poursuit après Next.
En effet i augmente d'une unité à chaque 'tour'.
Il peut y avoir un pas (Step), le compteur s'incrémente de la valeur du pas à chaque boucle.
Dim i as Integer
For i=1 to 10 Step 2
MsgBox i.toString
Next i
Affiche 1 puis 3 puis 5 puis 7 puis 9
Attention si la valeur de sortie de boucle est inférieure à celle d’entrée il faut indiquer un pas négatif
Dim i as integer
For i=10 to 1 Step -2
MsgBox i.toString
Next i
Affiche 10 puis 8 puis 6 puis 4 puis 2
Bien sur on peut utiliser des expressions calculées :
For i=A to B*10 Step X-2
MsgBox i.toString
Next i
La variable boucle peut être déclarée après For, dans ce cas cette variable n'existe que dans la boucle:
For K As Integer = 1 To 10
...
Next K
On peut quitter prématurément la boucle avec Exit For
For K As Integer = 1 To 10
...
If A=2 Then Exit For
Next K
Dans ce cas la boucle s'arrête de tourner, on poursuit après Next.
Remarque:
Le nom de la variable de boucle est facultatif après Next:
For K As Integer = 1 To 10
...
Next
Est correct.
Dans la version 2005 il
existe aussi Continue For qui permet de sauter au
prochain Next et de poursuivre la boucle.
Do Loop
Permet aussi de faire des boucles mais sans que le nombre de boucle (d’itération) soit déterminé au départ.
Do
..
Loop
La boucle précédente tournera sans fin. Aussi il faut ajouter une condition d'arrêt contenant:
Until (jusqu’à ce que).
ou
While (tant que).
C’est la condition d’arrêt qui détermine la sortie de la boucle.
La condition d'arrêt peut être en début, après Do ou en fin après Loop.
En début après Do:
Exemple avec Until:
Do Until condition
Code
Loop
'Boucler jusqu'à ce que : condition est une condition de sortie.
Si condition est fausse, effectuer le code, boucler et recommencer le code jusqu’à ce que condition soit égale à True.
A chaque boucle la condition est évaluée.
Attention, avant de débuter la boucle, la condition doit être fausse sinon la boucle ne sera jamais exécutée..
ou en fin après Loop.
Exemple avec While.
Do
Code
Loop While condition
'Boucler tant que que : condition est une condition de sortie.
La condition étant en fin, le contenue de la boucle sera exécuté au moins une fois.
En résumé: Loop veut dire boucle. Après Loop ou Do (faire) on doit mettre Until (jusqu’à ce que) ou While (tant que).
Exemple:
Créer une boucle affichant successivement dans une MessageBox les chiffres de 1 à 10.
Dim i As Integer = 0
Do
i = i + 1 'incrémente i de 1
MsgBox(i.ToString) 'affiche la valeur de i dans une messageBox
Loop Until i = 10 'sort de la boucle quand i=10
Exemple pour chercher un mot dans une liste :
Lire Premier Mot
Do Until MotCherché=MotPointé
Pointer Mot suivant
Loop
On peut aussi utiliser While (Tant que)
Lire Premier mot
Do While MotCherché<>MotPointé
Pointer Mot suivant
Loop
Tant que le mot cherché est différent du mot pointé, boucler.
La condition peut être mise en fin de boucle, cela permet d’effectuer au moins une fois le code. Cela évite aussi d’avoir à démarrer le processus avant la boucle : dans notre exemple cela permet d’éviter de lire le premier mot :
Les mots sont dans un tableau Mot(); premier élément Mot(0)
IndexMot=-1
Do
IndexMot=IndexMot+1
Loop While MotCherché<>Mot(IndexMot)
Il faudrait en plus boucler jusqu'à la fin du tableau et pas plus.
Exemple complet : Imposer la saisie d’un nombre négatif à l’utilisateur :
On utilise InPutBox qui ouvre une fenêtre, et attend une réponse, InputBox retourne une String contenant le texte tapé.
Dim Reponse as String
Dim nombre As Single
Do
Reponse=InPutBox(« Entrer un nombre négatif. »)
nombre= Csng( Reponse)
Loop While nombre >=0
Si le nombre n'est pas négatif, la boucle fonctionne et la boite InPutBox s’ouvre de nouveau.
Comment créer une boucle qui tourne sans fin?
Do
...
Loop While True
While, End While
Permet une boucle qui tourne tant qu'une condition est vraie.
While =Tant que.
While Condition
...
End While
Exemple: on incrémente un compteur, on sort quand il est égal à 20.
Dim Counter As Integer = 0
While Counter < 10
' Test la valeur du compteur.
Counter += 1 ' Incrémente le compteur.
MsgBox(Counter.ToString)
End While
Affichera les nombre de 1 à 10.
For Each
C’est une variante de la boucle For mais elle permet de parcourir les objets d’une collection.
Prenons un contrôle ListBox il a une collection Items qui contient tous les éléments de la ListBox
ListBox.item(0) contient la première ligne
ListBox.item(1) contient la seconde ligne
ListBox.item(2)…contient la troisième.
Parcourir tous les éléments de la ListBox et les mettre dans une variable V s’écrirait :
Dim V as string
Dim item as objet
For Each item in ListBox.items
V=V+item
Next
La variable de boucle peut être déclarée après For:
Dim V as string
For Each item As Objet in ListBox.items
V=V+item
Next
Au lieu de déclarer Item comme un objet, on aurait pu le déclarer comme un ListBox.Item
Cette notion de collection est beaucoup plus large que je le pensais:
Dim
chaine As String = "aeiou" Dim c As String For Each car As String In chainec = car....
NextIci pour tester chaque caractère dans une String, on peut utiliser For Each.
Switch.
Switch est utilisé avec des couples d'arguments, si le premier est vrai, le second est retourné.
Réponse=Switch( Expression1, Reponse1, Expression2, Reponse2)
Si Expression2 est vrai Reponse2 est retourné.
Monnaie=
Microsoft.VisualBasic.Switch(Pays = "USA", "Dollar", _
Pays = "FRANCE", "Euro", Pays = "Angleterre", "Livre")
Si Pays="FRANCE", cette expression est vrai, le second objet du couple est retourné.
Retourne Euro
IIf
IIf est utilisé avec 3 arguments.
Si le premier argument est vrai , le second est retourné.
Si le premier argument est faux c'est le troisième qui est retourné.
Reponse = IIf( Nombre >
0, "Positif", "Négatif ou 0")
Comme dans Switch on peut utiliser des procédures comme argument.
Choose
La fonction Choose retourne un membre de la liste passée dans Chooce(), selon la valeur de Index.
ElementRetourné =Choose (Index, Par1, Par2, Par3, Par4)
Dim nom As String =Choose(2, "Speedy", "United", "Federal")
Retourne "United".
|
|
|
|
|