Comment puis-je accepter uniquement les numéros dans un contrôle d'édition?
Normalement, je devrais faire pour enregistrer une chaîne de la valeur dans la base de données
DataModule.tbTableNumber.Value := StrToFloat(edtNumber.text);
Maintenant, le problème vient lorsque l'utilisateur entre quelque chose qui ne peut pas convertir en nombre. Comment serais-je capable d'empêcher cela? Une personne peut-elle utiliser une exception et comment pourrais-je écrire cette exception?
Je suis en utilisant Delphi XE2.
Pourquoi vous n'êtes pas en utilisant les contrôles de bases de données? comme Vcl.DBCtrls.TDBEdit
Une autre approche serait d'empêcher l'utilisateur d'entrer des données non valides dans la première place. Vous pouvez utiliser un contrôle qui prend en charge les masques de saisie ou vous pourriez gérer la
Quels sont les avantages d'une bases de données de contrôle de me donner de plus normal TEdit
De nombreux avantages, entre eux à l'entrée de la validation des données est effectuée pour le contrôle de soi en fonction du type du champ, Donc si vous liez un TDbEdit à un integer ou float domaine, le contrôle que permettent d'entrer des valeurs numériques.
Donc, si un TEdit est connecté à un nombre de demandes déposées, il refusera de prendre toutes les autres personnages qui n'est pas numérique?
Une autre approche serait d'empêcher l'utilisateur d'entrer des données non valides dans la première place. Vous pouvez utiliser un contrôle qui prend en charge les masques de saisie ou vous pourriez gérer la
TEdit.OnChange
événement pour empêcher l'utilisateur d'entrer des données non numériques. TEdit
a aussi un NumbersOnly
bien, mais il n'empêchera pas l'utilisateur de copier et coller des données non valides dans le champ.Quels sont les avantages d'une bases de données de contrôle de me donner de plus normal TEdit
De nombreux avantages, entre eux à l'entrée de la validation des données est effectuée pour le contrôle de soi en fonction du type du champ, Donc si vous liez un TDbEdit à un integer ou float domaine, le contrôle que permettent d'entrer des valeurs numériques.
Donc, si un TEdit est connecté à un nombre de demandes déposées, il refusera de prendre toutes les autres personnages qui n'est pas numérique?
OriginalL'auteur Japster | 2012-04-02
Vous devez vous connecter pour publier un commentaire.
La meilleure solution (à mon humble avis) est d'utiliser
TryStrToFloat
:Je ne pense pas qu'il est particulièrement "propre" pour utiliser un
try..except
quand l'erreur est négligeable et, en fait, comme prévu, comme dans ce cas.myfloat
, qui est,TryStrToFloat(S, F)
tente de convertir la chaîneS
en un nombre à virgule flottante. Si elle réussit, elle renvoietrue
et le résultat est enregistré dansmyfloat
. Sinon, elle retournefalse
.entièrement d'accord que l'Exception doit être utilisé pour des cas exceptionnels, pas quand il y a une bonne chance que cela se produise si fréquemment.
OriginalL'auteur Andreas Rejbrand
Vous pouvez intercepter l'exception à la suite de
Vous pouvez également regarder
Si vous avez besoin de vous assurer que vous convertir renvoie un nombre valide
elle retourne la valeur par défaut -1 dans ce cas, si la chaîne ne représente pas un nombre valide
Il y a aussi
TryStrToFloat(edtNumber.Text, val)
Qu'est-ce TryStrToFloat funtion faire
Japster, vous semblez avoir de la difficulté à lire la documentation. Il pourrait vous ai dit ce que StrToFloatDef et TryStrToFloat faire.
OriginalL'auteur Dampsquid
Il existe de nombreux contrôles qui peut être dit qu'il n'accepte que des caractères numériques, ce qui a des avantages sur l'approche que vous avez accepté comme votre réponse.
La jedi JVCL bibliothèque par exemple, comprend plusieurs d'entrée numérique de contrôles et de la base VCL comprend un peu les possibilités, y compris le Spin contrôle d'Édition qui est pour l'entrée des valeurs de type entier.
OriginalL'auteur Warren P
J'ai trouvé la solution sur
http://www.festra.com/eng/snip05.htm
( code de lien )
OriginalL'auteur Ondra