Comment puis-je vérifier qu'une zone de texte ne contient que des nombres en Delphi?
Pourrait-elle est la question très simple mais je n'ai jamais touché de delphi.
J'ai une boîte d'édition et qui peut accepter de caractère. Mais sur certaines condition particulière que j'ai pour vérifier la zone de saisie de caractères ne sont que des numéros.
Comment pouvons-nous faire?
Remarque: l'utilisateur peut entrer n'importe quel caractère, mais au moment de la validation, je dois vérifier ci-dessus.
pourriez-vous expliquer pourquoi vous ne voulez pas bloquer l'utilisateur d'entrer des données non valides. Les utilisateurs de rester coincé avec des données non valides dans un champ d'entrée est considéré comme un utilisateur "piège" et est considéré comme une mauvaise conception de l'interface utilisateur par de nombreux développeurs.
Veuillez préciser les raisons pour lesquelles vous souhaitez empêcher les utilisateurs d'entrer des valeurs à la source et donc de les priver de la rétroaction de voir les touches, résultant dans les caractères qui apparaissent sur l'écran.
Ne pas permettre à l'utilisateur d'entrer des valeurs non valides dans le contrôle ne signifie pas ne pas lui donner de la rétroaction. Vous pouvez toujours pop up un message disant: "vous avez saisi une mauvaise valeur, etc..." comme lorsque le voyant de verrouillage des majuscules est à l'ouverture de session windows.
Pas de réponse à la frappe peut en effet perturber certains utilisateurs aussi. Peut-être une réponse idéale serait de flash une grande lumière rouge sur l'écran et un bip. Si elles persistent, en tapant des chiffres, on peut leur donner un eNoogie. 🙂
C'est vous qui propose "pas de réponse à la frappe". Et oui, il serait source de confusion.
Veuillez préciser les raisons pour lesquelles vous souhaitez empêcher les utilisateurs d'entrer des valeurs à la source et donc de les priver de la rétroaction de voir les touches, résultant dans les caractères qui apparaissent sur l'écran.
Ne pas permettre à l'utilisateur d'entrer des valeurs non valides dans le contrôle ne signifie pas ne pas lui donner de la rétroaction. Vous pouvez toujours pop up un message disant: "vous avez saisi une mauvaise valeur, etc..." comme lorsque le voyant de verrouillage des majuscules est à l'ouverture de session windows.
Pas de réponse à la frappe peut en effet perturber certains utilisateurs aussi. Peut-être une réponse idéale serait de flash une grande lumière rouge sur l'écran et un bip. Si elles persistent, en tapant des chiffres, on peut leur donner un eNoogie. 🙂
C'est vous qui propose "pas de réponse à la frappe". Et oui, il serait source de confusion.
OriginalL'auteur PawanS | 2011-06-23
Vous devez vous connecter pour publier un commentaire.
Je ne comprends pas pourquoi vous voulez permettre à un utilisateur d'entrer un caractère, et, plus tard, de ne pas lui permettre de passer de validation.
Si vous avez vraiment besoin de bloquer l'entrée, puis un contrôle qui fait cela pour vous, c'est mieux que ce piratage vous-même. Si votre version de delphi est vraiment vieux, puis essayer de la JVCL: TJvValidateEdit dans la JVCL bibliothèque de composants, par exemple, dans toutes les versions de delphi. Cependant, régulières, les dernières versions de delphi (2009 et plus), il est déjà intégré dans plusieurs solutions possibles, y compris TMaskEdit et TSpinEdit.
Si vous avez vraiment besoin d'écrire une méthode de validation, puis envisager d'utiliser une regex ou codés à la main, les fonctions de validation, et de garder ce code distinct du contrôle.
TryStrToInt()
il a dit, "Mais sur une condition particulière que j'ai pour vérifier la zone de saisie de caractères ne sont que des numéros." Il a donc besoin de vérifier ce que dans certaines circonstances, ne pas tout le temps. BTW, plz ajouter NumbersOnly de la propriété à Modifier les contrôles dans les dernières versions de Delphi à la liste de votre solution intégrée. Réglage NumbersOnly True à la propriété fera le contrôle d'édition de refuser tout caractère non numérique.
NumbersOnly n'est pas une option valide de l'omi, ni est le paramètre par WinAPI (ES_NUMBER), car même alors, vous pouvez coller des invalides de texte.
Oh intéressant de trouver @vcldeveloper! Sons cependant problématique?
Je ne peux pas reproduire le problème que vous avez mentionné dans Windows 7, l'utilisation de Delphi 2010. Un contrôle d'Édition qui son NumbersOnly se trouve dans la est défini à True, n'accepte pas les caractères alphabétiques se coller à elle.
OriginalL'auteur Warren P
Je ne sais pas quel événement vous avez l'intention d'utiliser pour invoquer la validation, mais la validation peut être fait comme ceci:
bon point. Dans ma tête le gestionnaire d'erreur soulevé une exception, mais c'est trop forte, et l'hypothèse.
Oh merci! J'ai été la conversion de zone d'édition de texte à l'omble chevalier et de comparer chaque char est en jeu ou sur [0..9] existent ou pas. Basé sur que j'ai essayé, mais cela semble plus courte.
Je suis en train de travailler sur la D5, je ne pense pas que je obtenir
TryStrToInt
ilSi vous voulez restreindre les réponses à 12 ans les anciennes versions du logiciel, vous devriez vraiment le dire ainsi, lorsque vous posez la question.
OriginalL'auteur David Heffernan
Je sais que vous avez dit
user can enter any char but at the time of validation
.Cependant, je voudrais proposer une alternative, car il semble très stupide pour permettre à un utilisateur d'entrer des valeurs, seulement pour se plaindre de l'utilisateur 1 minute plus tard; qui sent juste bien... pas bien.
Je voudrais interdire l'entrée de rien, mais des numéros.
Si vous avez des entiers c'est particulièrement facile:
Remplir l'événement OnKeyPress pour editbox.
Cela supprime tout ce qui n'est pas un numéro.
Si vous autorisez les nombres négatifs, vous aurez besoin de supplément de vérification pour voir si le
-
n'a pas été saisi avant.Car l'utilisateur peut également coller des données dans une zone d'édition, vous devrez toujours vérifier les données lors d'un changement dans le texte de l'édition.
Parce que c'est assez délicat dans l'événement ONKeyPress-je utiliser un custom modifier le composant qui fait ce genre de vérification et empêche l'utilisateur d'entrer un pied dans la bouche d'entrée dans une zone d'édition.
Personnellement, je ne crois pas à jamais de l'émission d'un message d'erreur, vous devriez toujours s'efforcer de ne pas permettre à l'utilisateur d'entrer des données non valides dans la première place.
['0'..'9', #8, #9, #13, #27, #127, '-']
. Surtout backspace et delete sont à portée de main pour entrer dans l'entrée. 😉 (Et pour les flotteurs, vous pourriez inclure DecimalSeparator aussi.)-1 Pour ne pas payer attention à l'OP. Désolé. La validation des numéros à la volée peut être l'exception, mais la validation sur quitter ou sur la soumission est bien pratique courante.
Je refuse d'écrire des programmes qui émettent des messages d'erreur, vous je vais ignorer votre commentaire. C'est juste une forte crois que je l'ai, l'utilisateur est toujours à droite.
Attention. Pas toutes les erreurs viennent de l'utilisateur, et si vous n'avez pas d'informer l'utilisateur de ce qui va mal, cela peut conduire à la frustration de leur part.
Vous avez encore à valider le texte sur la sortie/changement, car il y a plusieurs façons d'insérer des données dans une zone d'édition qu'en appuyant sur les touches. Coller du texte par exemple.
OriginalL'auteur Johan
Vous avez besoin de deux modifiez-les contrôles. Une pour les numéros seule valeur et un pour le permettre de toute valeur. Activer ou désactiver le contrôle qui correspondent à l'état. Si les deux commandes ont bien des légendes (et peut-être des conseils, pourquoi un contrôle est activé ou désactivé), de sorte que l'utilisateur sait ce qu'il a à entrer et pourquoi.
aarrgghh 🙂
Pour de simples formes d'entrée de données, je ne les suivants: I permettre la saisie erronée, mais passer à la police de la couleur rouge pour chaque contrôle d'édition avec une entrée non valide (rouge, couleur de police n'est pas assez quand une valeur vide est de ne pas permettre). Si l'utilisateur tente d'afficher les données que j'ai donner un message d'erreur qui en informent l'utilisateur sur tous invalides champs de saisie et d'abandon de poste.
OriginalL'auteur Heinz Z.