这可能是一个非常简单的问题,但我从未接触过delphi。 我有一个编辑框,可以接受角色。但在某些特殊情况下,我必须验证编辑框字符只是数字。
我们怎么能这样做?
注意:用户可以输入任何字符,但在验证时我必须验证上面的字符。
答案 0 :(得分:10)
我不知道您打算使用什么事件来调用验证,但验证可以像这样完成:
if TryStrToInt(Edit1.Text, Value) then
DoSomethingWithTheNumber(Value)
else
HandleNotANumberError(Edit1.Text);
答案 1 :(得分:6)
我不明白为什么你想让用户输入一个字符,以后不允许它通过验证。
如果你真的需要阻止进入,那么为你做这件事的控制比自己破解它更好。如果你的delphi版本真的很旧,那么试试JVCL组件库中的JVCL:TJvValidateEdit,例如,在所有版本的delphi中。但是,在最近的常规delphi版本(2009及更高版本)中,已经内置了几种可能的解决方案,包括TMaskEdit和TSpinEdit。
如果您真的只需要编写验证方法,那么请考虑使用正则表达式或手动编码验证函数,并将该代码与控件分开。
// Taking OP question obsessively literally, this
// function doesn't allow negative sign, decimals, or anything
// but digits
function IsValidEntry(s:String):Boolean;
var
n:Integer;
begin
result := true;
for n := 1 to Length(s) do begin
if (s[n] < '0') or (s[n] > '9') then
begin
result := false;
exit;
end;
end;
end;
答案 2 :(得分:3)
我知道你说user can enter any char but at the time of validation
但是我想提供一个替代方案,因为允许用户输入值似乎非常愚蠢,只是在1分钟后向用户投诉;只是闻起来很好......不太好。
除了数字,我不允许输入任何内容 如果你的整数特别容易:
填写编辑框的OnKeyPress事件。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) ;
begin
if not(Key IN ['0'..'9', #8, #9, #13, #27, #127]) then key:= #0;
end;
这会丢弃任何不是数字的内容。
如果您允许使用否定数字,则需要额外检查以查看之前是否未输入-
。
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char) ;
var
Edit1Text: string;
begin
if (Key = '-') and Pos('-',Edit1.Text) = 0 then begin
Edit1.Text:= '-' + Edit1.Text; //Force the '-' to be in the front.
end
else if (Key = '-') and Pos('-',Edit1.Text) <> 0 then begin //else flip the sign
Edit1Text:= Edit1.Text;
Edit1.Text:= StringReplace(Edit1Text, '-', '',[]);
end;
if not(Key IN ['0'..'9', #8, #9, #13, #27, #127]) then key:= #0;
end;
由于用户还可以将数据粘贴到编辑框中,因此您还需要在更改编辑中的文本时检查数据。
因为这在ONKeyPress事件中相当繁琐,我使用自定义编辑组件来执行此类检查,并防止用户在编辑框中输入口内输入。
就我个人而言,我不相信发出错误信息,您应该始终努力不让用户首先输入无效数据。
答案 3 :(得分:3)
但在某些特殊情况下,我有 验证编辑框字符 只有数字。
您需要两个编辑控件。一个用于仅数字值,一个用于allow-all值。启用或禁用符合条件的控件。如果这两个控件具有良好的标题(可能还有提示,为什么启用或禁用控件),那么用户就知道他必须输入什么以及为什么。
aarrgghh : - )
对于简单的数据输入表单,我执行以下操作:我允许输入错误,但是对于每个具有无效输入的编辑控件,将字体颜色切换为红色(当不允许空值时,红色字体颜色不够)。如果用户尝试发布数据,我会提供一个错误消息,告知用户所有无效输入字段并中止帖子。