Newsletter Developpez.com

Inscrivez-vous gratuitement au Club pour recevoir
la newsletter hebdomadaire des développeurs et IT pro

FAQ VB.NETConsultez toutes les FAQ

Nombre d'auteurs : 36, nombre de questions : 239, dernière mise à jour : 24 mai 2015  Ajouter une question

 

Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées sur le forum Développement DotNET

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle contient sont correctes. Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.

Sur ce, je vous souhaite une bonne lecture.


SommaireWinForms Textbox (5)
précédent sommaire suivant
 

On se sert des événements de touches. Ils se produisent lorsque le TextBox a le focus dans l'ordre suivant

  • KeyDown : Une touche a été enfoncée ;
  • KeyPress : Déclenché si la touche enfoncée représente un caractère. (Il n'est pas déclenché pour les touches F1, F2 par exemple) ;
  • KeyUp : Une touche a été relâchée.

Voici un exemple d'utilisation :
  • Créer un projet WinForm C# ;
  • Ajouter deux TextBox à la form principale de votre projet ;
  • Le code suivant utilise une form nommée Form1, et deux TextBox nommés textBox1 et textBox2 ;
  • Toutes les touches frappées sur le textBox1 se répercutent sur textBox2 ;
  • Compiler et lancer le projet, puis entrer des données dans textBox1.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
'KeyPress Handler 
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _ 
    Handles TextBox1.KeyPress 
  
    ' On affiche tous les caractères imprimables 
    If Not Char.IsControl(e.KeyChar) Then 
        TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + _ 
        e.KeyChar.ToString + _ 
        TextBox1.Text.Substring(TextBox1.SelectionStart + _ 
        TextBox1.SelectionLength) 
    End If 
  
End Sub 
  
' KeyDown Handler 
Private Sub textBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _ 
    Handles TextBox1.KeyDown 
  
    ' Gestion Touche Back 
    If e.KeyCode = Keys.Back AndAlso TextBox1.Text.Length > 0 Then 
  
        'Suppression sélection 
        If TextBox1.SelectionLength > 0 Then 
            TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + _ 
            TextBox1.Text.Substring(TextBox1.SelectionStart + _ 
            TextBox1.SelectionLength) 
        ElseIf TextBox1.SelectionStart > 0 Then 
            ' Suppression caractère précédant le curseur 
            If TextBox1.SelectionStart = TextBox1.Text.Length Then 
                TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1) 
            Else 
                TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart - 1) + _ 
                TextBox1.Text.Substring(TextBox1.SelectionStart + _ 
                TextBox1.SelectionLength) 
            End If 
        End If 
  
        ' Touche Delete (suppr) 
    ElseIf e.KeyCode = Keys.Delete AndAlso TextBox1.Text.Length > 0 Then 
  
        ' Le curseur est en fin de chaîne 
        If TextBox1.SelectionStart = TextBox1.Text.Length Then 
            ' Suppression dernier caractère par Shift+Del 
            If e.Shift Then 
                TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1) 
            End If 
        Else 
            ' On prend tous les caractères à gauche du curseur 
            TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) 
            If Not (TextBox1.SelectionLength = 0) Then 
                'Suppression de la selection 
                TextBox2.AppendText(TextBox1.Text.Substring(TextBox1.SelectionStart + TextBox1.SelectionLength)) 
            Else 
                ' Si la touche control est enfoncée, tous les caractères 
                ' à droite du curseur seront supprimés. Sinon on en supprime 
                'un seul 
                If Not e.Control Then 
                    TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + _ 
                    TextBox1.Text.Substring(TextBox1.SelectionStart + 1) 
                End If 
            End If 
        End If 
  
        ' Coller (Ctrl+V) ou (Shift+insert) 
    ElseIf (e.Shift AndAlso e.KeyCode = Keys.Insert) OrElse (e.Control AndAlso e.KeyCode = Keys.V) Then 
  
        ' Données dans presse papier 
        Dim cpdata As IDataObject = Clipboard.GetDataObject 
        ' Test si cpdata contient du texte 
        If Not (cpdata Is Nothing) AndAlso cpdata.GetDataPresent(String.Empty.GetType) Then 
            Dim data As String = cpdata.GetData(String.Empty.GetType).ToString 
            Dim print As Boolean = False 
            ' Gestion caractères non imprimables (comme les tabulations par exemple) 
            For i As Integer = 0 To data.Length - 1 
                If Char.IsControl(data, i) AndAlso print Then 
                    data = data.Substring(0, i) 
                    Exit For 
                ElseIf Not Char.IsControl(data, i) AndAlso Not print Then 
                        print = True 
                End If 
                System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1) 
            Next 
            TextBox2.Text = TextBox1.Text.Substring(0, TextBox1.SelectionStart) + _ 
            data + _ 
            TextBox1.Text.Substring(TextBox1.SelectionStart + TextBox1.SelectionLength) 
        End If 
  
    End If 
  
End Sub

Mis à jour le 30 octobre 2013 abelman

On se sert de l'événement KeyPress pour intercepter les caractères entrés dans le TextBox.
La propriété Handle de la classe KeyPressEventArgs indique à l'application ce qu'il faut faire du caractère intercepté.

  • Si elle vaut false, le traitement par défaut du caractère (l'affichage pour les caractères imprimables) est appliqué.
  • Si elle vaut true, c'est votre code qui décide ce qu'il faut faire du caractère. Si vous ne faites rien, il ne sera pas affiché.
  • Sa valeur par défaut est false.

Exemple simple

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _ 
    Handles TextBox1.KeyPress 
  
    If Not Char.IsDigit(e.KeyChar) Then 
        ' Tous les caractères non numériques ne sont pas traités sur le TextBox. 
        e.Handled = True 
    End If 
  
End Sub
Remarquez qu'avec ce code, des touches générant un caractère non imprimable (comme la touche BACK) n'auront aucun effet sur le textbox.
Si vous voulez faire un véritable contrôle TexBox numérique, vous devez en tenir compte, gérer le copier-coller CTRL+C et SHIFT+INS avec l'événement KeyDown, et aussi avec le clic droit (menu contextuel coller) sur la souris.

Mis à jour le 30 octobre 2013 abelman

Il vous faut itérer les contrôles présents sur le formulaire et tester s'ils sont de type TextBox.

Code vb.net : Sélectionner tout
1
2
3
For Each (Dim c As Control in Me.Controls) 
    If (TypeOf(c) Is TextBox) Then c.Enabled = False 
Next

Mis à jour le 30 octobre 2013 Ditch

Pour lire le contenu d'une TextBox ligne par ligne, veuillez utiliser un « $For Each » sur la propriété « $Lines » de votre TextBox.

Code vb.net : Sélectionner tout
1
2
3
For Each line As String In TextBox1.Lines 
    MsgBox(line) 
Next line

Mis à jour le 30 octobre 2013 troxsa

Quand on rajoute du texte à un textbox multiligne avec, par exemple :

Code vb.net : Sélectionner tout
1
2
3
4
5
Dim i As Integer 
  
For i = 1 To 100 
     TextBox1.Text = "abc" + Convert.ToString(i) + Environment.NewLine 
Next
le texte s'ajoute bien, mais pour peu que la longueur du texte dépasse la zone visible, on ne voit pas la fin du texte comme il est souvent d'usage.
Pour y remédier, on peut utiliser ces deux lignes de code pour renvoyer le curseur à la fin et provoquer le défilement jusqu'à celui-ci.

Code vb.net : Sélectionner tout
1
2
TextBox1.SelectionStart = TextBox1.TextLength 
TextBox1.ScrollToCaret()
On peut aussi envisager de mettre le focus sur le textbox si besoin :

Code vb.net : Sélectionner tout
TextBox1.Focus();

Mis à jour le 30 octobre 2013 nico-pyright(c)

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -