Cours VB.NETDate de mise à jour : 05/12/2010
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.
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.
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
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)
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
MyButton. FlatStyle = Flat
MyButton. BackColor = Transparent
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 "
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:
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.
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
|
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.
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.
TextBox1. UseSystemPasswordChar = True
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 ()
textBox1. ClearUndo ()
End If
|
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
|
Comment récupérer la première ligne ?
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
TextBox1. SelectionLength = 4
|
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.
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.
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':
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
If e. KeyChar = " , " Then
e. Handled = True
TextBox1. Text = TextBox1. Text . Insert (pos, " . " )
TextBox1. SelectionStart = pos + 1
End If
End Sub
|
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
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
Dim IsSuppress As Boolean
Private Sub TextBox1_KeyDown (ByVal sender As Object, ByVal e As System. Windows . Forms . KeyEventArgs ) Handles TextBox1. KeyDown
If e. KeyCode = Keys. Back Then
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
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
Case ControlChars. Back
Nombrebackspace = Nombrebackspace + 1
Case ControlChars. Lf
Nombrereturn = Nombrereturn + 1
Case Convert. ToChar (27)
NombreEsc = NombreEsc + 1
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
Contenu = System. Text . RegularExpressions . Regex . Replace (Contenu, " [\s]* " , " " )
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 < > " " 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
If sDate < > " " Then sDate = CDate (sDate)
Catch
e. Cancel = True
CType (sender, TextBox). Text = " "
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?
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
} »
|
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' :
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'
-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
|
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
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
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
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.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources 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.
|