如何在输入外部数值时自动阻止误输非阿拉伯数字? ( 积分: 20 )

  • 主题发起人 主题发起人 yemo0459
  • 开始时间 开始时间
Y

yemo0459

Unregistered / Unconfirmed
GUEST, unregistred user!
我开头儿用的是MaskEdit,但是当用StrToInt(MastEdit.text)将外部数值再赋给ADOQuery1.FieldName['ds'].value时,总提示: '...'不是一个合法的数值。

而用Edit却不能阻止非阿伯数字输入。能否在Edit中自运动阻止非阿拉伯数字输入?或者还有什么好办法能解决这类外部数值的输入?先致谢意!
 
if not (key in ['0'..'9']) then key=#0;
 
用普通TEDIT,在窗体OnCreate事件中写
SetWindowLong(Edit1.Handle, GWL_STYLE,
GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);

不要用StrToInt, 用StrToIntDef指定一个默认值,就不会报错
 
在Edit控件的事件中写
if not (key in ['0'..'9']) then key=#0;

try
strtoint(masedit.text)...
except
end;
或 strtointdef(masedit.text,0)
 
别忘记把BackSpace键加上,不然不方便删除里面的文字
 
问题是,如果我想输入小数呢?输入两个"."也应该被阻止才行啊!总之,就是用Edit 来输入各类外部数值.能否再完善一下么?先谢谢楼上的各位!
 
if not (key in ['0'..'9','.',#13,#10]) then key=#0
这样不就能输入小数了!还不会拦截回车,TAB.
 
从一个第3方控件里找到一个检查是否数字的方法,你放在数值输入前判断,如果是数字则输入,不是则不允许输入
TValueType = (vtInteger, vtFloat);
ValueType:TValueType;

function IsNumText(AText: String): Boolean;
function GetMinus: Boolean;
var
i: Integer;
S: String;
begin
S := AText;
i := Pos('-', S);
if i > 1 then
Result := False
else
begin
Delete(S, i, 1);
Result := Pos('-', S) = 0;
end;
end;

function GetP: Boolean;
var
i: Integer;
S: String;
begin
S := AText;
i := Pos(DecimalSeparator, S);
if i = 1 then
Result := False
else
begin
Delete(S, i, 1);
Result := Pos(DecimalSeparator, S) = 0;
end;
end;
const
EditChars = '01234567890-';
var
i: Integer;
S: String;
begin
S := EditChars;
Result := True;
if ValueType = vtFloat then
S := S + DecimalSeparator;
if (AText = '') or (AText = '-') then
begin
Result := False;
Exit;
end;

for i := 1 to Length(AText) do
begin
if Pos(AText, S) = 0 then
begin
Result := False;
Break;
end;
end;

Result := Result and GetMinus;

if ValueType = vtFloat then
Result := Result and GetP;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部