Site:  Cours VB.net  
7.2 Nouveautés dans VB.NET 2005 (Framework 2)

Le matériel

L'IDE (environnement de développement)

Les nouveaux Objets (My).

Les instances de Form.

Les nouveaux contrôles.

Les nouvelles variables.

Les nouvelles collections.

Le code et les nouvelles instructions.

Les nouveautés dans les classes.

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

 

 

Le matériel:

Support des plateformes 64 bits.(Pas dans la version Express)

Support du 'multi monitor'

L'IDE

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

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

 

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:

 

' Copy the active window.

SendKeys.SendWait("{PRTSC}")

System.Threading.Thread.Sleep(1000)

Dim window As Bitmap

window = CType(Clipboard.GetDataObject().GetData("Bitmap"), Bitmap)

' Copy the entire screen.

SendKeys.SendWait("+{PRTSC}")

System.Threading.Thread.Sleep(1000)

Dim screen As Bitmap

screen = CType(Clipboard.GetDataObject().GetData("Bitmap"), Bitmap)

 

Génial!!

 

 

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:

 

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

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

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

 

 

L'alignement automatique des contrôles:

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

 

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.

 

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.

 

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.

 

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.

MsgBox(My.Application.Culture.ToString) 'affiche 'fr-FR'

(My.Application.ChangeCulture 'permettra de changer la culture )

MsgBox(My.Application.Info.DirectoryPath) 'affiche le nom du répertoire ou est l'exécutable.

My.Application.SetCurrentUser() retourne l'utilisateur
My.Application.SetCurrentUser()
My.Application.OpenForms qui retourne les formulaires ouverts.
Exemple: rajouter le texte 'ouvert' à la barre de tache des formulaires ouverts:
For Each F As System.Windows.Forms.Form In My.Application.OpenForms
F.Text += "[ouvert]"
Next
 
 
My.Computer
Permet d’accéder aux propriétés de l’ordinateur, du hardware.
Aux ressources logicielles et/ou matérielles de l’ordinateur.

Audio : permet de jouer des fichiers wav, ainsi que les sons systèmes de windows.

My.Computer.Audio.Play("c:\mysound.wav")

Clipboard : permet de récupérer des informations sur le contenu du presse-papier, de récupérer et de définir son contenu.

If My.Computer.Clipboard.ContainsImage Then
    PictureBox1.Image = My.Computer.Clipboard.GetImage
ElseIf My.Computer.Clipboard.ContainsText Then
    TextBox1.Text = My.Computer.Clipboard.GetText
End If

Clock : permet de récupérer l’heure courante ainsi que le nombre de millisecondes écoulées depuis le démarrage.

MsgBox(My.Computer.Clock.LocalTime.ToString) 'Affiche date et heure

 

FileSystem : permet d’effectuer les opérations d’entrées/sorties standards.

Récupérer le nom des disques:

MsgBox(My.Computer.FileSystem.Drives.Item(0).ToString)'affiche 'A:'

(la collection Drives contient des items indiquant les disques)

Un répertoire existe t-il?

MsgBox(My.Computer.FileSystem.DirectoryExists("c:\").ToString) 'affiche True si c:\ existe.

Possibilité de copier, créer, effacer répertoires ou fichiers:

Exemple: copie d'un répertoire:

My.Computer.FileSystem.CopyDirectory(sourcedirectory, destinationdirectory)

Voir les sous répertoires:

FileSystem.GetDirectories("c:\").item(0) permet de voir le premier sous répertoire.

GetFiles fait de même avec les fichiers.

Mettre le contenu d'un fichier texte dans une variable:

Dim LeTexte As String = My.Computer.FileSystem.ReadAllText("c:\devicetable.log")

(Il existe aussi WriteAllText)

 

Info : Obtient des informations concernant l’ordinateur et le système d’exploitation (mémoire vive libre, nom de l’os, version de l'os, etc).

MsgBox(My.Computer.Info.TotalPhysicalMemory.ToString) 'affiche la mémoire physique

Il y a aussi AvailablePhysicalMemory, OSVersion, OSFullName..

Keyboard : permet de tester l’état des touches CTRL, ALT, etc… et de simuler l’appuie de touche grâce à la méthode Sendkeys.

MsgBox(My.Computer.Keyboard.AltKeyDown.ToString)' teste si la touche Alt est enfoncée.

My.Computer.Keyboard.SendKeys("a")' simule l'appuie d'une touche.

 

Mouse : permet de récupérer des informations sur la souris (présence de la souris, présence de molette, boutons inversés, etc.)

MsgBox(My.Computer.Mouse.WheelExists.ToString) 'affiche True s'il y a une molette.

 

Name : récupère le nom de l’ordinateur

MsgBox(My.Computer.Name.ToString)

 

Network : permet de télécharger et d’uploader des fichiers, de vérifier si l’ordinateur est connecté à Internet, d’effectuer des pings, et de récupérer les évènements lors des connexions et déconnexions.

Charger un fichier à partir du réseau:

My.Computer.Network.DownloadFile(AdresseCompleteFichierACharger, DestinationFileNane)

 

With My.Computer.Network
    If .IsAvailable And .Ping(txtIpAdress.text) Then
        .UploadFile("c:\filetupload.ext", txtIpAdress.Text)
    End If
End With


Ports : permet de récupérer la liste des ports séries, et de les ouvrir.

Printers : permet de récupérer la liste des imprimantes installées et de définir l’imprimante par défaut. (absent dans la version bêta)

Registry : permet de manipuler la base de registre facilement.

Screen : permet de récupérer les informations concernant les écrans installés.

 
 
My.User
Permet de récupérer les informations sur l'utilisateur courant.

My.User.Identity.Name

My.User.IsInRole("Administrators")  'contient l'administrateur

 

 
My.Ressources

Permet de manipuler et récupérer très facilement les ressources incorporées à l’assembly.

My.Setting
Fichiers de configuration.
My.Forms
Donne accès à tous les  formulaires.
	My.Forms.HelpForm.Show()
My.WebService
Permet de manipuler directement les services web référencés dans le projet.

 

GZIPStreamClass

Permet d'enregistrer ou de lire des fichiers compressés au format zip .

Support du SMTP et du FTP
 
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.
 

Les nouveaux Contrôles

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.

 

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 

 

SoundPlayer

Pour écouter des sons .Wav

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.

 

ListView

WebBrowser:

Pour ouvrir une zone internet.

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:

 

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.

 

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.

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.

ProgesBarr:

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.

 

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 

 

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

 

 

Dans le Code: les nouvelles instructions

 

While condition

    ..Continue While

End While

Continue For existe aussi.

If Not (Objet1 Is Nothing ) Then..

devient

If Objet1 IsNot Nothing Then

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

En plus de CType et de Cast, il y a maintenant TryCast qui retourne Nothing si la conversion est impossible.

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)

' Code permettant de rechercher l'enregistrement à partir du nom.

End Sub

Overloads Sub LireEnregistrement(ByVal Numero As Integer, ByVal amount As Single)

' Code permettant de rechercher l'enregistrement à partir du numéro

End Sub

 

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:

If e then..

 

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
        ' Insert code that processes an item of data type 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.

Support du protocole FTP et Ping.