Cours VB.NET

Image non disponible


précédentsommaire

XX-F. Migration VB6=>VB.NET

Image non disponible

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.

 
Sélectionnez

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'

 
Sélectionnez

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?

  • Avant en VB6, on avait:
 
Sélectionnez

Form2.Load
			
Form2.Show
  • Avec le programme de conversion VB6=>VB.Net on a:
 
Sélectionnez

Form2.DefInstance.Show()

car il ajoute une routine qui créée automatiquement une instance de form2:

#Region "Prise en charge de la mise à niveau "

 
Sélectionnez

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:
 
Sélectionnez

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:

 
Sélectionnez

Dim str As String = TextBox1

Maintenant il faut écrire:

 
Sélectionnez

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:

 
Sélectionnez

For i=0 to 100
	Dim Str As String 'Str est visible uniquement entre For et Next
	...
	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".

 
Sélectionnez

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 :

 
Sélectionnez

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.

 
Sélectionnez

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

 
Sélectionnez

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

 
Sélectionnez

Sub Mon Programme
	..
		Gosub Routine
	..
End SuB
 
Sélectionnez

Routine:
		Code de la routine
Return

Par

 
Sélectionnez

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


précédentsommaire

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.