Site:  Cours VB.net  
3.4 Les TextBox .

Les contrôles permettant de saisir du texte sont:

    Les TextBox

    Les RichTextBox

    Les MaskedTextBox (VB2005 Framework2)

 

Les contrôles  TextBox.

Contrôle qui permet de taper 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.

 TextBox1.text= "Bonjour" ‘Affiche "Bonjour" dans le contrôle.

 

Parmi les multiples propriétés de ce contrôle, signalons :

Multiline : autorise ou non l’écriture sur plusieurs lignes.
Scrollbars : fait figurer une barre de défilement horizontale ou verticale (ou les deux)
PaswordChar : crypte le texte entré sous forme d’étoiles.
MaxLength : limite le nombre de caractères qu’il est possible de saisir.

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

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

TextLength donne la longueur du texte

 

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

En mode MultiLine on peut accepter ou non d'inclure dans le texte les tabulation (propriété AcceptTab) ou les retours à la ligne (propriété AcceptReturn)

 

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

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

Ensuite pour modifier:

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

Il existe aussi Redo (Faux!!).

 

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 saisir un mot de passe:

TextBox1.PassWord = true
Ainsi il apparaît des *** au lieu des caractères tapés.

 

Pour ne saisir que des majuscules: 

TextBox1.CharacterCasing = CharacterCasing.Upper

 

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

 

 

On peut récupérer la touche pressée, mais impossible d'en modifier la valeur en VB 2003(e.KeyChar est en lecture seule), par contre en 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)

 

TextBox1.GetFirstCharIndexOfCurrentLine retourne la position du premier caractère de la ligne courante.

(le premier caractère est à la position 0 et on compte des retour à la ligne comme 1 caractère)

TextBox1.GetFirstCharIndexFromLine(2) retourne l'index  du premier caractère de la ligne 2.

TextBox1.GetCharFromPosition(New Point(10.1)) retourne le caractère coordonnée 10,1

 

Pour sélectionner une portion de texte par code 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'

TexBox1.SelectAll 'sélectionne la totalité du texte.

TexBox1.DESelectAll 'désélectionne la totalité du texte. (SelectionLength=0)

 

Si l'utilisateur sélectionne une partie du texte, elle est dans TextBox1.SelectedText 

 

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

 

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

Exemple:

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é, mais il est en lecture seule!! on ne peut le modifier. Pour annuler la frappe (dans notre exemple si le caractère n'est pas un chiffre) il faut faire e.handled=True

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

 

 

En VB 2005 TextBox1.CharacterCasing = CharacterCasing.Upper  permet de saisir que des majuscules.

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

 

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 comparer les caractères il y a 2 méthodes:

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

ou

 if AscW(e.Keychar)=27 then

 

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

e.KeyChar permet de récupérer le caractère qui à été tapé (le caractère UNICODE).

(on peut facilement le tester avec les fonctions traitant des caractères: IsDigit par exemple pour voir s'il est numérique, ou tester son code Ascii ou plutôt unicode)

 

if AscW(e.Keychar)=27 then

TextBox1_KeyPress()retourne le paramètre e  

e.KeyCode permet de récupérer le code clavier qui à été tapé. Pour tester une caractère on utilise l'énumération Keys:

If e.KeyCode = Keys.A Then (permet devoir 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..

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.

KeyChar et KeyCode sont en lecture seule en 2003, on ne peut donc pas les modifier!! (en 2005 on le peut)

 

 

En VB 2003, y a t-il un moyen de modifier le caractère tapé?  les propriétés de e comme e.KeyChar (dans KeyPress) ou e.KeyCode, e.KeyData e.KeyValue dans les évènements KeyPress et KeyDown sont en lecture seule!!!

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

 

 

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

 

e.KeyChar est enfin en lecture-écriture.

Pour transformer un caractère tapé au clavier, c'est simple:

 

Exemple:

Quand l'utilisateur tape ',' , afficher '.'.

 

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

 

 

VB (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 '..'.)

 

 

 

 

Le contrôle RichTextBox :

 

Si vous êtes débutant passer à un 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 des polices, 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.

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  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 enrichissement au format RTF , l’enrichissement est affiché :

Comment afficher un texte enrichi?

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

 

Exemple complet de texte RTF:

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

 

Autres:

RichTextBox1.ZoomFactor permet de modifier la taille du  texte  (normal= 1)

Undo et Redo sont possible si CanUndo à la valeur True.

Copy, Cut, Paste fonctionnent comme beaucoup de propriétés communes à TextBox et RichTextBox.

 

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:

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. 

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

 

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és)
9 Chiffre ou espace optionnel. (lettres refusés)
# Chiffre ou espace optionnel. (+) (-) sont permis.
L Lettre requise. (chiffres refusés)
? Lettre requise optionnelle. (chiffres refusés)
& Caractère requis.(Chiffres et lettres permises) 
C Caractère, requis optionnel.(Chiffres et lettres permises %*& permis)
A Alphanumérique requis opt.(Chiffres et lettres permises %*& refusés)
. Point Decimal; celui de la culture.
, Séparateur de millier; celui de la culture.
: Séparateur de temps; celui de la culture.
/ Séparateur de date; celui de la culture.
$ Symbole monétaire; celui de la culture.
< Convertir les caractères qui suivent en minuscule.
> Convertir les caractères qui suivent en majuscule.
| Stop la conversion minuscule ou majuscule.
\ Escape. Le caractère qui suit devient un littéral.“\\” affichera '\'.
Autres caractères Littéraux. Affichés tels quels

Exemple:

"00/00/0000" permet de saisir une date.

"LLL"   permet de saisir trois lettres (pas des chiffres)

/ $ , : sont dépendant de la culture en cours:

Si le Mask="0$"  il apparaîtra "_€" en culture française.

On peut modifier cela par FormatProvider property.

MaskCompleted indique si la saisie est conforme.

Dim returnValue As Boolean
returnValue = maskedTextBox1.MaskCompleted

 

MaskedTextBox1.text permet de lire le contenu du texte.

L'évènement le plus souvent utilisé est TextChanged
Private Sub MaTextBox_TextChanged(sender As Object, _ 
  e As EventArgs) Handles MaTextBox.TextChanged
End Sub