Question

Est-ce que quelqu'un sait pourquoi Microsoft n'envoie pas de zone de texte numérique avec son framework .NET, par exemple. une zone de texte qui garantirait que les caractères entrés sont toujours un nombre valide? C'est quelque chose qui est couramment utilisé dans les applications de différentes saveurs et bien quelque chose que la plupart des bibliothèques d'interface graphique (enfin, celles que je connais) fournissent d'une certaine manière. Bien que ce ne soit pas difficile d’écrire le vôtre, ce n’est pas anodin non plus.

Alors, je voudrais savoir si quelqu'un peut rationaliser cette omission.

edit: Merci pour les suggestions. Alors que les zones de texte masquées et les haut-bas numériques ont leur place; Je suis intéressé par un contrôle qui ressemble à une zone de texte mais effectue automatiquement une validation lorsque vous appuyez sur une touche pour que l’entrée corresponde à un nombre valide. Dans mon expérience (certes limitée), c'est quelque chose qui est assez utilisé (nous ne voulons pas toujours les contraintes statiques imposées par les zones de texte masquées, tout comme nous ne voulons pas toujours les contrôles de haut en bas sur le côté) .

Il existe de nombreuses implémentations avec différents degrés de qualité sur le net et il existe même un exemple de cela sur MSDN .

edit2: Merci les gars, il semble que le contrôle numérique haut-bas soit le contrôle .NET à utiliser uniquement pour la saisie numérique (et la raison pour laquelle nous n’avons pas réellement de contrôle de zone de texte numérique explicite). Cela aurait été formidable de ne pas autoriser automatiquement la saisie de caractères non numériques (sur les touches du clavier, de la pâte, etc.), mais je suppose que c'est suffisant qu'il effectue la validation lorsque le contrôle perd le focus. Et, on pourrait faire la pression sur la touche, sur la validation de la pâte si on était vraiment désireux ...

Était-ce utile?

La solution

J'appuie également la recommandation de Garry Shutlers d'utiliser NumericUpDown. Vous n’aimerez peut-être pas les commandes haut-bas, mais est l’apparence standard d’un contrôle d’entrée numérique dans Windows, et vous devriez réfléchir à deux fois avant d’utiliser une apparence différente.

Si vous finissez par coder votre propre implémentation (ou en trouver une sur le Web), vous devrez faire face à quelques pièges. Rappelez-vous qu’une valeur peut entrer dans un contrôle en plus des touches du clavier. Celui de votre lien sur MSDN ne remplace même pas le collage, vous pouvez donc facilement insérer une chaîne non numérique dans le contrôle.

Autres conseils

Vous pouvez utiliser un MaskedTextBox .

Il existe le contrôle NumericUpDown . qui est fait spécifiquement pour la saisie de nombres et peut être utilisé comme un TextBox.

À partir de WinForms 2.0, vous avez un MaskedTextBox. Vous pouvez définir le masque comme bon vous semble, c’est-à-dire que pour les nombres, utilisez le masque tous les 0.

Il est curieux que certains contrôles .NET Framework n'exposent pas toutes les fonctionnalités du contrôle Windows sous-jacent qu’ils recouvrent. Dans ce cas, pour une raison quelconque, le style ES_NUMBER n'a pas été implémenté.

Vous pouvez éventuellement gérer l'événement HandleCreated (ou remplacer OnHandleCreated, car TextBox n'est pas scellé) et appeler SetWindowLong pour définir le style ES_NUMBER sur le contrôle Edit sous-jacent. ES_NUMBER est défini comme 0x2000 dans WinUser.h.

Vous pouvez également dériver la classe TextBox et saisir l’événement du clavier et vous assurer que rien d’autre que des nombres n’est écrit.

S'il s'agissait d'une page Web, la même chose aurait été appliquée à une zone de texte html à l'aide de Javascript.

Microsoft laisse le soin à des tiers de combler les lacunes concernant les contrôles manquants dans la boîte à outils. J'imagine que le temps et les coûts figureraient dans leur logique.

Dans ce cas, cependant, je pense que le FilteredTextBox fournit la fonctionnalité que vous décrivez.

Basé sur la deuxième modification:

La FAQ Windows Forms explique comment limiter les caractères dans une zone de texte. en question 26.12 :

26.12 Comment puis-je limiter les caractères que ma zone de texte peut accepter?

Vous pouvez gérer l'événement KeyPress de la zone de texte et si le caractère transmis n'est pas acceptable, marquez l'argument des événements comme indiquant que le caractère a été traité. Vous trouverez ci-dessous une zone de texte dérivée qui accepte uniquement les chiffres (et les caractères de contrôle tels que le retour arrière, ...). Bien que l'extrait de code utilise une zone de texte dérivée, cela n'est pas nécessaire, vous pouvez simplement ajouter le gestionnaire à son formulaire parent.

Voir la FAQ pour l'exemple de code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top