|
Site |
Cours VB.net |
|
|
|
Différence entre VB6 et 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.
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 ...
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)
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?
Form2.Load
Form2.Show
Form2.DefInstance.Show()
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 form2Get
If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Thenm_InitializingDefInstance =
Truem_vb6FormDefInstance =
New form2()m_InitializingDefInstance = False
End IfDefInstance = m_vb6FormDefInstance
End Get
Setm_vb6FormDefInstance = Value
End Set
End Property#
End RegionDim 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.
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.
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 'Str est visible uniquement entre For et Next
...
next i
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.
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 ListeBox possède une collection d'Item (les éléments de la listBox)
Les Structures:
Elles remplacent les "Types définis par l'utilisateur".
Structure MaStructure
Public i As Integer
Public c As String
End Structure
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 ThenAfficheMessage()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
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.
Gestion des erreurs:
La gestion des erreurs est structurées:
Elle utilise
Try
Code a tester
Catch
interception de l'erreur
Finally
suite
End Try
On error goto reste utilisable.
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)
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.
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..
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.
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.
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:
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.
|
|
|
|
|