Vous êtes sur la page 1sur 16

Cours VB.

NET

Forums Tutoriels Magazine FAQs Blogs Projets Chat Newsletter Études Emploi Club Contacts

Accueil Conception Java .NET Dév. Web EDI Langages SGBD Office Solutions d'entreprise Applications Systèmes

.NET Visual Studio ASP.NET C# Visual Basic.NET Windows Phone Windows Azure

FORUMS VB.NET FAQ VB.NET TUTORIELS VB.NET SOURCES VB.NET LIVRES VB.NET

Cours VB.NET

Date de mise à jour : 08/01/2011

Précédent Sommaire Suivant Version PDF (Miroir) Version hors-ligne (Miroir)

VIII-D. Les 'Boutons'


VIII-D-1. Créer un bouton
VIII-D-2. Modifier ses propriétés
VIII-D-3. Utiliser les évènements
VIII-D-4. Créer un bouton Ok ou Cancel
VIII-D-5. Couleur transparente dans les images des boutons
VIII-D-6. Utilisation avancée : Créer de magnifiques boutons à partir de VB2005
VIII-D-7. Utilisation avancée : Création d'un bouton par code
VIII-E. Les 'TextBox'
VIII-E-1. Les contrôles TextBox
VIII-E-1-a. Propriétés
VIII-E-1-b. Validation de saisie
VIII-E-2. Le contrôle RichTextBox
VIII-E-3. Le contrôle MaskedTextBox (VB Framework 2)
VIII-F. Les 'Labels'
VIII-F-1. Les labels
VIII-F-2. Les LinkLabel
VIII-G. Les cases à cocher

VIII-D. Les 'Boutons'

Ils sont omniprésents dans les 'formulaires'.

VIII-D-1. Créer un bouton

Cliquer sur 'Boite à Outils' à gauche , bouton Windows Forms, puis bouton 'Button',cliquer dans Form1, déplacer le curseur sans lâcher le bouton,
puis lâcher le bouton : un bouton apparaît.

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

VIII-D-2. Modifier ses propriétés

On peut modifier les propriétés dans la fenêtre des propriétés en bas à droite:

On peut aussi modifier les propriétés par du code.

Name est utilisé pour lui donner un nom explicite (BoutonOk BoutonCancel)

FlatStyle donne un aspect au bouton (Flat, standard, System, pop Up).

En VB 2003

En vb2005:

System utilise le thème d'affichage de Windows que vous avez choisi dans le panneau de configuration. (Thème Windows XP, personnel..)

Quand on utilise Flat on peut choisir dans FlatStyle l'épaisseur du bord (BorderSize) et sa couleur (BorderColor), 3 et rouge dans notre premier
bouton.
MouseDownBackColor et MouseOverBackColor indiquent la couleur d'arrière plan du bouton quand on clique ou quand on survole le bouton.

Enfin on peut choisir la position du texte avec TextAlign. Il a la valeur TopLeft dans le dernier bouton.

Text contient le texte a afficher sur le bouton. ForeColor correspond à la couleur de ce texte (BackColor étant la couleur du fond)

Exemple:

button1.Text="Ok" affiche 'Ok' dans le bouton.

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Si on y inclut un « & » la lettre qui suit sera soulignée et servira de raccourci clavier.

Button.Text= "&Ok" donne sur le bouton Ok et crée le raccourci clavier 'Ctrl O' qui est l'équivalent d'un click sur le bouton.

TextAlign permet de positionner le texte dans le bouton.

Image contient le nom de l'image à afficher sur le bouton (si on veut afficher une image, on le fait en mode Design; noter que quand on distribue
l'application, il n'y a pas besoin de fournir le fichier contenant l'image avec l'application ). AlignImage permet de positionner l'image sur le bouton.

On peut aussi puiser une image dans une ImageList grâce à la propriété ImageList et ImageIndex, on peut ainsi changer d'image.

Si le Flatstyle a la valeur 'System' l'image n'apparaît pas.

En VB 2008, l'image est chargée dans les ressources. Les formats acceptés sont: bmp, gif, jpg, wpf, png.

La propriété BackGroundImage permet de mettre une image de fond.

TextImageRelation permet de définir les relations entre le texte et l'image: avant, après, dessus (Overlay).

Font contient la police de caractère, sa taille, son enrichissement (gras, italique..)

AutoEllipsis permet de prendre en charge un texte trop long: Il le tronque et ajoute '...', si le curseur de l'utilisateur passe sur le bouton, on voit un
ToolTip qui affiche la totalité du texte:

Buttom1.AutoEllipsis= True

Si AutoSize=True, cela ajuste les dimensions du bouton à la longueur du texte: à éviter?

Truc: quand vous travaillez sur de très petits boutons, changer la propriété Font et choisir une petite taille de caractère (8 par exemple)

Habituellement, on modifie l'aspect du bouton dans le designer, mais on peut le faire aussi par code.
Exemple en VB 2008:

With Button1
.Text= "Ok"
.Image= MonProgramme.My.Resources.Resources.BtOk
.TextImageRelation=TextBeforeImage
.ImageAlign= MiddleRigth
.TextAlign= MiddleLeft
End With

Padding permet de positionner le contenu dans le contrôle: remplissage et marges; il est utilisable dans de nombreux contrôles; ici dans un bouton
c'est le texte qui est déplacé.

Button1.Padding = New Padding(30, 10, 10, 10)

VIII-D-3. Utiliser les évènements

L'évènement principalement utilisé est Click(): quand l'utilisateur clique sur le bouton la procédure

Private Sub Button_Click(..)


End Sub

est traitée.

Cette procédure contient le code qui doit être exécuté lorsque l'utilisateur clique sur le bouton.

Le bouton peut être sélectionné grâce à un clic de souris, à la touche ENTRÉE ou à la BARRE d'espacement si le bouton a le focus.

VIII-D-4. Créer un bouton Ok ou Cancel

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Parfois, il faut permettre aux utilisateurs de sélectionner un bouton en appuyant sur la touche ENTRÉE même si le bouton n'a pas le focus.

Exemple: Il y a sur la fenêtre un bouton "Ok" qui doit être enfoncé quand l'utilisateur tape 'Enter' au clavier, c'est le bouton qui 'valide' le
questionnaire ( et qui le ferme souvent).

Comment faire?

Définissez la propriété AcceptButton de la Form en lui donnant le nom du bouton.

Cela permet au formulaire d'avoir le comportement d'une boîte de dialogue.

La propriété CancelButton de la Form permet de la même manière de créer un bouton 'Annuler'( qui répond à la touche 'Echap'(ESC).

VIII-D-5. Couleur transparente dans les images des boutons

On a vu qu'on pouvait mettre une image dans un bouton, il faut pour cela donner à la propriété Image le nom du fichier contenant l'image, ceci en
mode Design.

Mais l'image est souvent dans un carré et on voudrait ne pas voir le fond (rendre la couleur du fond transparente)

Voici l'image , je voudrais ne pas afficher le 'jaune' afin de voir ce qu'il y a derrière et donner l'aspect suivant

Dans Visual Basic 6.0, la propriété MaskColor était utilisée pour définir une couleur qui devait devenir transparente, permettant ainsi l'affichage d'une
image d'arrière plan.

Dans Visual Basic Net, il n'existe pas d'équivalent direct de la propriété MaskColor!! Mais il y a 2 ruses pour arriver à ses fins:

- Faire une image GIF avec une couleur 'transparent' autour. Puis la mettre dans le bouton.

- Charger l'image dans le contrôle puis forcer une couleur à devenir transparente:

Dans le " Code généré par le Concepteur Windows Form " après la définition du bouton ou dans Form_Load ajouter:

Dim g As New System.Drawing.Bitmap(Button1.Image)


g.MakeTransparent(System.Drawing.Color.Yellow)
Button1.Image = g

On récupère le Bitmap de l'image du bouton , on indique que le jaune doit être transparent, on remet le BitMap.

Bien sur il y a intérêt à choisir une couleur (toujours la même) qui tranche pour les fonds de dessin et ne pas l'utiliser dans le dessin lui même.

VIII-D-6. Utilisation avancée : Créer de magnifiques boutons à partir de VB2005

On peut créer des boutons avec ses propres images:

Exemple donné par Microsoft:

Pour faire cela il faut créer le dessin, le mettre en fond et paramétrer correctement le bouton.

1-Mettre le dessin dans les ressources:

Aller dans les ressources (ensemble d'éléments,: images, textes, sons.. qui seront incorporés dans le programme.)

(Pour cela double cliquez sur MyProjet dans l'explorateur de solution ou menu 'Projet'=>'Propriétés de..', Onglet 'Ressources')

Dérouler la liste à gauche pour y mettre 'Images' puis cliquer sur 'ajouter une ressource'; on vous demande le nom de la ressource (tapez par
exemple 'button_blue'), vous vous trouvez dans Paint, dessinez (ou collez) l'image de votre bouton. Puis menu 'Fichier'=>'Enregistrer': le dessin
apparaît dans les ressources. Fermez Paint.

2-Mettre ce dessin comme fond du bouton:

MyButton.BackGroundImage= MonProgramme.My.Ressources.Ressources.button_Blue
(ou modifier cette propriété BackGroundImage dans la fenêtre de propriétés à droite)

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

2-Modifier les propriétés du bouton dans la fenêtre de propriétés:

En effet l'image de la ressources n'a pas la même taille que le bouton, de plus le dessin du bouton standard apparaît!!

MyButton.BackGroundImageLayout= Stretch 'met le dessin à la taille du bouton.


MyButton.FlatStyle= Flat 'fait disparaître des éléments du bouton standard.
MyButton.BackColor= Transparent 'Efface le fond du bouton standard.
MyButton.Text= "Importer Image' 'met le texte.

Super, c'est beau!!

On peut aussi en VB 2003 ou VB2005 personnaliser ses boutons.

Un exemple:

Voir dans le chapitre sur les classes, 'Créer un composant', c'est un peu complexe!!

VIII-D-7. Utilisation avancée : Création d'un bouton par code

L'exemple suivant crée un Button nommé Button1 sur lequel on voit "Ok", on modifie certaines de ses propriétés et on l'ajoute à Form.

Private Sub InitializeMonButton()


Dim button1 As New Button1()
button1.Text="Ok"
' Ajouter le bouton à la Form
Controls.Add(button1)
End Sub

Il faut par code créer aussi les évènements liés à ce bouton: dans ce cas il faut déclarer le bouton plutôt avec la syntaxe contenant WithEvents et en
haut du module.

Private WithEvents Button1 As New Button

(dans ce cas on ne remet pas la ligne Dim button1 dans la Sub InitializeMonButton)

Puis écrire la sub évènement.

Sub OnClique ( sender As Objet, EvArg As EventArgs) Handles Button1


End Sub

Ainsi VB sait que pour un évènement sur le Button1, il faut déclencher la Sub OnClique.

(On reviendra sur cela)

VIII-E. Les 'TextBox'

Les contrôles permettant de saisir du texte sont:

Les TextBox

Les RichTextBox

Les MaskedTextBox (VB2005 Framework2)

VIII-E-1. Les contrôles TextBox

Contrôle qui contient du texte qui peut être modifié par l'utilisateur du programme.

C'est la propriété Text qui contient le texte qui a été tapé par l'utilisateur.

Exemple hyper simple: Comment demander son nom à l'utilisateur ?

Il faut créer un label dont la propriété Text contient "Tapez votre nom:", suivi d'un TextBox nommé txtNom avec une propriété Text="" (Ce qui fait
que la TextBox est vide), enfin un bouton nommé btOk dont la propriété Text="Ok".Cela donne:

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

txtNom.Select() dans Form_Load donne le focus à la TextBox.

Une fois que l'utilisateur a tapé son nom, il clique sur le bouton 'Ok':

Dans btOk_Click il y a:

Dim nom As String


nom= txtNom.Text

La variable Nom contient bien maintenant le nom de l'utilisateur.

Un TextBox correspond à un mini éditeur de texte.(Mais sans enrichissement: sans gras, ni italique… du moins pour être exact, l'enrichissement
affecte la totalité du texte et pas seulement une partie) La police de caractères affectant la totalité du texte peut simplement être modifiée par la
propriété Font. La couleur du texte peut être modifiée par ForeColor, mais la totalité du texte aura la même couleur.

La propriété .Text permet aussi de modifier le texte visible dans le contrôle.

TextBox1.Text= "Bonjour" 'Affiche 'Bonjour' dans le contrôle.

VIII-E-1-a. Propriétés

Il y a de multiples propriétés, signalons :

ReadOnly. Quand il a la valeur True, on ne peut pas modifier le texte.

Multiline : autorise ou non l'écriture sur plusieurs lignes.


Scrollbars : fait figurer une barre de défilement horizontale ou verticale (ou les deux)

TextBox1.Multiline = True
TextBox1.ScrollBars = ScrollBars.Both 'ou None, Horizontal, Vertical

Dans ce TextBox multiligne WordWrap=True force le passage à la ligne des mots.

MaxLength : limite le nombre de caractères qu'il est possible de saisir.

TextBox1.MaxLength= 3 'limite la saisie à 3 caractères.

Sa valeur par défaut est 32767.


TextBox1.MaxLength= 0 'ne limite pas la saisie et permet de taper un très long texte.

TextLength donne la longueur du texte.

Un TextBox permet de saisir des mots de passe en affichant à la place des caractères tapés des ronds ou un caractère particulier.

'Affiche des ronds (caractère system)


TextBox1.UseSystemPasswordChar = True
'Affiche des étoiles
TextBox1.PasswordChar = "*"c

En mode MultiLine la collection Lines contient dans chacun de ses éléments une des lignes affichées dans le contrôle:

TexBox1.Lines(0) contient la première ligne

TexBox1.Lines(1) la seconde...

Les TextBox contiennent une méthode Undo: annulation de la dernière modification.

La propriété CanUndo du TextBox doit être à True.


Il existe aussi ClearUndo qui efface les dernieres modifications dans le tampon.

Ensuite pour modifier:

If textBox1.CanUndo = True Then


textBox1.Undo()
' Vider le buffer Undo.
textBox1.ClearUndo()
End If

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Ajouter au texte:

On peut ajouter du texte au texte déjà présent dans le TextBox

textBox2.AppendText(MonText)

C'est équivalent à textBox2.Text=textBox2.Text+MonText

Pour effacer le texte:

TextBox1.Clear()

Evènements liés aux TextBox:

KeyDown survient quand on appuie sur le touche.

KeyPress quand la touche est enfoncée.

KeyUp quand on relâche la touche.

Ils surviennent dans cet ordre.

KeyPress permet de récupérer la touche tapée dans e.KeyChar (le code unicode mais pas les touches de fonction de direction comme CTRL,F1, F2,
flèche haut...).

KeyDown et KeyUp permettent de voir ce qui a été tapé physiquement, le code clavier (dans e.KeyCode) et aussi si MAJ ALT CTRL ont été pressés
(dans e.Shift e.Alt..)

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _


Handles TextBox1.KeyUp
If e.Shift And e.KeyCode= Keys.A Then
MsgBox ("La lettre 'A' a été tapée")
End If
End Sub

On peut récupérer la touche pressée dans KeyPress et depuis VB 2005, on peut modifier e.KeyChar.

Voir exemple plus bas;

Comment récupérer la totalité du texte qui est dans le TextBox?

T= textBox1.Text

Comment mettre les lignes saisies par l'utilisateur dans un tableau ?

Dim tempArray() as String


tempArray = textBox1.Lines 'On utilise la collection Lines

Comment récupérer la première ligne ?

T= textBox1.Lines(0)

Si une partie du texte est sélectionnée par l'utilisateur, on peut la récupérer par:

T= TexBox1.SelectedText

Pour sélectionner une portion de texte on utilise:

TextBox1.SelectionStart=3 'position de départ


TextBox1.SelectionLength=4 'nombre de caractère sélectionné

On peut aussi écrire:

TextBox1.Select(3,4)

puis

TexBox1.SelectedText="toto" 'remplace la sélection par 'toto'

TextBox1.DeselectAll() permet de déselectionner.

TextBox1.SelectAll() permet de tout selectionner.

Comment utiliser le presse-papier?

TextBox1.Cut() 'Coupe le texte sélectionné.


TextBox1.Copy() 'Copie le texte sélectionné.
TextBox1.Paste() 'Colle le texte du presse-papier dans la sélection.

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Comment positionner le curseur après le troisième caractère?

En donnant à la propriété SelectionStart la valeur 3

TextBox1.SelectionStart=3

SelectionLength doit avoir la valeur 0

AcceptsTab et AcceptsReturn permettent d'accepter dans le TextBox l'utilisation de la touche de tabulation et de celle d'entrée au lieu d'agir sur le
formulaire (passage au contrôle suivant et validation du formulaire).

VB 2005 (le Framework 2) apporte de nouvelles facilités:


La propriété ShortCutsEnabled = True permet à l'utilisateur d'ouvrir un menu contextuel avec le click droit; ce menu permet les annuler, couper,
copier, coller, supprimer, Sélectionner tout; ce qui peut aussi être fait avec les raccourcis clavier Shift/Inser Ctrl/Inser..

Il est aussi possible d'aider la saisie de mot.


Exemple: je tape 'tot' le textBox propose 'toto'

pour cela dans la fenêtre de propriétés:


AutoCompletedMode doit prendre la valeur Append ou Suggest à la place de None.
AutoCompletedSource indique ou chercher les lignes de 'suggestion'
AutoCompletedCustomSource est une liste de lignes utilisées.

Ci dessus, dans l'exemple:


AutoCompletedMode= Suggest affiche le mot dessous; Append l'aurait affiché dans le textBox.
AutoCompletedSource= CustomSource indique d'utiliser les mots de AutoCompletedCustomSource
AutoCompletedCustomSource contient la liste des mots (pour les rentrer cliquer sur les '..'.)

VIII-E-1-b. Validation de saisie

C'est un problème très fréquent: l'utilisateur du logiciel doit saisir un certain nombre ou type de caractère (que des chiffres par exemple); il peut
parfois y avoir des caractères interdits; un nombre précis de caractères à saisir..
On va comprendre comment voir quel caractère a été tapé au clavier puis comment l'annuler, le remplacer.

On se souvient que la propriété MaxLength limite le nombre de caractères qu'il est possible de saisir.

TextBox1.MaxLength= 3 'limite la saisie à 3 caractères.

Différentes manières de récupérer ce qui a été tapé:

L'évènement TextBox1_TextChanged se produit dès qu'il y a une modification dans le textbox (frappe d'un caractère mais aussi modification de la
propriété Text), dans la procédure TextBox1_TextChanged on peut utiliser TextBox.text qui contient la totalité du texte.

Quand on tape un caractère au clavier, les évènements suivants se déclenchent (dans l'ordre):

TextBox1_KeyDown() quand on appuie sur la touche.

TextBox1_KeyPress()

TextBox1_KeyUp() quand on relâche la touche.

TextBox1_KeyDown() et TextBox1_KeyUp() retourne le paramètre e dont la propriétée e.KeyCode permet de récupérer la touche qui a été tapée.
Pour tester un caractère on utilise l'énumération Keys.

TextBox1_KeyPress()retourne le paramètre e, sa propriété e.KeyChar permet de récupérer le caractère (en unicode) qui a été tapé.

KeyChar est en lecture/écriture depuis Vb 2005. Mais KeyCode est en lecture seule.

Comment interdire la frappe de certains caractères dans une TextBox?

Exemple 1:

Empecher de saisir le caractère 'A':

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles


TextBox1.KeyPress
If e.KeyChar = "A" Then e.KeyChar = CType("", Char)
End Sub

On aurait pu aussi écrire:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles


TextBox1.KeyPress
If e.KeyChar = "A" Then e.Handler = True
End Sub

e.Handler=True indique que l'évènement KeyPress a été géré, il n'est donc plus géré et le caractère n'est pas affiché.
Ne marche que dans KeyPress.

Exemple 2:
Empecher la saisie de plein de caractères différents:

Private Sub TextBox1_KeyPress


If Not "<>=/*-+".Contains(e.KeyChar) Then e.KeyChar = Nothing
End Sub

Exemple 3:
Ne permettre de saisir que des chiffres.

Pour cela il faut utiliser l'évènement KeyPress du textBox qui retourne un objet e de type KeyPressEventArgs. e.KeyChar contient le caractère pressé.
Pour annuler la frappe (dans notre exemple si le caractère n'est pas un chiffre) il faut faire e.handled=True qui annule la frappe.

IsNumeric permet de tester si le caractère est numérique.

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)


-Handles TextBox1.KeyPress
If IsNumeric(e.KeyChar) Then
e.Handled = False
Else
e.Handled = True
End If
End Sub

Exemple 4:
Ne saisir que des majuscules:

A partir de VB 2005 TextBox1.CharacterCasing = CharacterCasing.Upper permet de ne saisir que des majuscules.

(Numeric qui ne permet de saisir que du numérique fonctionne uniquement en C#!!)

Il existe une énumération nommée 'ControlChars' qui contient quelques touches non imprimables(effacement, entrée...)

Exemple: interdire l'effacement:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles


TextBox1.KeyPress
If e.KeyChar = ControlChars.Back Then e.KeyChar = ControlChars.NullChar
End Sub

Il existe une autre manière simple et élégante de tester si un caractère est numérique, une lettre, un signe de ponctuation, un blanc...

Pour cela on utilise les propriétés Is... de la classe Char:


Exemple: Eliminer les chiffres:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles


TextBox1.KeyPress
If Char.IsNumber(e.KeyChar) = True Then e.Handled = True
End Sub

On peut ainsi tester si la touche est:


IsNumber, IsLetter, IsDigit (chiffre), IsControl, IsLower, IsUpper, IsPunctuation, IsSeparator, IsSymbol, IsWhiteSpace, IsLetterOrDigit

Y a t-il un moyen de modifier le caractère tapé?


Exemple: remplacer une ',' par un '.'
Une solution est de modifier directement le texte:

Exemple: Si l'utilisateur tape ',' afficher '.' à la place.

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _


Handles TextBox1.KeyPress
Dim pos As Integer
pos = TextBox1.SelectionStart 'on mémorise la position du curseur
If e.KeyChar = "," Then
e.Handled = True 'on ne valide pas le caractère ',' qui n'apparaîtra pas.
TextBox1.Text = TextBox1.Text.Insert(pos, ".")'on insère un '.'
TextBox1.SelectionStart = pos + 1 'on avance le curseur d'un caractère
End If
End Sub

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Depuis VB 2005 (Framework 2) y a t-il un moyen plus simple de modifier le caractère tapé?

Dans la Sub KeyPress e.KeyChar est enfin en lecture-écriture.


On intercepte donc la touche frappée, si necessaire on la modifie avant qu'elle apparaisse dans le TextBox:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)


_Handles TextBox3.KeyPress
If e.KeyChar = "," Then e.KeyChar = CType(".", Char)
End Sub

Si on veut voir des touches n'ayant pas de caractères Unicode, il faut utiliser KeyUp ou KeyDown qui retourne e.KeyCode (code de la touche
et non le code Unicode du caractère).

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _


Handles TextBox3.KeyUp
If e.KeyCode = Keys.A Then ...(permet de voir si l'utilisateur a tapé sur la touche A.)
End If

Noter bien que c'est le code de la touche (et pas du caractère), on peut tester Keys.Escape Keys.Back.. avec l'énumérations Keys.

Aussi on peut aussi tester:

e.Alt permet de savoir si la touche Alt est enfoncée.

e.Shift permet de savoir si la touche Shift est enfoncée.

e.Ctrl permet de savoir si la touche Contrôle est enfoncée.

Comme KeyCode est en ReadOnly, on ne peut pas le modifier; si on veut l'annuler, il faut passer par KeyPress et son paramètre e.Handler:

Public Class Form1


'Flag indiquant si la touche doit être supprimée
Dim IsSuppress As Boolean
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles
TextBox1.KeyDown
'Dans KeyDown qui survient avant KeyPress
If e.KeyCode = Keys.Back Then
'Si la touche est 'Back'(effacement) IsSuppress=True
IsSuppress = True
Else
IsSuppress = False
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles
TextBox1.KeyPress
'Si la touche doit être supprimée, on la supprime
If IsSuppress = True Then e.Handled = True
End Sub

Compter combien de fois on a tapé certains caractères?

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _


Handles TextBox1.KeyPress
Select Case e.KeyChar
' Compte les backspaces.
Case ControlChars.Back
Nombrebackspace = Nombrebackspace + 1
' Compte les 'ENTER' .
Case ControlChars.Lf
Nombrereturn = Nombrereturn + 1
' Compte les ESC .
Case Convert.ToChar(27)
NombreEsc = NombreEsc + 1
' Compte les autres.
Case Else
keyPressCount = keyPressCount + 1
End Select
End Sub

Petite parenthèse:

Pour savoir si un caractère à un code unicode précis il y a 2 méthodes:

if e.KeyChar=Convert.ToChar(27) then

ou

if AscW(e.Keychar)=27 then

On peut verifier en quittant le contrôle la validité du texte saisie:

Dans ce cas on utilise la Sub 'Validated' qui est effectuée lorsque l'on va quitter le contrôle TextBox.
Exemple: enlever les blancs pour verifier que le texte contient uniquement les chiffres 0 à 9 et la virgule:
Si le texte n'est pas valide, on efface tout.
On peut coder toutes les opérations mais pourquoi ne pas utiliser un Regex?

Private Sub TextBox1_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Validated


Dim Contenu As String = TextBox1.Text
'*** Enlever les blancs
Contenu = System.Text.RegularExpressions.Regex.Replace(Contenu, "[\s]*", "")
'*** N'accepter que les entiers ou les décimaux avec 3 chiffres derrière la virgule, positifs
Dim pattern As String
pattern = "^(([0-9]+)|(([0-9]+)(,)([0-9]{0,3}))?)$"
If Contenu = System.Text.RegularExpressions.Regex.Match(Contenu, pattern).ToString AndAlso Contenu <> ""

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Then
TextBox1.Text = Contenu
Else
Contenu = ""
TextBox1.Text = ""
TextBox1.Focus()
End If

En quittant le contrôle on veut vérifier si le texte saisi correspond à une date valide:
On pourrait , au cours de la saisie (KeyPress) n'accepter que les chiffres et "/" puis à la sortie du contrôle (dans Validated) tester si c'est un format
Date grâce à un Regex.
Il y a plus simple: on cast le texte en date, si cela 'plante', le texte ne contient pas une date valide.

Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles


TextBox1.Validating
Dim sDate As String = CType(sender, TextBox).Text
Try
'On tente de convertir la String saisie en Date
If sDate <> "" Then sDate = CDate(sDate) 'si la conversion déclenche une exception c'est pas une date
Catch
e.Cancel = True ' on invalide la date
CType(sender, TextBox).Text = "" 'on remets aussi le textbox=""
End Try
MsgBox(sDate)
End Sub

e.Cancel = True invalide la saisie: le focus reste dans la textbox.

VIII-E-2. Le contrôle RichTextBox

Si vous êtes débutant passer à la rubrique suivante, vous reviendrez plus tard à la gestion du code RTF.

Rich Text veut dire 'Texte enrichi'.

Le contrôle RichTextBox permet d'afficher, d'entrer et de manipuler du texte mis en forme. Il effectue les mêmes tâches que le contrôle TextBox,
mais il peut également afficher différentes polices de caractère, des couleurs et des liens, charger du texte et des images incorporées à partir d'un
fichier, ainsi que rechercher des caractères spécifiques. Ce contrôle manipule du texte au format RTF (le contrôle WPF correspondant n'utilise plus le
RTF).

Le contrôle RichTextBox a les possibilités d'un traitement de texte comme Word.

Qu'est ce que RTF?

Le format du texte que l'on peut mettre dans une RichTextBox est le format RTF (Rich Text Format = Format de Texte Enrichi)

Voir dans les annexes 'Format RTF' pour le détails.

Pour utiliser les fonctionnalités du RichTextBox il faut utiliser la propriété .Rtf

Quand j'affecte un texte à la propriété .Text il est affiché tel quel, sans tenir compte de l'enrichissement.

Quand j'affecte un texte à la propriété .Rtf du contrôle pour l'afficher, s'il contient des enrichissements au format RTF , l'enrichissement est affiché :

Comment afficher un texte enrichi?

RichTextBox1.RTF= T 'T étant le texte enrichi

Exemple complet :

"{\rtf1\ansi
{ \colortbl
\red0\green0\blue0;
\red255\green0\blue0;
\red0\green255\blue0;}
{\fonttbl
{\fo\froman Symbol;}
{\f1\fswiss Arial;}
}
Ce qui suit est en \f1 \cf1 \i Arial Rouge Italique \f0 \cf0 \i0

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

} »

Cela donne:

Nb : Si vous voulez copier coller l'exemple pour l'essayer, enlever les sauts à la ligne.

Comment modifier l'aspect du texte qui a été sélectionné ?

On n'est plus dans le cas ou on affiche d'emblée la totalité du texte, mais dans le cas ou l'utilisateur veut modifier son texte qui est déjà dans le
contrôle.

Exemple: L'utilisateur sélectionne une portion du texte dans le contrôle puis clique sur une bouton nommé 'Rouge' pour mettre la sélection en rouge.

Dans BoutonRouge_Click() écrire :

RichTextBox1.SelectionColor = System.Drawing.Color.Red

De même pour modifier la police, la hauteur de la police, l'aspect gras ou non :

RichTextBox1.SelectionFont = New Font("Tahoma", 12, FontStyle.Bold)

Enfin le texte peut être enregistré dans un fichier :

richTextBox1.SaveFile(FileName, RichTextBoxStreamType.RichText)

Si on remplace .RichText par .PlainText c'est le texte brut et non le texte enrichi qui est enregistré

Pour lire un fichier il faut employer .LoadFile avec la même syntaxe.

Comment faire une recherche dans le texte?

La fonction Find permet de rechercher une chaîne de caractères dans le texte :

richTextBox1.Find(searchText, searchStart, searchEnd, RichTextBoxFinds.MatchCase)

La méthode retourne l'emplacement d'index du premier caractère du texte recherché et met en surbrillance ce dernier ; sinon, elle retourne la valeur
-1.

Il peut y avoir des liens hypertexte et on peut interdire la modification enfin il y a les méthodes Undo et Redo sur les dernières modifications. Comme
pour les textbox il y a une collection Lines() qui contient chacune des lignes.

Si MaxLength=0 , la limite du texte est de 64k caractères.

Comment imprimer ce que contient la RichTextBox?

Rien de simple...

Microsoft fourni le code d'un contrôle nommé ExtendedRichTextBox qui hérite de RichTextBox mais qui contient en plus une méthode Print.

Dur, dur pour le trouver sur le net!!

Il est sur le site CodeSource:http://www.codeproject.com/KB/vb/WordProcessingPackage.aspx

Exemple en anglais du code d'un traitement de texte (Word processor) utilisant un ExtendedRichTextBox qui permet l'impression.

Le code en VB du contrôle ExtendedRichTextBox est dans l'exemple.

La Solution RichTextEditor contient le code du contrôle ExtendedRichTextBox et le code de l'application RichTextEditor qui utilise le contrôle.

Il faut charger le projet RichTextEditor , le générer (pour que le contrôle soit 'compilé' ), fermer puis rouvrir le projet.

VIII-E-3. Le contrôle MaskedTextBox (VB Framework 2)

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' à partir de la fenêtre 'Propriétés' :

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

On voit bien dans la fenêtre ci dessus: le masque '00:00' permet de saisir 2 groupes de 2 chiffres. L'utilisateur ne voit que ce qu'il y a dans l'aperçu
'__:__' et est obligé de taper 2 chiffres puis 2 chiffres.

On peut utiliser des masques de la liste (Heure, date, code postal..) 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ées)


9 Chiffre ou espace optionnel. (lettres refusées)
# 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

VIII-F. Les 'Labels'

Il y a 2 sortes de Label:

-Les 'Label'

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

-Les 'LinkLabel'

VIII-F-1. Les labels

On en a déjà utilisé pour afficher du texte non modifiable par l'utilisateur (ce n'est donc pas une zone de saisie pour l'utilisateur du logiciel).

Les contrôles Label sont généralement utilisés pour fournir un texte descriptif à un contrôle. Vous pouvez par exemple utiliser un contrôle Label pour
ajouter un texte descriptif à un contrôle TextBox. Ceci a pour but d'informer l'utilisateur du type de donnée attendu dans le contrôle.

Exemple hyper simple: Comment indiquer à l'utilisateur qu'il faut saisir son nom?

Devant le TextBox permettant la saisie du nom, on ajoute un 'Label' qui affiche 'Donner votre nom:'.

La légende qui s'affiche dans l'étiquette est contenue dans la propriété Text du label.

Après avoir déposé le 'Label' sur le formulaire, on peut modifier le texte affiché à partir de la fenêtre de propriétés, en passant par la propriété
'Text':

On peut aussi mettre la propriété ForeColor à Red pour que le texte du label soit en rouge.

Pour modifier le texte du label1 par du code:

Label1.Text="Donner votre Prénom"

La propriété Alignement vous permet de définir l'alignement du texte dans l'étiquette (centré, à droite, à gauche), BorderStyle permet de mettre
une bordure (un tour) ou non..

Label1.Text="Label avec une bordure et un fond jaune"


Label1.BorderStyle=BorderStyle.FixedSingle
Label1.ForeColor=Color.Red
Label2.BackColor=Color.Yellow

donne:

Remarque: la plupart du temps les labels sont modifiés en mode design, directement dans la fenêtre des propriétés.

Il est également possible d'y afficher une image avec la propriété .Image

La propriété AutoSize =True, autorise le contrôle à se redimensionner pour afficher la totalité du texte.

Remarque sur la mise à jour de l'affichage:

La mise à jour de l'affichage du Label (comme les autres contrôles d'ailleurs) est effectuée en fin de Sub:

Si on écrit:

Dim i As Integer
For i = 0 To 100
Label1.Text = i.ToString
Next i

La variable i prend les valeurs 1 à 100, mais à l'affichage rien ne se passe pendant la boucle, VB affiche uniquement 100 à la fin; si on désire voir les
chiffres défiler avec affichage de 0 puis 1 puis 2... il faut rafraîchir l'affichage à chaque boucle avec la méthode Refresh():

Dim i As Integer
For i = 0 To 100
Label1.Text = i.ToString: Label1.Refresh()
Next i

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

Une alternative est de mettre un Application.DoEvents() qui donne à Windows le temps de traiter les messages et de rafraîchir l'affichage.

VIII-F-2. Les LinkLabel

Permettent de créer un lien sur un label

Text Indique le texte qui apparaît.

LinkArea définit la zone de texte qui agira comme un lien; dans la fenêtre de propriété taper 11 ;4 (on verra que c'est plus simple que de le faire par
code)

Les 4 caractères à partir du 11ème seront le lien, ils seront soulignés. Ne pas oublier comme toujours que le premier caractère est le caractère 0.

L'événement LinkClicked est déclenché quand l'utilisateur clique sur le lien. Dans cette procédure on peut permettre le saut vers un site Internet par
exemple ou toute autre action.

Exemple :

LinkLabel1.text= "Visitez le site LDF"


LinkLabel1.LinkArea = New System.Windows.Forms.LinkArea(11, 4)

'Pourquoi faire simple !!

Cela affiche un lien hypertext sur le mot 'site'.

Si l'utilisateur clique sur le mot 'site', la procédure suivante est déclenchée :

Private Sub LinkLabel1.LinkClicked…


End Sub

Il est possible de modifier la couleur du lien pour indiquer qu'il a été utilisé:

Si VisitedLinkColor contient une couleur e.visited=True modifie la couleur.

(e est l'élément qui a envoyé l'évènement, j'en modifie la propriété Visited.)

On peut y inclure une action quelconque, en particulier un saut vers un site Web:

System.diagnostics.Process.Start(" http://plasserre.developpez.com/ ")

'correspond au code qui ouvre un browser Internet (Internet Explorer ...) et qui charge la page dont l'adresse est indiquée.

La collection Links permet d'afficher plusieurs liens dans un même texte, mais cela devient vite très compliqué.

VIII-G. Les cases à cocher

Il y a 2 sortes de case à cocher:

-Les CheckBox.

-Les RadioButton.

Les " cases à cocher " (CheckBox): Elles sont carrées, et indépendantes les unes des autres, si l'utilisateur coche une case , cela n'a pas d'influence
sur les autres cases du formulaire, qu'elles soient regroupées dans un cadre pour faire plus joli ou non.
Les " boutons radio " (RadioButton): Ils sont ronds et font toujours partie d'un groupe (Ils sont dans une fenêtre ou dessinés dans un objet
GroupBox ). Ce groupe est indispensable, car au sein d'un groupe de RadioButton, un seul bouton peut être coché à la fois : si l'utilisateur en coche
un, les autres se décochent.

Il faut regrouper les radios boutons dans des 'GroupBox' par exemple pour rendre les groupes indépendants:

Ici si je clique sur le bouton 'OUI' à droite, cela décoche 'NON' mais n'a pas d'influence sur le cadre Format

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]
Cours VB.NET

La propriété Text, bien sur, permet d'afficher le libellé à coté du bouton, on peut aussi mettre une image avec la propriété Image. CheckAlign permet
de mettre la case à cocher à droite ou à gauche du texte, TextAlign permet d'aligner le texte.

Exemple pour le bouton en haut à droite.

RadioButton3.Text="OUI"
RadioButton3.TextAlign= MiddleCenter 'Middle=hauteur, center = horizontale
RadioButton3.CheckAlign=MiddleRight

La propriété la plus intéressante de ces cases est celle qui nous permet de savoir si elle est cochée ou non et de modifier son état. Cette propriété
s'appelle Checked. Sa valeur change de False à True si la case est cochée.

RadioButton.Checked=True 'Coche le bouton

If RadioButton.Checked=True Then ' Teste si le bouton est coché.


End If

La procédure RadioButton.CheckedChange() permet d'intercepter le changement d'état d'un bouton.

Voici la procédure:

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


_Handles RadioButton1.CheckedChanged
End Sub

Pour le CheckButton ThreeState=True permet de définir 3 états au lieu de 2 (coché, indéterminé=grisé, non coché)

CheckedState indique dans ce cas un des 3 états (Checked, Unchecked, Indeterminate) (alors que Checked n'en indique que deux.)

Appearance peut aussi donner une apparence de bouton à la case à cocher. Il est enfoncé ou pas en fonction de la valeur de Checked.

Ici les 2 boutons ont une Appearance=Button , celui du haut n'est pas coché, l'autre est coché (enfoncé).

Autocheck = True par défaut: quand on clique, l'état change automatiquement. Si AutoCheck= False il faut gérer soi même le changement d'état
avec Checked.

Précédent Sommaire Suivant Version PDF (Miroir) Version hors-ligne (Miroir)

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

Responsables bénévoles de la rubrique VB.NET : Jérôme Lambert - Philippe Vialatte - Contacter par email

Vos questions techniques : forum d'entraide VB.NET - Publiez vos articles, tutoriels et
cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs
francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2011 www.developpez.com -
Legal informations.

http://plasserre.developpez.com/cours/vb-net/?page=ui-winforms2[30/03/2011 23:58:30]

Vous aimerez peut-être aussi