控制小数点输入的问题。(10分)

  • 主题发起人 主题发起人 lyplay2
  • 开始时间 开始时间
L

lyplay2

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Edit1Change(Sender: TObject);
var
i:Integer;
s:String;
begin
s:=Edit1.Text;
for i := 1 to Length(Edit1.Text) do
begin
if not (s in ['0'..'9']) then
Delete(s,i,1);
end;
Edit1.Text:=s;
end;

只能输入数据0-9,如果我想再输入小数点该如何做?
 
说明白点
 
procedure TForm1.Edit1Change(Sender: TObject);
var
i:Integer;
s:String;
begin
s:=Edit1.Text;
for i := 1 to Length(Edit1.Text) do
begin
if not (s in ['0'..'9','.']) then
Delete(s,i,1);
end;
Edit1.Text:=s;
end;
 
function Edit_KeyPassDot(Down_Key : Char;soustr : string) : Char;
begin
if (Down_Key = '.') and (Trim(soustr) = '') then
begin
result := #0;
Exit;
end;
if not(Down_Key in ['1','2','3','4','5','6','7','8','9','0',#8,'.']) then
result := #0
else
begin
if (Pos('.',soustr) <> 0)and(Down_Key = '.') then
result := #0 else
begin
if (Pos('.',soustr) <> 0)and(Pos('.',soustr) = Length(soustr) - 2)and(Down_Key <> #8) then
result := #0 else
result := Down_Key;
end;
end;
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
var
i:Integer;
s:String;
begin
s:=Edit1.Text;
for i := 1 to Length(Edit1.Text) do
begin
if not (s in ['0'..'9','.']) then // <-- Add '.'
Delete(s,i,1);
end;
Edit1.Text:=s;
edit1.selstart:=i; // 保持光标位置
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
i:integer;
s:string;
begin
s:=Edit1.Text+key;
i := Length(Edit1.Text);
if key='.' then
begin
if Pos('.',s)<>i then // 判断是否重复键入 '.'
key:=#0;
end
else
if not (key in ['0'..'9']) then
begin
key:=#0;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:='';
end;

//一名 Delphi 的新丁
//出生日期:2000/06/22 22:50
//出生地点:D6
//请多指教!
 
多人接受答案了。
 

if not(Down_Key in [‘0’..'9',#8,'.']) then
result := #0
即可
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
890
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部