Cette réponse est une première approche, qui suppose que tu débutes et aussi que tu ne fera cela que pour un seul formulaire.
Bon supposons qu'au départ, il y a déjà plusieurs Textbox sur ton formulaire, et si ça n'est pas le cas, ça va quand même servir pour la suite.
Dans mon exemple, il y en a 3
On serait tenté de faire ça
Public Class Form6
'Note que j'ai corrigé le code pour coller à ce que je t'ai dit plus haut.
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
Dim num() As Char = {"0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c}
If Not num.Contains(e.KeyChar) And Not e.KeyChar = Convert.ToChar(8) Then
e.Handled = True
End If
End Sub
Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
Dim num() As Char = {"0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c}
If Not num.Contains(e.KeyChar) And Not e.KeyChar = Convert.ToChar(8) Then
e.Handled = True
End If
End Sub
Private Sub TextBox3_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox3.KeyPress
Dim num() As Char = {"0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c}
If Not num.Contains(e.KeyChar) And Not e.KeyChar = Convert.ToChar(8) Then
e.Handled = True
End If
End Sub
End Class
C'est une erreur, en effet, si tu dois modifier le code (autoriser la virgule par exemple), et bien tu dois le faire autant de fois que tu as multiplié le code.
Un principe de base en programmation, c'est que dès que l'on doit écrire 2 fois la même chose, il faut essayer au maximum de factoriser le code (1 code pour plusieurs utilisations).
Première étape, écrire une méthode qui fait ce que l'on veut, dans mon exemple, on l'ai déjà 3 fois, je me contente, d'en renommer une et de supprimer les 2 autres
Public Class Form6
Private Sub JusteLesNombres_KeyPress(sender As Object, e As KeyPressEventArgs)'j'ai aussi supprimé la fin de la ligne
Dim num() As Char = {"0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c}
If Not num.Contains(e.KeyChar) And Not e.KeyChar = Convert.ToChar(8) Then
e.Handled = True
End If
End Sub
End Class
Ensuite dans le mode design, je vais associer les keypress de chaque TextBox à cette méthode
Une fois fait, mes 3 textbox agissent comme je le souhaite avec un seul code.
Si tu le savais déjà, c'est de la révision ;).
Ce que je viens de faire s'appelle abonner une méthode déléguée à un évènement.
Pour que ça marche, Visual Studio est aller écrire pour nous le code d'abonnement dans le code behind
Private Sub JusteLesNombres_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox3.KeyPress, TextBox2.KeyPress
Le mot clé Handles
indique que la méthode est abonnée au évènements dont la liste suit TextBox1.KeyPress, TextBox3.KeyPress, TextBox2.KeyPress
Quand on ajoute des textbox par le code, c'est ce mécanisme qu'il faut reproduire.
Dim tb As New TextBox
tb.Location = New Point(200, 50)
tb.Name = "nb1"
Me.Controls.Add(tb)
AddHandler tb.KeyPress, AddressOf JusteLesNombres_KeyPress 'c'est là