(100分delphi编程)edit中只允许输入大于零的整数怎么实现?

来源:百度知道 编辑:UC知道 时间:2024/06/24 18:44:27
下面这段代码错在哪里?
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (not (key in ['0'..'9',#8])) or (strtoint(LeftStr(trim(edit1.text),1))<>0) then
key:=#8;
showmessage('请输入大于零的整数');
exit;
end;
谢谢大家的帮助
上面的代码有错误,现改成如下:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (not (key in ['0'..'9',#8])) or (LeftStr(edit1.text,1)='0') then
begin
key:=#8;
showmessage('请输入大于零的整数');
end;
end;

但是不知道为什么输入单独一个0的时候没有效果...
要求不允许为0.

LeftStr(edit1.text,1)='0'

改成 LeftStr(edit1.text + key,1)='0'

因为一开始是空的,判断的是你按键之前的edit的情况,所以出错,所以只要把按下的key给加上就OK了!

语法上的毛病:
估计StrUtils 这个你没use
你少begin end来限制判断范围,最后那个exit没必要

逻辑上的毛病:
(strtoint(LeftStr(trim(edit1.text),1))<>0)运行的时候你一输入肯定报错,因为那时候edit1的内容还是空,你转整型就肯定报错

建议你这样做:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8]) then
key:=#13;
end;

procedure TForm1.Edit1Exit(Sender: TObject);
begin
try
if strtoint(trim(edit1.Text))<=0 then
showmessage('请输入大于零的整数');
except
showmessage('请输入正确的数字形式');
end;
end;
判断是不是大于0的整数放到EDIT退出的时候做

为什么要这么复杂,为何不用掩码来控制