|
Site |
Cours VB.net |
|
|
|
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.KeyPressIf IsNumeric(e.KeyChar) Then
e.Handled =
False Elsee.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 Integerpos = TextBox1.SelectionStart 'on mémorise la position du curseur
If e.KeyChar = "," Thene.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:
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 TextChangedPrivate Sub MaTextBox_TextChanged(sender As Object, _ e As EventArgs) Handles MaTextBox.TextChanged End Sub
|
|
|
|
|