Cours VB.NETDate de mise à jour : 05/12/2010
XX-F. Migration VB6=>VB.NET 2003
XX-F-1. Les objets
XX-F-1-a. Les Classes du Framework
XX-F-1-b. Les formulaires ou fenêtres
XX-F-1-c. Les Contrôles
XX-F-1-d. Les Variables
XX-F-1-e. Les Tableaux
XX-F-1-f. Les Collections
XX-F-1-g. Les Structures
XX-F-1-h. Les Fonctions et Sub
XX-F-1-i. Dans le code
XX-F-1-j. Gestion des erreurs
XX-F-1-k. Les graphiques
XX-F-1-l. Les bases de données
XX-F-1-m. Les Classes
XX-F-1-n. GOSUB et ON GOSUB n'existent plus
XX-F-1-o. Les Timers
XX-F-1-p. Conversion VB6 vers VB.NET
XX-G. VB.NET 2005 : nouveautés 2005
XX-G-1. Le matériel
XX-G-2. L'IDE
XX-G-2-a. On peut créer des fenêtres toutes faites, avec les contrôles
XX-G-2-b. Edit and Continue
XX-G-2-c. Il y a des exemples de code
XX-G-2-d. Il est proposé des solutions pour corriger les erreurs de code
XX-G-2-e. Le Projet Designer
XX-G-2-e-i. Exemple de ressource
XX-G-2-e-ii. Exemple de paramètre
XX-G-2-f. Alignement de controles
XX-G-2-g. Le déplacement des contrôles ou l'accès aux principales tâches est amélioré
XX-G-2-h. Renommer un nom : modification automatique
XX-G-2-i. Commentaire en XML
XX-G-3. Les nouveaux Objets
XX-G-4. Les instances de Forms
XX-G-5. Les nouveaux Contrôles
XX-G-5-a. DataGridView
XX-G-5-b. MaskedTextBox
XX-G-5-c. SoundPlayer
XX-G-5-d. SplitContainer
XX-G-5-e. ListView
XX-G-5-f. WebBrowser
XX-G-5-g. LayoutPanel
XX-G-5-h. MenuStrip
XX-G-5-i. ToolStrip
XX-G-5-j. StatuStrip
XX-G-5-k. ProgessBar
XX-G-6. Les nouvelles 'Variables'
XX-G-7. Les nouvelles 'Collections'
XX-G-8. Dans le Code : Les nouvelles instructions
XX-G-9. Les nouveautés dans les Classes
XX-H. Nouveautés 2008 et Framework 3
XX-F. Migration VB6=>VB.NET 2003
Cela concerne surtout ceux qui passent de VB6 à VB.NET, pour les autres c'est une révision.
Les petits nouveaux qui ne connaissaient pas VB6 (précédente version de VB) ne doivent pas lire ce qui est en vert.
XX-F-1. Les objets
En VB.NET tout est objet: les fenêtres, les contrôles, les variables....
Set et Let ne sont plus pris en charge.
Les objets peuvent être assignés par une simple opération d'assignation :
Object1 = Object2
Pour définir une propriété par défaut d'un objet, vous devez désormais référencer explicitement la propriété. Exemple
Object1.Text = Object2.Text
Vous pouvez définir vous même un nouveau type d'objet, une Classe.
Puis instancer des objets à partir de cette Classe.
VB.NETpermet une vraie programmation objet: héritage, polymorphisme, surcharge, Interface ...
XX-F-1-a. Les Classes du Framework
Il existe toujours les mots clefs de Visual Basic (Len, Trim, Rnd..) mais en plus le Framework met à disposition une multitude de Classes qui possèdent des méthodes permettant de faire une multitude de choses sans programmer:
Exemple:
La Classe Array (les tableaux) possède une méthode Sort qui trie les tableaux.
Dim T () As Integer
T (0)= 78
. .
Array . Sort (T)
|
XX-F-1-b. Les formulaires ou fenêtres
On se rend compte que quand on dessine une fenêtre Form2 par exemple, VB crée une nouvelle classe 'Class Form2'
Public Class Form2
Inherits Systeme. Windows . Forms . Form
End Class
|
Elle hérite de System.Windows.Forms.Form: on le voit bien dans le code.
Pour utiliser cette fenêtre, il faut créer une instance de cette fenêtre à l'aide de la Classe :
On tape Dim f As New Form2(), on crée une instance de la Class Form2.
Enfin la fenêtre sera ouverte grâce à la méthode ShowDialog ou Show.
Comme pour un Objet en général, la fenêtre créée sera visible dans sa portée. Si une fenêtre est instanciée dans une procédure, l'objet fenêtre f ne sera visible que dans cette procédure.
Comment passer de VB6 à VB.net?
- Avec le programme de conversion VB6=>VB.Net on a:
car il ajoute une routine qui créée automatiquement une instance de form2:
#Region "Prise en charge de la mise à niveau "
Private Shared m_vb6FormDefInstance As form2
Private Shared m_InitializingDefInstance As Boolean
Public Shared Property DefInstance () As form2
Get
If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance. IsDisposed Then
m_InitializingDefInstance = True
m_vb6FormDefInstance = New form2 ()
m_InitializingDefInstance = False
End If
DefInstance = m_vb6FormDefInstance
End Get
Set
m_vb6FormDefInstance = Value
End Set
End Property
#End Region
|
- En fait il faut mieux avec VB.net écrire:
Dim F As New Form2
F. Show
|
On remarque que Load n'existe plus, par contre, le Dim crée le formulaire sans l'afficher, c'est à peu prêt équivalent..
Les Forms ont 2 contrôles menu:
Les MainMenu
Les ContextMenu.
Visual Basic .NET ne prend pas en charge la méthode Form.PrintForm
XX-F-1-c. Les Contrôles
La plupart des objets ne possèdent plus de propriétés par défaut.
En VB6:
Dim str As String = TextBox1
|
Maintenant il faut écrire:
Dim str As String = TextBox1. Text
|
Visual Basic .NET ne prend pas en charge le contrôle conteneur OLE .
Il n'existe pas de contrôle carré rectangulaire ligne . On peut les remplacer sous la forme d'étiquettes (Label), tandis que les ovales et les cercles qui n'existent pas non plus, ne peuvent pas être mis à niveau.
Visual Basic .NET est doté d'un nouvel ensemble de commandes graphiques faisant partie de GDI+. Circle, CLS, PSet, Line et Point n'existent plus. Étant donné que le nouveau modèle objet est assez différent de celui de Visual Basic 6.0,il faut tout réécrire.
Visual Basic .NET ne prend pas en charge l'échange dynamique de données (DDE, Dynamic Data Exchange).
Bien que Visual Basic .NET prenne en charge la fonctionnalité de glisser-déplacer, le modèle objet est différent de celui de Visual Basic 6.0. Il faut tout réécrire.
Le .NET Framework est doté d'un objet Clipboard amélioré (System.Windows.Forms.Clipboard) qui offre plus de fonctionnalités et prend en charge un plus grand nombre de formats de Presse-papiers que l'objet Clipboard de Visual Basic 6.0. Il faut tout réécrire.
Les groupes de contrôle n'existent plus. Il y a des moyens de les remplacer.
XX-F-1-d. Les Variables
Option Explicit étant activé par défaut, toutes les variables doivent être déclarées avant d'être utilisées.
Le type de données Variant n'existe plus. Celui-ci a été remplacé par le type Object.
Le type de données Integer est désormais de 32 bits ; le type de données Long est de 64 bits.
On peut utiliser les type Booléens qui ne peuvent prendre que 2 valeurs :True et False (pas 0 et -1)
En VB.NET Option Strict étant activé, il faut convertir explicitement une donnée d'un type vers un autre si c'est nécessaire.
Response.Write("Le total est " & CStr(total))
on attend des String, la variable total qui est numérique est donc transformée en String par CStr.
Les variables créées dans la même instruction Dim seront du même type. Par exemple, dans VB.NET, l'instruction Dim i, j, k As Integer crée chacun des trois objets (i, j, et k) comme Integer. Les versions précédentes de VB créaient i et j comme Variants et k comme Integer (c'était nul!!).
Il existe un type Char qui contient un seul caractère.
Le type Currency est remplacé par le type Decimal.
Les String de longueur fixe n'existent plus. Il y a quelques ficelles pour contourner cela mais bonjour la simplicité!!
Les String et Char sont en Unicode (chaque caractère est codé sur 2 octets).
Une variable peut avoir une portée locale, publique ou, et c'est nouveau, une portée au niveau d'un bloc:
For i= 0 to 100
Dim Str As String
. . .
next i
|
XX-F-1-e. Les Tableaux
Le premier élément d'un tableau a l'indice 0 obligatoirement; plus d'Option Base.
On peut initialiser un tableau en même temps qu'on le déclare:
Dim Tableau(3) As Integer ={7,2,3,5}
A noter que ce tableau contient 4 élément d'index 0, 1, 2, 3.
Dim S(4 to 15) n'est plus accepté.
Dim est utilisé pour la déclaration initiale, Redim pour le redimensionnement uniquement.
Les tableaux font partie de la Classe Array, ce qui autorise l'utilisation de méthodes bien pratiques: Sort par exemple trie automatiquement le tableau.
XX-F-1-f. Les Collections
Elles sont omniprésentes. C'est fondamental de bien comprendre leur fonctionnement: Ce sont des listes ayant un nombre d'élément non défini, on peut y ajouter des éléments, en retirer, il y a des méthodes pour trier, rechercher..
Cela peut être :
Des listes d'objet: ArrayList
Des listes de booléens: BitArray
Des listes Clé-Valeur :HashTable
Des Queue
Des Piles :Stack
La notion de collection est généralisée et utilisée dans beaucoup d'objets: Une ListBox possède une collection d'Item (les éléments de la listBox)
XX-F-1-g. Les Structures
Elles remplacent les "Types définis par l'utilisateur".
Structure MaStructure
Public i As Integer
Public c As String
End Structure
|
XX-F-1-h. Les Fonctions et Sub
Les parenthèses sont désormais requises autour de la liste de paramètres dans tous les appels de méthodes y compris pour les méthodes qui ne prennent pas de paramètres. Exemple :
If Flag = False Then
AfficheMessage ()
End If
|
Par défaut, les arguments sont passés par valeur, et non pas référence . Si vous voulez passer des arguments par référence, vous devez utiliser le mot clé ByRef devant l'argument comme dans l'exemple suivant :
Call MaFunction(argbyvalue, ByRef argbyref)
Il peut y avoir des paramètres optionnels.
Return est un nouveau mot clé qui permet à une fonction de retourner une valeur.
Private Function MaFonction (Byval Chaine As String )
Return Chaine. ToLower ()
End Function
|
XX-F-1-i. Dans le code
Simplification d'écriture:
A +=2 est équivalent à A=A+2
Nouveau type de boucle
While condition
End While
Boucle tant que condition est vraie.
Wend n'existe plus.
Le Multithreading est possible.
XX-F-1-j. Gestion des erreurs
La gestion des erreurs est structurée:
Elle utilise
Try
Code a tester
Catch
interception de l'erreur
Finally
suite
End Try
On error goto reste utilisable.
XX-F-1-k. Les graphiques
En GDI (VB6) on utilisait les handles(HDC) pour spécifier un image.
En GDI+ (VB.Net) on travaille sur les Graphics et leurs méthodes. Graphics.DrawLine..
L'unité de mesure est le pixels. (Plus de Twips)
XX-F-1-l. Les bases de données
Visual Basic .NET contient une version améliorée des objets de données actifs (ADO, Active Data Objects) appelée ADO.NET.
DAO, RDO et ADO peuvent toujours être utilisés dans du code Visual Basic .NET, avec toutefois quelques petites modifications . Toutefois, Visual Basic .NET ne prend pas en charge la liaison de données DAO et RDO aux contrôles ou contrôles de données ni la connexion utilisateur RDO.
XX-F-1-m. Les Classes
La syntaxe des propriétés de classe a changé et ne contient plus Property Let, Property Get, et Property Set. La nouvelle syntaxe des propriétés est analogue à celle de C#.
Public Property ThisProperty As String
Get
ThisProperty = InternalValue
End Get
Set
InternalValue = value
End Set
End Property
|
Les classes sont totalement objet et acceptent le polymorphisme, la surcharge , l'héritage..
XX-F-1-n. GOSUB et ON GOSUB n'existent plus
Il faut remplacer une une routine qui était appelée par gosub par une sub ou une fonction.
Remplacer
Sub Mon Programme
. .
Gosub Routine
. .
End SuB
|
Routine :
Code de la routine
Return
|
Par
Sub Mon Programme
. .
Call Routine ()
. .
End Sub
Sub Routine ()
code de la routine
End Sub
|
Il faudra simplement faire attention aux variables, les variables locales à Mon Programme ne seront pas accessible dans la routine.
Pour On Gosub, il faut remplacer par un SelectCase.
XX-F-1-o. Les Timers
S'agissant du contrôle Timer, le fait d'affecter à la propriété Interval la valeur 0 ne désactive pas la minuterie ; l'intervalle est réinitialisé à 1. Dans vos projets Visual Basic 6.0, vous devez affecter à la propriété Enabled la valeur False plutôt que d'affecter à Interval la valeur 0.
XX-F-1-p. Conversion VB6 vers VB.NET
Il existe un outil de conversion (Menu Fichier, Ouvrir, Convertir, Assistant de mise à niveau de VB.NET) pour convertir un source VB6 en VB.NET.
Le problème est qu'il donne un code, à mon avis, inutilisable avec:
- Conversion des instructions VB6=>VB.NET quand il le peut.
- Conversion en utilisant une classe de compatibilité contenant des instructions spécifiques à VB6 (qui ne sont PAS du VB.NET) produisant un code hybride. Cette classe de compatibilité disparaîtra probablement dans les prochaines versions.
- Conversion en utilisant des ficelles avec ajout de plein de code: voir l'exemple des Forms au dessus ou l'outil de conversion crée une complexe fonction nommée 'DefInstance' permettant de créer des formulaires.
- Des instructions impossible à convertir automatiquement et qui seront à réécrire à la main.
Il faut convertir les programmes VB6 avec l'outil de conversion pour voir ce que cela donne: c'est instructif de voir le nouveau code.
Mais il faut réécrire totalement une bonne partie du code: l'appel des fenêtres en particulier.
Il faut rapidement ne pas utiliser du tout la classe de compatibilité VB 6 , éviter les instructions héritées de VB6, privilégier l'usage des classes du FrameWork.
XX-G. VB.NET 2005 : nouveautés 2005
Différences entre les versions. Que permet la version Express GRATUITE par rapport aux autres?
Télécharger VB Express 2005 GRATUIT à vie.
Télécharger sql Server 2005 Express
Télécharger le Service Pack 1 (SP1) New
Développer en VB 2005 pour Vista (Framework 3) New
XX-G-1. Le matériel
Support des plateformes 64 bits.(Pas dans la version Express)
Support du 'multi monitor'
XX-G-2. L'IDE
XX-G-2-a. On peut créer des fenêtres toutes faites, avec les contrôles
Il y a des fenêtres toutes faites pour accélérer le travail (les templates) comme les 'AboutBox' les 'Explorer Form'...
XX-G-2-b. Edit and Continue
Il y a maintenant le 'Edit and continue': en mode Debug, on peut modifier une ligne et poursuivre le programme qui tiendra compte de la modification (Sauf pour les déclarations).
XX-G-2-c. Il y a des exemples de code
Les Snippets (bride, morceau de code) permettent d'insérer du code tout fait.
Dans le code d'une procédure, le click droit de la souris ouvre un menu. Cliquer sur Insérer un extrait (Insert Snipper) puis double-cliquer sur la rubrique que vous cherchez.
On obtient le code suivant:
SendKeys. SendWait (" {PRTSC} " )
System. Threading . Thread . Sleep (1000)
Dim window As Bitmap
window = CType (Clipboard. GetDataObject (). GetData (" Bitmap " ), Bitmap)
SendKeys. SendWait (" +{PRTSC} " )
System. Threading . Thread . Sleep (1000)
Dim screen As Bitmap
screen = CType (Clipboard. GetDataObject (). GetData (" Bitmap " ), Bitmap)
|
Génial!!
XX-G-2-d. Il est proposé des solutions pour corriger les erreurs de code
Une fenêtre vous indique les corrections à faire.
Si je veux afficher une valeur numérique (avec option Strict=On),il y a erreur, VB me propose la correction:
XX-G-2-e. Le Projet Designer
Toutes les propriétés de l'application peuvent être modifiées dans le 'Projet Designer', il est directement accessible dans l'explorateur de solution (My Projet)ou par le menu Affichage-> Page de propriétés:
Le nom de l'application , son icône,
Le formulaire de démarrage (startUp Form),
L'écran de démarrage (Splash Screen), il suffit d'indiquer son nom (VB l'affiche et le fait disparaître quand le formulaire de démarrage s'ouvre).
Le mode d'arrêt de l'application: A la fermeture du formulaire de démarrage ou lorsque tous les formulaires sont fermés.
Les Option Strict, Explicit.(Onglet Compiler)
On peut utiliser aussi les paramètres (Settings), et les ressources....
XX-G-2-e-i. Exemple de ressource
Onglet 'Ressources' , créons une ressource nommée 'toto' et contenant '2' (c'est une string)
Pour l'utiliser dans le programme, on fera:
My.Resources.toto
Les ressources sont en Read-Only.
On vient de créer une ressource 'chaines' mais en déroulant la liste en haut à gauche , on voit qu'il y a des ressources Image, Icône, Audi, Fichier, Autre.
XX-G-2-e-ii. Exemple de paramètre
Onglet 'Paramètres' , créons un paramètre nommé 'Para1' et contenant '1' (c'est une string)
Pour l'utiliser dans le programme, on fera:
My.Parametre.Para1
Les Paramètres sont en Read-Only si la portée est 'Application', et en Read-Write si la portée est 'Utilisateur'.
Ces 'variables paramètres utilisateur' ont des valeurs qui seront conservées et enregistrées automatiquement dans l' 'environnement' d'un utilisateur. Si on en modifie la valeur, on retrouve la valeur modifiée lors d'une utilisation ultérieure ce qui permet de conserver les habitudes des utilisateurs.
XX-G-2-f. Alignement de controles
Si on modifie la taille ou l'emplacement d'un contrôle, VB signale par un trait bleu que le contrôle modifié et le contrôle voisin sont alignés:
Voir les exemples.
XX-G-2-g. Le déplacement des contrôles ou l'accès aux principales tâches est amélioré
La croix à gauche permet de déplacer le contrôle, la petite flèche à droite permet d'ouvrir un menu qui donne accès aux tâches les plus fréquentes.
XX-G-2-h. Renommer un nom : modification automatique
On nomme cela 'Refactoring': Cliquer sur une variable, puis bouton droit, dans le menu cliquer sur 'Renommer'. Modifier le nom de la variable, valider. Dans toute la Classe la variable est renommée.
XX-G-2-i. Commentaire en XML
On peut ajouter des commentaires en xml.
Exemple:
Pour une Sub: sur une ligne blanche au dessus de 'Sub', tapez ''' (3 ').
ou
Pour une variable: curseur sur la variable , bouton droit puis 'Insérer un commentaire' dans le menu.
Un bloc Xml <Summary> se crée automatiquement; Ajouter 'Fonction Calculant le total' entre les basiles <summary>
Quand ensuite on tape le nom de la Sub , le commentaire s'affiche. Pratique quand on travaille en equipe.
De plus Visual Basic génère automatiquement un fichier de documentation XML lorsque vous créez le projet. Ce fichier apparaît dans le répertoire de sortie de l'application sous le nom AssemblyName.xml.
XX-G-3. Les nouveaux Objets
My: le SUPER RACCOURCI.
My permet d'avoir accès rapidement à certaines fonctionnalités:
My.Application
Permet d'accéder rapidement aux propriétés de l'application en cours.
Vous pouvez ainsi récupérer des informations sur l'assembly, la culture (langue) de l'application.
Voir le chapitre sur My.
XX-G-4. Les instances de Forms
En VB2003 il fallait instancier une Form avant de l'utiliser.
Dim newForm1 As NewForm1
newForm1. BackColor = System. Drawing . Color . Green
newForm1. Show ()
|
On peut toujours le faire en 2005 mais on peut aussi utiliser la Class Form1 sans instancier:
Form1. ForeColor = System. Drawing . Color . Coral
Form1. BackColor = System. Drawing . Color . Cyan
Form1. Show ()
|
Comme il n'y a pas d'instance de Form1, VB en crée une.
XX-G-5. Les nouveaux Contrôles
XX-G-5-a. DataGridView
Il remplace le DataGrid dans VB.Net 2005 Il est bien plus simple à utiliser surtout pour modifier directement la grille sans passer par un DataSet.
MyDataGridView.ColumnCount = 5 indique le nombre de colonne.
MyDataGridView.Columns(0).Name = "Date" met un texte dans le haut de la colonne.
MyDataGridView.Rows.Add(t) 'Ajout de ligne; t est un tableau de 5 strings.
MyDataGridView.CurrentCell est la cellule courante (CurrentCellAdress contient les numéro de ligne et colonne)
MyDataGridView.EditMode = DataGridViewEditMode.EditOnEnter autorise de modifier les cellules.
XX-G-5-b. MaskedTextBox
Permettant d'utiliser un masque pour la saisie de caractères. Le masque indique quels caractères interdire ou permettre.
La propriété Mask permet d'indiquer le masque de saisie.
On peut la modifier en mode 'Design' :
On voit bien dans la fenêtre ci dessus: le masque '00:00' permet de saisir 2 groupes de 2 chiffres. L'utilisateur voit que qu'il y a dans l'aperçu '__:__' et est obligé de taper 2 chiffres puis 2 chiffres.
On peut utiliser des masques tout faits (Heure, date..) ou créer un masque personnalisé.
On peut aussi modifier le masque par code:
maskedTextBox1. Mask = " LL "
|
Pour le masque personnalisé on utilise:
0 Chiffre requis (lettres refusés)
9 Chiffre ou espace optionnel. (lettres refusés)
# Chiffre ou espace optionnel. (+ ) (- ) sont permis.
L Lettre requise. (chiffres refusés)
? Lettre requise optionnelle. (chiffres refusés)
& Caractère requis. (Chiffres et lettres permises)
C Caractère, requis optionnel. (Chiffres et lettres permises %* & permis)
A Alphanumérique requis opt. (Chiffres et lettres permises %* & refusés)
. Point Decimal; celui de la culture.
, Séparateur de millier; celui de la culture.
: Séparateur de temps; celui de la culture.
/ Séparateur de date ; celui de la culture.
$ Symbole monétaire; celui de la culture.
< Convertir les caractères qui suivent en minuscule.
> Convertir les caractères qui suivent en majuscule.
| Stop la conversion minuscule ou majuscule.
\ Escape. Le caractère qui suit devient un littéral. “\ \ ” affichera
|
Autres caractères Littéraux. Affichés tels quels
Exemple:
"00/00/0000" permet de saisir une date.
"LLL" permet de saisir trois lettres (pas des chiffres)
/ $ , : sont dépendant de la culture en cours:
Si le Mask="0$" il apparaîtra "_€ en culture française.
On peut modifier cela par FormatProvider property.
MaskCompleted indique si la saisie est conforme.
Dim returnValue As Boolean
returnValue = maskedTextBox1. MaskCompleted
|
MaskedTextBox1.text permet de lire le contenu du texte.
L'évènement le plus souvent utilisé est TextChanged
Private Sub MaTextBox_TextChanged (sender As Object, _
e As EventArgs) Handles MaTextBox. TextChanged
End Sub
|
XX-G-5-c. SoundPlayer
Pour écouter des sons .Wav
XX-G-5-d. SplitContainer
Permettant de créer facilement une séparation déplaçable entre 2 zones.
On met le SplitContainer, dans les 2 zones on met par exemple 2 textbox. Il faut mettre la propriété Dock de ces 2 textbox à Fill.
En mode Run, cela marche : si je déplace la zone de séparation centrale, cela agrandit un textbox et diminue le second.
Margin indique la largeur de la séparation.
Orientation permet une séparation horizontale ou verticale.
XX-G-5-e. ListView
XX-G-5-f. WebBrowser
Pour ouvrir une zone internet.
XX-G-5-g. LayoutPanel
Permettent de positionner les contrôles dans une Form en conception.
FlowLayoutPanel: Place les contrôles à droite du précédent, passe 'à la ligne' si nécessaire, c'est génial pour créer plusieurs lignes de label, TextBox, Bouton:
TableLayoutPanel:On crée un tableau de panel, puis on met les contrôles dans les cellules:
XX-G-5-h. MenuStrip
Remplace les MainMenu
On peut même mettre des images dans les menus. Il peut y avoir des combobox et des zones de texte.
Il y a aussi les ContextMenuStrip qui remplace les ContextMenu.
XX-G-5-i. ToolStrip
Création de barre n'importe ou dans le formulaire.
Exemple de barre de menu comprenant:
Un bouton.
Un label
Un bouton déroulant un menu.
Un comboBox
Une zone texte
Une barre de progression.
Images possible dans les menus, il peut y avoir des séparateurs.
XX-G-5-j. StatuStrip
Pour créer une barre d'état en bas d'un formulaire; remplace les StatusBar.
Peut contenir des LabelStrip (Label ou LinkLabel), des ProgressBar, DropDownButton et ToolsStripButton.
XX-G-5-k. ProgessBar
Idem le contrôle de 2003 avec des fonctionnalités en plus:
La propriété Style permet la progression par blocks, en continue, ou en oscillation droite gauche comme lors de l'ouverture de Windows XP.
Il y a aussi le toolstripcontainer et un contrôle permettant l'usage port série.
XX-G-6. Les nouvelles 'Variables'
VB 2005 prend en charge les types non signés:
UInteger Entier codé sur 32 bits pouvant prendre les valeurs 0 à 4 294 967 295.
ULong Entier codé sur 64 bits :0 à 18 446 744 073 709 551 615
UShort Entier sur 16 bits 0 à 65 535.
et
SByte Codé sur 1 octet, valeur de -128 à 127
XX-G-7. Les nouvelles 'Collections'
On peut utiliser des collections 'génériques'
System. Collections . Generic . List (Of String )
|
On peut ainsi créer des collections fortement typées.
Il y a en plus les Collections spécialisées (nouveau type de collection):
L'espace System.Collections.Specialized fournit ce nouveau type de collection:
Exemple: ListDictionary avec Clé et Valeur:
Dim l As New System. Collections . Specialized . ListDictionary
|
XX-G-8. Dans le Code : Les nouvelles instructions
- Continue dans une boucle Do While ou For permet de passer à l'itération suivante sans effectuer le code.
While condition
..Continue While
End While
Continue For existe aussi.
- IsNot simplifie l'écriture:
If Not (Objet1 Is Nothing ) Then..
devient
If Objet1 IsNot Nothing Then
- Using
Permet de créer un bloc qui libère les ressources en fin de bloc:
Using sqc As New System. Data . SqlClient . SqlConnection (s)
MsgBox (" Connected with string " " " & sqc. ConnectionString & " " " " )
End Using
|
- TryCast
En plus de CType et de Cast, il y a maintenant TryCast qui retourne Nothing si la conversion est impossible.
- Procédures avec paramètres différents.
On peut 'overloader' une procédure afin de pouvoir l'appeler avec des paramètres différents.
Overloads Sub LireEnregistrement (ByVal Name As String , ByVal amount As Single)
End Sub
Overloads Sub LireEnregistrement (ByVal Numero As Integer, ByVal amount As Single)
End Sub
|
XX-G-9. Les nouveautés dans les Classes
Les classes 'Partielles' sont possible.
Partial Class MaClasse
End Class
|
Ainsi une Classe peut être scindée en plusieurs parties situées dans des endroits différents du code.
On peut surcharger les opérateurs + - * / mais aussi _ ^ & Like And Or Xor Not < > = << >> CType IsTrue, IsFalse
Exemple: surchargeons l'opérateur +
Public Structure height
. . .
Public Shared Operator + (ByVal h1 As height, ByVal h2 As height)As height
Return New height (h1. feet + h2. feet , h1. inches + h2. inches )
End Operator
End Structure
|
La routine doit être Shared, de plus si on surcharge certains opérateurs, il faut aussi surcharger leur inverse: si on surcharge '>' , il faut surcharger '<'.
Surcharge de IsTrue, IsFalse CType
Si on teste un boolean, il a la valeur True ou False.
Si par contre je crée une classe nommée 'Personne', je peux définir comment une instance sera considérée comme égale à True. Il faut surcharger l'opérateur IsTrue en lui indiquant dans quelle condition l'instance sera considérée comme =True:
Exemple:
J'ai une instance e de type Personne, si e.Present =True, dans ce cas je veux que e soit considéré comme True; il faut écrire dans la Classe 'personne':
Public Shared Operator IsTrue (ByVal e As Personne) As Boolean
If e Is Nothing Then
Return False
Else
Return e. Present
End If
End Operator
|
Pour définir l'opérateur IsFalse, c'est simple: c'est Not e
Public Shared Operator IsFalse (ByVal e As Personne) As Boolean
Return Not e
End Operator
|
Ensuite je pourrais utiliser des instructions de la forme:
Surcharge de CType:
Je peux définir dans une classe comment CType va fonctionner:
Pour cela dans la classe Personne, je vais définir les 3 possibilités:
Public Shared Widening Operator CType (ByVal e As Personne) As String
Return e. Nom + " " + e. Prenom
End Operator
Public Shared Widening Operator CType (ByVal e As Personne) As Date
If e Is Nothing Then
Return Nothing
Else
Return e. DateDeNaissance
End If
End Operator
Public Shared Widening Operator CType (ByVal e As Personne) As Boolean
If e Is Nothing Then Return False Else Return e. Present
End Operator
|
Ainsi
CType(UnePersonne,String) retourne Nom Prenon
CType(UnePersonne,Date) retourne la date de naissance
CType(UnePersonne,Boolean) retourne True ou False.
On peut créer des Property avec une portée différente pour le Set et le Get:
Public Class employee
Private salaryValue As Double
Protected Property salary () As Double
Get
Return salaryValue
End Get
Private Set (ByVal value As Double)
salaryValue = value
End Set
End Property
End Class
|
Utilisation des 'générics'
Un type 'generic' permet de créer une Classe ayant des Data Types non définis au départ.
Créons une classe MyClasse; Of permet d'indiquer le genéric:
Public Class MyClasse (Of t)
Public Sub NewItem (ByVal newItem As t)
Dim tempItem As t
End Sub
End Class
|
On peut ensuite utiliser cette classe avec des Integer ou des String:
Public UneClass As New MyClasse (Of Integer)
Friend stringClass As New MyClasse (Of String )
|
voir la rubrique 'générique' pour le détails.
XX-H. Nouveautés 2008 et Framework 3
VB edition 2008 c'est VB 9.0!!
On verra les nouveautés dans:
A- le Framework 3.5
B- l'IDE
C- le langage visual basic
A- LE FRAMEWORK 3.5
Un Framework est donc un ensemble de Classes.
Le Framework 2.0 était utilisé par VB 2005.
Le Framework 3.0 c'est le Framework 2 auquel s'ajoute WPF WCF WF WCS.
Windows Presentation Foundation (WPF) ex 'avalon'
utilise un moteur de rendu vectoriel et des accélérations matériels pour afficher. Présent dans la version Express.
Windows Communication Foundation (WCF) ex 'indigo'
permet de développer des applications distribuées inter opérables, fiables et sécurisées. WCF simplifie le développement d'applications connectées. Non présent dans la version Express.
Windows Workflow Foundation (WF) est constitué d'un modèle de programmation, d'un moteur d'exécution et d'outils, pour développer et intégrer des workflows dans les applications .NET. (un workflow est une succession d'actions ou d'étapes qui s'exécutent dans un ordre prédéfini). Non présent dans la version Express.
Windows CardSpace (WCS), ex Infocard, est une nouvelle technologie qui permet aux utilisateurs de prouver leur identité. Non résent dans la version Express.
Le Framework 3.5 est utilisé par VB2008.
C'est le Framework 3 auquel s'ajoute AJAX (utilisable dans les WebForms), LINQ et REST (C'est quoi?).
Vista comporte nativement le Framework 3.0.
VB 2008 permet de choisir et d'utiliser le Framework 2.0, 3.0 ou 3.5
Depuis le Framework 2 le CLR (Common Langage Runtime), le moteur, est toujours le même: c'est la version 2.
Attention:
Les WPF fonctionnent dans l'édition VB Express 2008; avec un IDE simplifié.
Les extensions pour Windows WorkFlow Foundation ne peuvent pas être utilisées avec les versions Express : il vous faudra, au minimum, une version " Professionnel " de Visual Studio 2008 :
Collection HashSet
Cette nouvelle collection travaille sur les ensembles.
Il s'agit d'une collection sans ordre qui contient des éléments uniques. HashSet possède comme toutes les collections Add, Remove et Contains.. et fournit plusieurs opérations d'ensembles (notamment l'union, l'intersection et la différence symétrique)ce qui permet de prendre en charge la plupart des opérations mathématiques qui sont généralement réalisées sur des ensembles (sens mathématique du terme).
Dim hs As New HashSet (Of String )
Ajout d
hs. Add (" toto " )
hs. Add (" lulu " )
hs. Add (" titi "
|
La méthode Add renvoie True ou False pour indiquer si elle a fonctionné (s'il n'y avait pas déjà dans la HashSet l'élément que l'on veut ajouter).
Dim caMarche As Boolean = hs. Add (" toto " )
|
'retourne False
donne le nombre d'élément.
On peut effacer un élément:
On peut effacer sous condition:
Exemple: effacer tous les éléments contenant un "t":
hs. RemoveWhere ( Adress Of Test)
|
'La fonction Test reçoit chaque string de la table et retourne un booléen qui indique si la condition est rempli ce qui déclenche le Remove.
Private Shared Function Test (ByVal s As String ) As Boolean
Return (Instr (s," t " )< > 0)
End Function
|
On peut ajouter la collection hs2 à hs grâce à UnionWith:
Les éléments doublons (qui existent déjà dans hs )ne sont pas ajoutés.
Cela correspond à un And sur les 2 ensembles.
On peut rechercher les éléments communs à hs2 et à hs grâce à IntersectWith:
hs contient maintenant les éléments qui étaient présents dans hs et hs2
Cela correspond à un Or sur les 2 ensembles.
On peut supprimer tous les éléments de hs qui sont aussi contenus dans la collection passée en paramètre (hs2) avec ExceptWith
hs contient maintenant les éléments qui n'étaient pas présents dans hs et hs2
On peut rechercher les éléments contenus dans hs2 et dans hs mais pas dans les 2 grâce à SymmetricExceptWith:
hs. SymmetricExceptWith (hs2)
|
hs contient maintenant les éléments qui étaient présents dans hs ou hs2 mais pas les deux.
On peut rechercher si hs2 est un sous ensemble de hs grâce à IsSubsetOf:
Dim b As Boolean= hs. IsSubsetOf (hs2)
|
b est égal à True si hs est un sous ensemble de hs2 (tous les éléments de hs sont dans hs2).
Il existe aussi:
IsProperSubstOf qui retourne True si hs est un sous ensemble de hs2 et si hs différent de hs2 (sous ensemble strict)
On peut rechercher si hs est un sur ensemble de hs grâce à IsSupersetOf:
Dim b As Boolean= hs. IsSupersetOf (hs2)
|
b est égal à True si hs est un sur ensemble de hs2 (tous les éléments de hs2 sont dans hs).
Il existe aussi:
IsProperSupersetOf qui retourne True si hs est un sur ensemble de hs2 et si hs est différent de hs2 (sur ensemble strict)
TimeZone
Les nouvelles classes DateTimeOffset et TimeZoneInfo permettent de mieux gérer les applications qui utilisent les zones dates et heures.
Suite B
Vb 2008 gère la cryptographie avec les algorithmes 'Suite B' de la NSA.
Support du Peer to Peer
Vb 2008 gère le Peer to Peer grâce à l'espace de nom System.Net.PeerToPeer.
AddIn
Il est possible à l'utilisateur d'ajouter à son application des Add-In.
WPF
Voir chapitre sur les WPF.
Plutôt que de travailler avec les Windows Forms (formulaire habituel utilisant GDI+); en VB 2008 on peut utiliser un mode graphique vectoriel extrêmement performant pour dessiner les formulaires et contrôles: pour cela on utilise les WPF (Windows Presentation Foundation).
Il y a le 'designer' en haut qui permet de dessiner l'interface que verra l'utilisateur. Le designer génère un fichier XAML en bas qui décrit en XML l'interface.
Dans la version Express, il n'y a pas 'cider' qui permet de faire une interface extrêmement élaborée (dégradé de couleur, animation...) Si on était un peu 'maso' on écrirait du code XAML pour faire du graphisme élaboré.
Support Windows Vista
VB 2008 utilise sous Windows Vista les CommonDialogBox de Vista et à accès à la gestion des droits avec l'usage de l'UAC.
B- L'IDE VB 2008
Dans l'ensemble elle ressemble beaucoup à celle de VB 2005.
-Le changement majeur est de pouvoir travailler avec les WPF (voir plus bas).
-L'aide est plus élaborée:
Des que je tape une lettre VB propose dans une liste des mots.
Exemple, je tape 'd', il affiche 'Dim', 'Dir'..., de plus si je me met sur un des mots, il ouvre une petite fenêtre d'explication sur le mot avec sa syntaxe.
-VB 2008 permet de choisir et d'utiliser le Framework 2.0, 3.0 ou 3.5.
Pour changer de Framework, passer par le menu 'Projet' puis 'Propriétés de..', onglet 'Compiler', en bas il y a un bouton nommé 'Options avancées de compilation...', cliquez dessus:
On peut en bas de la fenêtre modifier le Framework et utiliser le Framework 2, 3, 3.5.
C- NOUVEAUTÉS DANS VISUAL BASIC 2008
Initialisation simplifiée.
Soit une Classe Personne ayant les property Nom et Id
En VB 2005 on pouvait écrire:
Dim per2 As New Personne
With per2
. Nom = " Philippe "
. Id = 2
End With
|
Si le constructeur le permet (si il accepte 2 arguments pour New)on peut aussi écrire:
Dim per1 As New Personne (" Philippe " , 2)
|
En VB 2008 on peut écrire:
Dim per1 As New Personne With {. Nom = " Philippe " , . Id = 2}
|
Inférence de Type
Il faut pour cela que Option Infer =On (Off par défaut)
Passer par le menu 'Projet' puis 'Propriétés de..', onglet 'Compiler'
En plus des options Explicit, Compare, Strict, on peut modifier Option Infer.
L'inférence est la capacité de déduire le type d'une variable par analyse des types fournis en entrées ainsi que des opérations effectuées sur ceux-ci. C'est donc le compilateur qui déduit le type de la variable.
Dim Myname1 As String = " Rouge "
Dim Myname2 = " Vert "
|
Le passage du curseur de la souris sur Myname2 vous permet de découvrir que celui-ci est bien un type "String".
On avait dit qu'il fallait travailler avec Option Implicit = True et là on ne déclare même pas le type!!! En fait l'inférence existe afin de supporter par exemple les types anonymes ou encore LINQ.
Il existe des cas pour lesquels l'inférence de type ne se produit pas. Pour les instructions Dim locales, l'inférence de type survient uniquement lorsqu'il y a une assignation sur la ligne de déclaration. Par conséquent, pour les assignations effectuées hors de la déclaration de la variable, le compilateur supposera que le type est Object. Object est également toujours déduit comme type des membres de niveau classe, si bien que l'inférence de type ne s'applique pas aux fonctions, sous-routines, propriétés, champs de classe/structure, etc
Lorsque Option Explicit est Off , une variable locale peut être utilisée dans le code sans déclaration explicite. La variable est supposée être dans ce cas de type Object et tous les appels sont liés tardivement. L'inférence de type ne survient pas sur les variables définies implicitement.
Link
Language-Integrated Query (LINQ).
Langage de requête intégré.
C'est un langage de requêtes (permettant d'interroger une source de données) directement dans le code Visual Basic et à l'aide de mots clés familiers (issues du SQL, le langage d'interrogation des bases de données).
De plus, ce qui est 'magique', ce langage de requêtes est utilisable, non seulement sur les bases de données SQL Serveur et ADO.NET mais aussi sur des documents XML et un ensemble d'objets comme les String, Collections, ListArray..
Exemple: rechercher les nombres pairs dans un tableau d'Integer:
Dim numbers () As Integer = {0, 1, 2, 3, 4, 5, 6}
Dim réponses = From num In numbers _
Where num Mod 2 = 0 _
Select num
For Each number In reponses
Console. Write (number & " " )
Next
|
Cela affiche sur la console: 0 2 4 6:
On peut vouloir compter uniquement les nombres pairs:
Dim nombredepair = (From num In numbers _
Where num Mod 2 = 0 _
Select num). Count ()
|
On remarque que dans le premier exemple (Select num) l'exécution de la requête est effectuée au cours de la boucle For Each (exécution différée par rapport à la création) alors que dans le second exemple (count) , l'exécution est immédiate.
Méthodes d'extension.
Permet d'ajouter des fonctionnalités à une Data Type ( sans devoir faire une Classe dérivée)
Exemple:
Soit le DataType 'String', je veux y ajouter une méthode Print qui affichera la String sur la console:
Imports System. Runtime . CompilerServices
Module StringExtensions
< Extension ()> _
Public Sub Print (ByVal aString As String )
Console. WriteLine (aString)
End Sub
End Module
|
C'est le "ByVal aString As String" qui indique que c'est une extension sur les 'String'.
Comment utiliser la méthode Print?
Imports ConsoleApplication2. StringExtensions
Module Module1
Sub Main ()
Dim exemple As String = " Bonjour "
exemple. Print ()
exemple. ToUpper ()
exemple. ToUpper . Print ()
End Sub
End Module
|
Si on veut ajouter un paramètre à la méthode Print, il faut l'ajouter au premier paramètre qui lui indique le DataType.
< Extension ()> _
Public Sub PrintPonctuation (ByVal aString As String , ByVal punc As String )
Console. WriteLine (aString & punc)
End Sub
|
Ensuite pour l'utiliser:
Dim exemple As String = " Exemple "
exemple. PrintPonctuation (" . " )
|
Lambda Expression
Une expression lambda est une fonction permettant de calculer et retourner une valeur unique.
Exemple: Créons une expression lambda qui incrémente un Integer.
Création de la fonction:
Dim ajoute1 = Function (num As Integer) num + 1
|
Utilisation de la fonction dans la même sub:
Console. WriteLine (ajoute1 (5)) Affiche 6.
|
On dit que la fonction lambda 'ajoute1( num As Integer)' conduit à num+1.
On peut déclarer et utiliser la fonction en même temps:
Console. WriteLine ((Function (num As Integer) num + 1)(5))
|
Dans ce cas il n'y a pas de nom de fonction.
Attention:
On n'a pas de 'End Function' ni de 'Return' ni de 'As', on ne peut pas utiliser les génériques.
Si on veut déclarer l'expression lambda dans la tête du module afin d'avoir un accès public,
c'est plus complexe:
Class Window1
Delegate Function ajoute (ByVal num As Integer) As Integer
Public ajoute1 As ajoute = Function (num) num + 1
Private Sub Button_Click (ByVal sender As System. Object , ByVal e As System. Windows . RoutedEventArgs ) _
Handles Button. Click
MsgBox (ajoute1 (3). ToString )
End Sub
End Class
|
Voyons comment on peut passer à une Sub une fonction lambda en argument.
On crée une fonction 'testResult' qui a pour argument une valeur et une fonction lambda.
Cette fonction affiche "Success" ou "Failure" en fonction de la valeur True ou False
retournée par la fonction lambda qui a reçu la valeur.
Pour utiliser cette sub on l'appelle avec comme argument la valeur à tester et la fonction Lambda.
Module Module1
Sub Main ()
testResult (4, Function (num) num Mod 2 = 0)
testResult (5, Function (num) num > 10)
End Sub
Sub testResult (ByVal value As Integer, ByVal fun As Func (Of Integer, Boolean))
If fun (value) Then
Console. WriteLine (" Success " )
Else
Console. WriteLine (" Failure " )
End If
End Sub
End Module
|
Méthode partielle
Elle sont présentes dans des Classes Partielles. Et sur des méthodes privées.
Voici la syntaxe.
Partial Private Sub MyMethode ()
End Sub
|
Exemple:
Voici la Classe:
Partial Class Product
Private _Quantity As Integer
Property Quantity () As Integer
. . .
End Property
Partial Private Sub QuantityChanged ()
End Sub
End Class
|
Ici dans la Classe initiale la méthode partielle QuantityChanged() sert à donner la signature.
L'autre Classe partielle, qui est dessous, ajoute des fonctionnalités à la méthode partielle.
Partial Class Product< / b>
Private Sub QuantityChanged ()
MsgBox (" Quantity was changed to " & Me. Quantity )
End Sub
End Class
|
XML
On peut créer directement de l'XML dans le code.
On peut créer un élément XML:
Dim contact1 As XElement = _
< contact>
< name> Patrick Dupont< / name>
< phone type= " home " > 206- 555- 0144< / phone>
< phone type= " work " > 425- 555- 0145< / phone>
< / contact>
|
On peut créer un document XML:
Dim contactDoc As XDocument = _
< ?xml version= " 1.0 " ?>
< contact>
< name> Patrick Dupont< / name>
< phone type= " home " > 206- 555- 0144< / phone>
< phone type= " work " > 425- 555- 0145< / phone>
< / contact>
|
On peut mettre dans le XML des expressions qui sont évaluées au cours de l'exécution, ces expressions sont de la forme: %= expression %
Exemple: Inclure dans l'élément XML un nombre et une date:
Dim MyNumber As String = " 12345 "
Dim MyDate As String = " 3/5/2006 "
Dim livre As XElement = _
< livre category= " fiction " isbn= < %= MyNumber %> > < TheDate> < %= MyDate %> < / TheDate> < / livre>
|
Type Nullable.
Les types Par Valeur peuvent être étendus afin d'accepter une valeur normale habituelle ou une valeur Null (Nothing en VB).
On peut déclarer un type Nullable de 3 manières:
Dim MyInteger As Nullable (Of Integer)
|
Mais aussi:
Dim MyInteger? As Integer
Dim MyInteger As Integer?
|
C'est le '?' qui force la variable Nullable.
Sur la seconde déclaration, la variable est MyInteger
Autre exemple:
MyBol pourra prendre la valeur True, False et Nothing.
Cela a de l'intérêt quand on travaille avec les bases de données qui ont des champs qui contiennent un Null et avec Linq.
Type anonyme
Habituellement, on peut déclarer Mycustomer, une instance de la classe Customer et renseigner une propriété .Name.
Dim MyCustomer = New Customer With {. Name = " Philippe " }
|
Grâce au type anonyme, on peut écrire:
Dim AnomyneCustomer = New With {. Name = " Philippe " }
|
Remarque= avant New il doit y avoir '=' et pas As.
Cela créer une nouvelle classe anonyme (sans nom) possédant une propriété .Name.
Les types anonymes sont surtout utilisés avec Linq:
Exemple:
Dim namePriceQuery = From prod In products _
Select prod. Name , prod. Price
|
Si products est une liste d'objets avec plein de propriétés, namePriceQuery est une collection de type anonyme qui posséde 2 propriétés: .Name et .Price .
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © .
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|