2008-09-17 4 views
0

Est-ce que quelqu'un sait pourquoi Microsoft ne livre pas une 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é à travers les applications de différentes saveurs et en effet quelque chose que la plupart des bibliothèques GUI (bien, ceux que je connais) livrent d'une manière ou d'une autre. Bien qu'il ne soit pas difficile d'écrire le vôtre, ce n'est pas trivial non plus. Donc, je suis intéressé à savoir si quelqu'un peut rationaliser cette omission..NET NumericTextBox

edit: Merci pour les suggestions. Alors que les boîtes de texte masquées et les incrustations numériques ont leur place; Je suis intéressé par un contrôle qui ressemble à une boîte de texte, mais qui effectue automatiquement la validation à la pression de la touche que l'entrée correspond à 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 haut-bas sur le côté) .

Il y a beaucoup d'implémentations avec différents degrés de qualité de ceci sur le net et en effet il y a même un exemple de ceci sur le MSDN. Edit2: Merci les gars, il semble que le contrôle numérique .NET est le contrôle .NET à utiliser uniquement pour la saisie numérique (et la raison pour laquelle nous n'avons pas de contrôle de zone de texte numérique explicite). Cela aurait été génial si elle interdisait automatiquement l'entrée de caractères non numériques (en appuyant sur une touche, en pâte, etc.) mais je suppose que c'est suffisant pour effectuer la validation lorsque le contrôle perd le focus. Et, on pourrait faire sur le keypress, sur la validation de coller si on était vraiment vif ...

Répondre

4

Je recommande Garry Shutlers d'utiliser NumericUpDown. Vous pourriez ne pas aimer les commandes haut-bas, mais que est l'apparence standard d'un contrôle d'entrée numérique dans Windows, et vous devriez réfléchir à deux fois sur l'utilisation d'un look différent.

Si vous finissez par coder votre propre implémentation (ou en trouver une sur le web), il y a quelques pièges à surveiller. Rappelez-vous qu'il existe de nombreuses façons pour une valeur d'entrer dans un contrôle en plus des touches. Celui de votre lien sur MSDN ne remplace même pas coller, de sorte que vous pouvez facilement ctrl-V une chaîne non numérique dans le contrôle.

3

Il y a le NumericUpDown contrôle qui est fait spécifiquement pour l'entrée des nombres et peut être employé comme un TextBox.

4

Vous pouvez utiliser un MaskedTextBox

+0

Créer une instance de ce contrôle et définissez sa propriété de masque documenté ici « http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.mask.aspx » – Gishu

3

A partir de WinForms 2.0, vous avez un MaskedTextBox. Vous pouvez définir le masque sur ce que vous voulez, c'est-à-dire pour les nombres, utilisez le masque tous les 0.

0

Vous pouvez également dériver la classe TextBox et récupérer l'événement du clavier et vérifier que rien d'autre que des nombres n'est écrit.

S'il s'agissait d'une page Web, la même chose aurait été faite pour une boîte de texte HTML en utilisant Javascript.

0

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 le coût figureraient dans leur raisonnement.

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

1

Certains des contrôles .NET Framework ne présentent pas étrangement toutes les fonctionnalités du contrôle Windows sous-jacent qu'ils enveloppent.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 le 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.

0

Sur la base de la deuxième édition:

Le Windows Forms FAQ vous indique comment limiter les caractères dans une zone de texte en question 26.12:

26,12 Comment puis-je limiter les caractères que mon champ de saisie 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 events comme indiquant que le caractère a été traité. Voici un TextBox dérivé qui n'accepte que les chiffres (et les caractères de contrôle tels que retour arrière, ...). Même si l'extrait utilise une zone de texte dérivée, il n'est pas nécessaire car vous pouvez simplement ajouter le gestionnaire à son formulaire parent.

Voir la FAQ pour l'exemple de code.