Un meilleur job mieux payé ?

Deviens chef de projet, développeur, ingénieur, informaticien

Mets à jour ton profil pro

ça m'intéresse

Cours VB.NET

Image non disponible


précédentsommairesuivant

VIII-D. Les 'Boutons'

Image non disponible

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.

Image non disponible

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:

Image non disponible

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

Image non disponible

En vb2005:

Image non disponible

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.

Image non disponible

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:

 
Sélectionnez

Buttom1.AutoEllipsis= True
Image non disponible

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:

 
Sélectionnez

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

 
Sélectionnez

 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

 
Sélectionnez

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 Image non disponible, je voudrais ne pas afficher le 'jaune' afin de voir ce qu'il y a derrière et donner l'aspect suivant Image non disponible

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:

 
Sélectionnez

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: Image non disponible

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.

Image non disponible

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

 
Sélectionnez

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:

Image non disponible

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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'

Image non disponible

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:

Image non disponible

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:

 
Sélectionnez

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.

Image non disponible

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

 
Sélectionnez

 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)

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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

 
Sélectionnez

If textBox1.CanUndo = True Then
textBox1.Undo()
' Vider le buffer Undo.
textBox1.ClearUndo()
End If

Ajouter au texte:

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

 
Sélectionnez

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

 
Sélectionnez

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 ?

 
Sélectionnez

Dim tempArray() as String

tempArray = textBox1.Lines     'On utilise la collection Lines

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

 
Sélectionnez

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:

 
Sélectionnez

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.

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

Image non disponible

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.

 
Sélectionnez

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

 
Sélectionnez

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:

 
Sélectionnez

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:

 
Sélectionnez

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.

 
Sélectionnez

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:

 
Sélectionnez

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:

 
Sélectionnez

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.

 
Sélectionnez

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

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:

 
Sélectionnez

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

 
Sélectionnez

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:

 
Sélectionnez

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?

 
Sélectionnez

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?

 
Sélectionnez

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

 
Sélectionnez

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.

Image non disponible

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?

 
Sélectionnez

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

Exemple complet :

 
Sélectionnez

"{\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:

Image non disponible

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 :

 
Sélectionnez

RichTextBox1.SelectionColor = System.Drawing.Color.Red

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

 
Sélectionnez

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

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

 
Sélectionnez

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.

Image non disponible

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

Image non disponible

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:

 
Sélectionnez

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.&#8220;\\&#8221; 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.

 
Sélectionnez

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

 
Sélectionnez

Private Sub MaTextBox_TextChanged(sender As Object, _ 
  e As EventArgs) Handles MaTextBox.TextChanged
End Sub 

VIII-F. Les 'Labels'

Image non disponible

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

Image non disponible

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

 
Sélectionnez

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

Label1.BorderStyle=BorderStyle.FixedSingle

Label1.ForeColor=Color.Red

Label2.BackColor=Color.Yellow

donne:

Image non disponible

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:

 
Sélectionnez

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():

 
Sélectionnez

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 :

 
Sélectionnez

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 :

 
Sélectionnez

Private Sub LinkLabel1.LinkClicked&#8230;

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

Image non disponible

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.
Image non disponible

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

Image non disponible

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.

 
Sélectionnez

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

 
Sélectionnez

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:

 
Sélectionnez

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.

Image non disponible

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

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

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © . Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.