INTRO VBNET Henri
INTRO VBNET Henri
NET 1
Sub MaProcedure()
‘Déclarations locales
Dim I as integer
Dim v(5) as string
…
… instructions diverses
‘appel d’autre procedure/fonction
S = Surface(x)
…
… instructions diverses
...
End Sub
H. TSOUNGUI Introduction à VB.NET 2
-Structure d’une fonction et valeur de retour Private Function multiplication(ByVal x As Integer, ByVal y As Integer) As
Integer
C’est en quelque sorte une procédure qui retourne une valeur. Voici un Dim p As Integer
exemple : p=x*y
Private Function SuperficieCercle( Rayon as Single) As Single Return p ' Retour du résultat dans la variable "locale" p
Return 3.14*Rayon*Rayon End Function
End Function
Utilisation dans un autre sous-programme (routine) Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button3.Click
Dim ret as single ‘ valeur de retour Me.Close()
Dim rayon as single End Sub
Rayon = inputbox(« Donnez le rayon »)
Ret = SuperficieCercle( Rayon) Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
Msgbox(« Superficie : « & str(ret)) System.EventArgs) Handles Button2.Click
Dim var1 As Integer : Dim var2 As Integer : Dim k As Integer
Exemples de procédures et fonctions var1 = Val(txtvar1.Text) : var2 = Val(txtvar2.Text)
Type Plage des valeurs Taille conserve donc sa valeur qu'à l'intérieur de cette procédure, et pour une
seule exécution de cette procédure.
Short -32 768 à 32 767 2 octets
Integer - 2 147 483 648 à 2 147 483 647 4 octets Sub Maprocedure()
-9 223 372 036 854 775 808 à Dim toto as Integer ‘cette variable est strictement locale
Long
-9 223 372 036 854 775 807 à
8 octets … instructions …
… instructions …
-3,4028235E+38 à -1,401298E-45 pour les valeurs négatives End Sub
Single 4 octets
1,401298E-45 à 3,4028235E+38 pour les valeurs positives
-1,79769313486231570E+308 à -4,94065645841246544E- Niveau Form : la variable est créée dès que la Form est utilisée. Elle reste
324 accessible par toutes les procédures contenues dans cette Form et
pour les valeurs négatives conserve sa valeur tant que la Form est active en mémoire vive. Dans ce
Double 8 octets
-4,94065645841246544E-324 à - cas, il faut déclarer la variable n'importe où en-dehors d'une procédure de
1,79769313486231570E+308 la Form .
pour les valeurs positives
+/- 79 228 162 514 264 337 593 543 950 335 sans chiffre Dim toto as Integer
décimal Sub MaProcedure()
Decimal 12 octets ...
+/- 7,922 816 251 426 433 759 354 395 033 5
avec 28 positions à droite de la virgule End Sub
5. Les Premiers Contrôles (Boîte à outils de contrôles) Visible : propriété booléenne qui gère, comme son nom l’indique, le caractère
visible ou non de la Form (et partant, des autres contrôles qu’elle contient)
Le contrôle Form(formulaire) Procédure événementielles : à chaque objet créé peuvent correspondre autant de
procédures que d’événements possibles survenant sur cet objet.
C’est le contrôle de base, absolument universel, en Visual Basic est la feuille, ou
formulaire, en anglais, Form. Cet objet est incontournable ; on ne peut créer et
utiliser d’autres objets que si ceux-ci font partie d’une Form. A l’ouverture de Ex : évènement sur un objet comme par ex. un click sur un bouton de commande
Visual Basic, on vous propose d’ailleurs par défaut un objet Form. Private Sub NomObjet_Evenement()
…
End Sub
Private signifie que la procédure n’est utilisable (visible) que pour la Form
considérée (et pas pour d’autres objets situés sur d’autres Form).
Text : utile pour professionnaliser une application, lui donner un look fini.
Dans le code, on ne désigne donc jamais un objet par sa propriété Text, mais par Ex : Private Sub btnFERMER_Click()
son Name. Me.close
End Sub
H. TSOUNGUI Introduction à VB.NET 6
Le contrôle CommandButton (Bouton de Commande) Dim Rep As String : Dim laquestion, Titre_fenetre As String
laquestion = "Quel âge avez-vous ?"
Il s’agit du bouton type OK, Annuler, mais dont le texte apparent (en Anglais, Titre_fenetre = "Une petite question"
propriété Text) et le rôle dans une application peuvent varier à l’infini. L’action Rep = InputBox(laquestion, Titre_fenetre)
que VB considère comme étant la plus commune pour les boutons de commande
est le Click (en Français, clic). Ce code attendra que le bouton OK (ou Annuler) soit cliqué, et stockera alors le
Quelques propriétés intéressantes de la classe CommandButton : contenu de la zone de saisie dans la variable Rep.
Name : bien sûr !
Text : « FERMER » qui permet évidemment de fermer l’objet Form … La fonction MsgBox
Visible : rend l’objet visible. La fonction jumelle d'Inputbox, vouée à un usage un peu différent, est la fonction
Enabled : cette propriété, booléenne, est comme on le verra est très commune à MsgBox. Elle déclenche l'apparition d'une boîte SANS zone de saisie, mais dotée
d’autres objets et permet de les rendre accessibles (activés). Elle permet (valeur d'un jeu de boutons, et éventuellement d'une illustration standard sous forme
True) à un contrôle d’être actif. d’icône Point d’interrogation, exclammation, etc.
C’est une fonction, dont les deux arguments de type String correspondent
respectivement à l'invite ("Quel âge avez-vous ?") et au titre ("Une petite
question") de la boîte de saisie. Cette fonction renverra toujours une valeur de type
String. Code à écrire :
H. TSOUNGUI Introduction à VB.NET 7
Ces zones (de la classe "TextBox" pour VB) peuvent servir à saisir une
information. Il s’agit du seul contrôle permettant une saisie au clavier par
l’utilisateur. En Visual Basic, il n’y a donc plus à proprement parler d’instruction
Lire. A la place de cette instruction, on est contraint de passer par de telles zones.
La seule chose vraiment importante à savoir est que toute information contenue
dans une zone de texte est obligatoirement de type… texte ! (autrement dit, cela
inclut le cas où il s’agit d’un nombre, L’emploi de fonctions de conversion
s’avèrera fréquemment indispensable
Là, on retrouve comme arguments l'invite ("Missile thermonucléaire...") et le titre
VAL(chaîne) pour convertir une chaîne en nombre
("Dernière vérification"). Mais entre ces deux paramètres, on doit fournir un
STR(numérique) pour convertir un nombre en chaîne.
argument d'un genre un peu spécial, le rôle de cet argument est double : il doit
On peut également utiliser les nombreuses fonctions de conversion prédéfinies
indiquer d'une part quel est le jeu de boutons souhaité, parmi les six disponibles
CSng, CStr, CDec, CInt, etc.
("Abandonner, Réessayer, Ignorer", "OK", "OK, Annuler", "Réessayer,
Annuler", "Oui, Non", "Oui, Non, Annuler"). Il doit également stipuler quelle
illustration (icône) viendra éventuellement égayer votre boîte à messages, parmi
les quatre possibles (Critical, Exclamation, Information, Question). Mais nous
les laisserons de côté provisoirement. Ce qui compte, c'est de comprendre
comment ça marche.
Le Label (Etiquette)
Un Label est un contrôle "inerte", qui sert à afficher un texte sur une Form.
Propriétés intéressantes des zones de texte
Ce qu’il faut comprendre avec les Labels, c’est qu’ils ne peuvent jamais servir à Multiline : autorise ou non l’écriture sur plusieurs lignes
effectuer une saisie par l’utilisateur. Scrollbars : fait figurer dans la TextBox une barre de défilement horizontale ou
verticale (ou les deux)
H. TSOUNGUI Introduction à VB.NET 8
PasswordChar : crypte le texte entré par le caractère stipulé (généralement, on Dim Ligne As ListViewItem = New ListViewItem(New
choisit le caractère *) String() {txtNomEtud2.Text, txtPrenomEtud2.Text})
MaxLength : limite le nombre de caractères qu’il est possible de saisir dans la
zone de texte. 'Affichage des NOMS des colonnes (entêtes: columnHeads)
ListView1.GridLines = True ' On affiche la grille du
lstView
Exercice ' ListView1.View = View.Details
-Ecrire un programme VB permettant de saisir n valeurs numériques d’un lstBoxEtud.Items.Add(infos)'Affichage dans la “listBox”
tableau et de les afficher dans une liste(listbox).
-Rechercher la plus petite valeur du tableau ainsi que la plus grande. ListView1.Items.Add(Ligne)'Affichage dans la “listView”
-Calculer la somme des éléments du tableau. Me.Refresh()
-Ecrire une fonction retournant le nombre de fois qu’apparaît une valeur
End Sub
donnée dans le tableau.
ListBox , ListView, boutons radio (radio buttons) et cases à cocher
(checkboxes), Calendrier (MonthCalendar), Saisie date (DateTimePicker)
Autres contrôles
ListView permet d’afficher des données dans une liste avec grille et une meilleure
organisation des titres
Private Sub Button2_Click(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Button2.Click
Dim infos As String
Dim sexe As String
txtNomEtud2.Text = txtNomEtud.Text
txtPrenomEtud2.Text = txtPreomEtud.Text
'Boutons radio
If radsexeF.Checked = True Then
sexe = "F"
Else
sexe = "M"
End If
'Ce que l’on veut afficher dans la listView
infos = txtNomEtud2.Text & " - " & txtPrenomEtud2.Text
& " - " & sexe
'On le met dans la variable « ligne »
H. TSOUNGUI Introduction à VB.NET 9
stud.id = Me.txtIdetud.Text
stud.nom = Me.txtNometud.Text
stud.pren = Me.txtPrenetud.Text
stud.nais = Me.dtpNaissance.Text
End Module
'Ecriture de l'enregistrement
Champ1 Champ2 Champ3 Champ4 nenreg = nenreg + 1 ' Position d’écriture du record on
Enregistrement 1 Enregistrement 2 écrit toujours à une position donnée
Exemple de structure « client » déclaré dans un module.
FilePut(1, vcli, nenreg) ' Ecriture de
Public Structure client l’enregistrement (record)
<VBFixedString(4)> Public cliNum As String
<VBFixedString(15)> Public cliNom As String fermer_clients2()
<VBFixedString(15)> Public cliPrenom As String End Sub
<VBFixedString(25)> Public cliAdresse As String
<VBFixedString(5)> Public cliCpostal As String
<VBFixedString(20)> Public cliVille As String LECTURE d’enregistrement (lecture du fichier)
<VBFixedString(10)> Public cliTelfixe As String Private Sub ListeToolStripMenuItem_Click(ByVal sender As
<VBFixedString(10)> Public cliTelmob As String System.Object, ByVal e As System.EventArgs) Handles
End Structure ListeToolStripMenuItem.Click
CREATION d’enregistrement (écriture dans le fichier) Dim vcli As New client : Dim i As Integer : Dim
Private Sub btnSauver_Click(ByVal sender As System.Object, ligne As String
ByVal e As System.EventArgs) Handles btnSauver.Click
'Création de client ' Ouvrir le fichier en lecture/écriture
ouvrir_clients2()
Dim vcli As New client FileOpen(1, "C:\CLIENTS2.DAT", OpenMode.Random,
Dim nenreg As Integer OpenAccess.ReadWrite, OpenShare.LockWrite, Len(vcli))
nenreg = FileLen("C:\clients2.dat") \ Len(vcli) i = 1
'Nombre d’enregistrements déjà présents dans le fichier While (Not EOF(1)) 'Lecture d’un enregistrement du fichier
'Récup contenus des champs (textBoxes) pour le stockage dans FileGet(1, vcli, i) ' Lecture enregistrement (record)
la variable
' Remplissage de la structure
H. TSOUNGUI Introduction à VB.NET 11
'fermer_clients2()
FileClose(1)
End Sub
ACCES A DES BASES DE DONNEES par VB.NET con.Close() ' Fermeture pour le cas où elle
serait restée ouverte
1) Base MS ACCESS con.Open() ' Ouverture connection à la BDD
Accès à une BDD MS Access par OLEdb voir_results() 'Exécuter une requete et voir
Chaîne de connection ACCESS 2007 : les enregistrements résultats
”Provider=Microsoft.ACE.OLEDB.12.0; Data
Source=C:\Users\hector\Desktop\CLASSES\DEUST1\BDD- con.Close() ' Fermeture connection à la BDD
ACCESS\marketing.accdb”
- ---------------------------------- Catch ex As Exception
MessageBox.Show(ex.ToString)
I-Cas 1 End Try
Imports System.Data.OleDb ' Bilio importées pour OLE
End Sub
' ------------------ Début de la classe -------------------- ' ---------------------------------------------------------
Private Sub Fermer_Click(ByVal sender As System.Object, ' Exemples de requêtes à tester - Les en-tête de
ByVal e As System.EventArgs) Handles Button1.Click colonnes sont à modifier
Me.Close()
End Sub Dim da As New OleDbDataAdapter("select * from maitre
where mVille <>'LILLE' ;", con)
' --------------------------------------------------------- 'Dim requete As String = "select * from maitre where
mVille ='LILLE' ;"
Private Sub Executer_Click(ByVal sender As 'Dim requete As String = InputBox("Tapez votre
System.Object, ByVal e As System.EventArgs) Handles requête ")
Autre.Click 'Dim da As New OleDbDataAdapter(requete, con)
'Dim da As New OleDbDataAdapter("select * from
Try maitre;", con)
' Définition de la chaîne de connection
con.ConnectionString = da.Fill(dt) ' Remplissage du Data_adaptateur (da)
"provider=microsoft.jet.oledb.4.0 ; data
source=C:\VBdev\spa.mdb"
H. TSOUNGUI Introduction à VB.NET 13
'Fin Connexion
Dim connection As New MySqlConnection(connStr)
Try
' Définition de la chaîne de connection Dim connexion As MySqlConnection = New
con.ConnectionString = MySqlConnection()
"provider=microsoft.jet.oledb.4.0 ; data Dim adaptateur As MySqlDataAdapter = New
source=C:\VBdev\spa.mdb" MySqlDataAdapter()
con.Close() ' Fermeture pour le cas où elle Dim com As MySqlCommand = New MySqlCommand
serait restée ouverte Dim requete As String
con.Open() ' Ouverture connection à la BDD 'Dim tablereacteur As New DataTable
voir_results() 'Exécuter une requete et voir 'Dim maliste As New List(Of String)
les enregistrements résultats Dim myDataTable As New DataTable
reader.Close()
Gestion des candidats
connection.Close()
End Sub
End Class
H. TSOUNGUI Introduction à VB.NET 18
Module modCandidats
Public Structure candidat 'Déclaration de type 'test activites
<VBFixedString(4)> Public candNum As String Dim activ As String = ""
<VBFixedString(15)> Public candNom As String If chkBoxSport.Checked = True Then
<VBFixedString(15)> Public candPrenom As String activ = activ & "-" & "Sport"
<VBFixedString(1)> Public candSexe As String End If
<VBFixedString(10)> Public candDnaiss As String
<VBFixedString(10)> Public candDenreg As String If chkBoxCinema.Checked = True Then
<VBFixedString(50)> Public candLoisirs As String activ = activ & "-" & "Cinéma"
End Structure End If
End Module If chkBoxLecture.Checked = True Then
- --------------------------------------------------- activ = activ & "-" & "Lecture"
End If
Public Class frmMenuCandidat 'Classe principale
If chkBoxAutre.Checked = True Then
- --------------------------------------------------- activ = activ & "-" & txtAutre.Text
End If
Private Sub Button3_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button3.Click txtRActivites.Text = Mid(activ, 2, 50) ' On laisse
tomber le premier "-"
RAZ_verif()
'Transfert des infos candidat dans la fenêtre résultat Me.Refresh()
txtRNum.Text = Mid(txtNumero.Text, 1, 4)
txtRNom.Text = txtNom.Text End Sub
txtRPrenom.Text = txtPrenom.Text - ---------------------------------------------------
txtRDnaiss.Text = CDate(dtPickerDnaiss.Text) 'A Private Sub Button1_Click(ByVal sender As System.Object,
saisir au format mm/jj/aaaa ByVal e As System.EventArgs) Handles Button1.Click
'txtRDnaiss.Text = maskedDNaiss.Text Dim rep As Integer
txtRDenreg.Text = CDate(dtPickerDenreg.Text)
rep = MsgBox("Confirmez-vous la sauvegarde après
MsgBox("La date de naissance se présente ainsi : " & vérification", vbOKCancel)
txtRDenreg.Text) MsgBox("Valeur du bouton cliqué : " & rep.ToString)
If rep = 1 Then
sauver_candidat()
'tests sexe saisi Else
If radbtnF.Checked = True Then MsgBox("Sauvegarde annulée - Aurevoir ! ",
txtRSexe.Text = "F" vbExclamation)
Else End If
txtRSexe.Text = "M" End Sub
End If
H. TSOUNGUI Introduction à VB.NET 19
- ---------------------------------------------------
Private Sub sauver_candidat() Private Sub fermer_fichier_candidats()
Dim vcandidat As New candidat : Dim longueur As Integer FileClose(2)
Dim nbenreg As Integer : Dim position As Integer End Sub
- ----------------------------------------------------
ouvrir_fichier_candidats() Private Sub RAZ_verif()
txtRNum.Text = ""
longueur = Len(vcandidat) txtRNom.Text = ""
nbenreg = FileLen("C:\candidats.dat") \ Len(vcandidat) txtRPrenom.Text = ""
' nbenreg est le nombre actuel d’enregistrements txtRSexe.Text = ""
txtRDnaiss.Text = ""
'Calcul de la position d'écriture txtRDenreg.Text = ""
position = nbenreg + 1 txtRActivites.Text = ""
End Sub
'Recup champs - ----------------------------------------------------
With vcandidat Private Sub frmMenuCandidat_Load(ByVal sender As Object,
.candNum = txtRNum.Text ByVal e As System.EventArgs) Handles Me.Load
.candNom = txtRNom.Text 'RAZ des champs de vérification
.candPrenom = txtRPrenom.Text txtRNum.Text = ""
.candSexe = txtRSexe.Text txtRNom.Text = ""
.candDnaiss = txtRDnaiss.Text txtRPrenom.Text = ""
.candDenreg = txtRDenreg.Text txtRSexe.Text = ""
.candLoisirs = txtRActivites.Text txtRDnaiss.Text = ""
End With txtRDenreg.Text = ""
txtRActivites.Text = ""
'Ecriture d’un enregistrement à la fin du fichier
FilePut(2, vcandidat, position) End Sub
- ----------------------------------------------------
fermer_fichier_candidats() Private Sub Button4_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles Button4.Click
End Sub RAZ_verif()
- ---------------------------------------------------- End Sub
Private Sub ouvrir_fichier_candidats()
Dim longueur As Integer : Dim vcandidat As New candidat End Class
longueur = Len(vcandidat) ' Longueur d'un - ----------------------------------------------------
enregistrement en octets Private Sub Button2_Click(ByVal sender As
'Ouverture du fichier en écriture System.Object, ByVal e As System.EventArgs) Handles
FileOpen(2, "C:\candidats.dat", OpenMode.Random, Button2.Click
OpenAccess.ReadWrite, OpenShare.LockRead, longueur) Me.Close()
End Sub End Sub
H. TSOUNGUI Introduction à VB.NET 20
Ce formulaire comporte des champs de saisie de valeurs (montant hors taxes, taux
de TVA) ainsi qu’un premier bouton de commande permettant de déclencher une
procédure de calcul et affichage des résultats. Deux derniers boutons permettent de
remettre à « blanc » toutes les zones de saisie ou de fermer le formulaire.
1-Ecrire le code de chacun des boutons de commande de l’interface.
Exo-3
- Refaire l’exo-2 en utilisant la fonction de génération des nombres aléatoires
RND() pour automatiser l’obtention des valeurs du tableau à une dimension.
- Remplir un vecteur de valeurs tirées au hasard entre 1 et 9.
- Lire une valeur à rechercher les occurrences dans le vecteur par exemple 2.
- Ecrire le code donnant le nombre de fois qu’apparaît cette valeur dans le vecteur.
3-Ensuite, il faut afficher les valeurs lues dans les labels qui ont pour nom 4-Créer une interface et écrire le code permettant de rechercher un client et
(propriété name L11, L12 tout en minuscules) d’afficher ses informations.
'Affichage des valeurs lues On ajoute un bouton « CHERCHER » dans le premier formulaire
l11.Text = clients(1, 1) : l12.Text = clients(1,
2)
l13.Text = clients(1, 3) : l14.Text = clients(1,
4)
… …
… … … … Algorithme ……. ….
Il faut parcourir les client(i,1) ‘parcours des lignes de la colonne 1 Exo-6 Jeu Loto-5 Simulation du jeu de loterie
comparer les codes, etc. Développer un programme en VB simulant une loterie à cinq nombres. Après
Si égalité entre le code client saisi et la valeur de client(i,1), avoir effectué une mise de 5 euros au plus, on propose 5 nombres compris entre 1
on a trouvé, et 10. On clique sur un bouton pour tirer au hasard cinq nombres différents dans
alors on sait que le client cherché est sur la ligne k=i ; le même intervalle. Chaque tirage diminue la mise de 1 euro.
Il suffit alors d’afficher client(k,1) pour son code, client(k,2) pour son
nom, client(k,3) son prénom et
Client (k,4) pour son chiffre d’affaires.
Fin du parcours
With vcli
.cliNum = txtNum.Text
.cliNom = txtNom.Text
.cliPrenom = txtPrenom.Text
.cliAdresse = txtAdresse.Text
.cliCpostal = txtCpostal.Text
Reproduire le formulaire et écrire le code nécessaire pour les boutons de .cliVille = txtVille.Text
commande. .cliChiffre = txtChiffre.Text
End With
ligne = vcli.cliNum + " - " + vcli.cliNom + " - " +
vcli.cliPrenom + " - " + vcli.cliCpostal + _
" - " + vcli.cliVille + " - " + vcli.cliChiffre
lstClients.Items.Add(ligne)
End Sub
H. TSOUNGUI Introduction à VB.NET 25
Exo-10 Simulation du jeu de Jackpot version légère 1.0 (un seul joueur)
Exo-9
Ecrire un programme permettant de générer des nombres aléatoires
compris dans un intervalle choisi (entre les valeurs min et max). Utiliser
l’interface graphique ci-dessous pour afficher les nombres générés.
H. TSOUNGUI Introduction à VB.NET 26
Ci-dessus, le formulaire frmGarage à améliorer avec des menus déroulants <VBFixedString(12)> Public voitEnergie As
String
<VBFixedString(60)> Public voitTravail1 As
String
<VBFixedString(60)> Public voitTravail2 As
String
<VBFixedString(4)> Public voitClient As String
End Structure
End Module
NB : cet exercice peut être fait en utilisant une petite base de données ACCESS ou
SQLServer et ADO.NET.
Formulaire frmVoiture
Module Modgarage
Public Structure client
<VBFixedString(4)> Public cliNum As String
<VBFixedString(15)> Public cliNom As String
<VBFixedString(15)> Public cliPrenom As String
<VBFixedString(25)> Public cliAdresse As String
<VBFixedString(5)> Public cliCpostal As String
<VBFixedString(20)> Public cliVille As String
<VBFixedString(10)> Public cliTelfixe As String
<VBFixedString(10)> Public cliTelmob As String
End Structure