Site:  Cours VB.net  
7.1 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.

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 ...

 

Les Classe 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)  

 

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 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

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.

 

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 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

 

 

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.

 

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)

 

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.

 

 

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.