在 Edit 的 KeyPress 事件中加入下列代码: if not((key in ['0'..'9','.',#8]) ) then key := #0; 要想控制的完善一点, 在OnChange事件中处理: procedure TForm.EditChange(Sender: TObject); begin try StrToFloat((Sender as TEdit).Text); except (Sender as TEdit).Text:=Copy((Sender as TEdit).Text,1, Length((Sender as TEdit).Text)-1); (Sender as TEdit).SelStart:=Length((Sender as TEdit).Text); end; end;
楼上的right: if not((key in ['0'..'9','.',#8]) ) then key := #0;
if not (key in ['0'..'9',#8]) then begin if (key='.') and (pos('.',Tedit(sender).Text)=0) then exit; key:=#0; Messagebeep(0); end;就 OK了!
在KeyPress里控制怎么都不完善! 如果Ctrl+C,Ctrl+V怎么办? 如果右键拷贝、粘贴呢? 所以只有在OnChange事件中才能完善控制: procedure TForm.EditChange(Sender: TObject); begin try StrToFloat((Sender as TEdit).Text); except (Sender as TEdit).Text:=Copy((Sender as TEdit).Text,1, Length((Sender as TEdit).Text)-1); (Sender as TEdit).SelStart:=Length((Sender as TEdit).Text); end; end;
begin
key:=#0;
Messagebeep(0);
end;
这样的问题帖子里非常多
strtofloat(edit1.text);
except
showmessage('请正确输入!' );
exit;
end;
if not((key in ['0'..'9','.',#8]) ) then
key := #0; 要想控制的完善一点,
在OnChange事件中处理:
procedure TForm.EditChange(Sender: TObject);
begin
try
StrToFloat((Sender as TEdit).Text);
except
(Sender as TEdit).Text:=Copy((Sender as TEdit).Text,1,
Length((Sender as TEdit).Text)-1);
(Sender as TEdit).SelStart:=Length((Sender as TEdit).Text);
end;
end;
if not((key in ['0'..'9','.',#8]) ) then
key := #0;
begin
if (key='.') and (pos('.',Tedit(sender).Text)=0) then exit;
key:=#0;
Messagebeep(0);
end;就
OK了!
如果Ctrl+C,Ctrl+V怎么办?
如果右键拷贝、粘贴呢?
所以只有在OnChange事件中才能完善控制:
procedure TForm.EditChange(Sender: TObject);
begin
try
StrToFloat((Sender as TEdit).Text);
except
(Sender as TEdit).Text:=Copy((Sender as TEdit).Text,1,
Length((Sender as TEdit).Text)-1);
(Sender as TEdit).SelStart:=Length((Sender as TEdit).Text);
end;
end;