Comment créer une TextBox numérique ?Plusieurs solutions existent pour n'autoriser que la saisie de nombres dans un TextBox. La première consiste à vérifier à la validation (c'est par exemple le cas lorsque le focus quitte le contrôle) si la valeur entrée est exacte. Voici un bout de code l'illustrant : Private Sub TextBox_Validate(Cancel As Boolean) Cette méthode permet d'ailleurs de vérifier la validité de n'importe quel contenu, numérique ou pas. Une seconde solution consiste à intercepter les frappes au clavier et d'accepter ou non le caractère qui va être entré dans la zone de texte : Private Sub TextBox_KeyPress(KeyAscii As Integer) Cette seconde technique s'avère pratique pour n'autoriser que la saisie de nombres entiers. Cependant, lorsque la validation est moins simple, sa mise en oeuvre peut facilement devenir complexe. Par exemple, dans le cas de nombres décimaux, lorsque l'utilisateur entre une virgule, il faut s'assurer que celle-ci n'a pas déjà été entrée. De plus, l'utilisateur a toujours la possibilité de "coller" du texte sans qu'une seule vérification ne soit réalisée sur le contenu. Pour éviter cela, on peut "sous-classer" le contrôle afin d'intercepter les opérations du presse-papier. Voici le code à employer permettant de sous-classer autant de contrôles que l'on veut : Code à transcrire dans un module : Option Explicit Code à transcrire dans une feuille : Option Explicit Vous trouverez aussi un exemple de sous-classement destiné à intercepter les messages WM_PASTE sur vbVision : LimitEdit Demo. Attention, si vous terminez votre programme en cliquant sur le bouton "End" (Fin), vous ferez planter VB (à moins de disposer d'une DLL de gestion du sous-classement idoine). Quand on sous-classe un contrôle, il faut toujours terminer son programme en cliquant sur la croix du formulaire principal. Une troisième solution consiste à vérifier, après la frappe, le texte entré : Private Sub Text1_Change() Cette méthode présente de nombreux désavantages. Notamment, si l'utilisateur appuie par erreur sur la mauvaise touche, il se peut qu'une partie de la valeur introduite soit perdue, le forçant à recommencer la saisie du nombre. De plus, la remise à 0 du texte déclenche à nouveau l'événement Change, ce qui doit être pris en considération si pour des traitements plus complexes, afin d'éviter la répétition du code. Une quatrième méthode consiste à changer le style du contrôle via une API. Il existe en effet un style (ES_NUMBER) qui n'autorise que la saisie de nombres pour une zone de texte : Option Explicit Malheureusement, ce style n'accepte que les nombres entiers et n'empêche pas l'utilisateur a de "coller" du texte sans vérification. Il faudra donc mettre en place la technique de sous-classement évoquée ci-dessus. Enfin une dernière méthode serait d'employer un contrôle "MaskedEditBox" qui permet de spécifier un masque de saisie pour les données à entrer. Mais ce contrôle n'est pas toujours facile à manipuler et est assez buggé. Cette méthode est donc à déconseiller. Pour conclure, quelle que soit la méthode choisie, sachez qu'il vaut toujours mieux vérifier une dernière fois les données avant de les sauvegarder définitivement. Voir aussi : |
Date de publication : 16 septembre 2002 Dernière modification : 13 septembre 2007 Rubriques : Contrôles Mots-clés : TextBox, text, caractères, saisies, numérique, nombre, chiffre, numéro |