一个计算器的问题,两个输入框,只要有一个输入框为字母那么就屏蔽计算这个按钮,只有两个输入的都是数字或浮点数的时候,才使按钮可以用,但是我觉得思路都是对的,就是行不通啊。。
这里的sparc1和sparc2是全局变量,代表两个输入框的状态。
procedure TForm1.Edit1Change(Sender: TObject);
var
i,len1:Integer;
sedit1:String;
begin
sparc2:=false; //这里初始第二个输入框为FALSE
sedit1:=trim(Edit1.Text);
len1:=length(sedit1);
for i:=1 to len1 do
if not (sedit1[i] in ['0'..'9','.']) then
begin 如果自己输入的是字符那么提示,设置sparc1为假,屏蔽按钮
ShowMessage('请输入数字!');
sparc1:=false;
Button1.Enabled := false;
end
else 判断edit2的sparc2为真的时候才使按钮可使用。
if sparc2=true then
Button1.Enabled := true;
end;procedure TForm1.Edit2Change(Sender: TObject);
var
i,len2:Integer;
sedit2:String;
begin
sparc1:=false; 这里先设置第一个输入框的sparc1为假
sedit2:=trim(Edit2.Text);
len2:=length(sedit2);
for i:=1 to len2 do
if not (sedit2[i] in ['0'..'9','.']) then
begin 如果自己输入的是字符那么设置sparc2为假,屏蔽按钮
ShowMessage('请输入数字!');
sparc2:=false;
Button1.Enabled := false;
end
else
if sparc1=true then 只有自己为真和第一个输入框为数字的时候显示按钮
Button1.Enabled:=true;end;
这里的sparc1和sparc2是全局变量,代表两个输入框的状态。
procedure TForm1.Edit1Change(Sender: TObject);
var
i,len1:Integer;
sedit1:String;
begin
sparc2:=false; //这里初始第二个输入框为FALSE
sedit1:=trim(Edit1.Text);
len1:=length(sedit1);
for i:=1 to len1 do
if not (sedit1[i] in ['0'..'9','.']) then
begin 如果自己输入的是字符那么提示,设置sparc1为假,屏蔽按钮
ShowMessage('请输入数字!');
sparc1:=false;
Button1.Enabled := false;
end
else 判断edit2的sparc2为真的时候才使按钮可使用。
if sparc2=true then
Button1.Enabled := true;
end;procedure TForm1.Edit2Change(Sender: TObject);
var
i,len2:Integer;
sedit2:String;
begin
sparc1:=false; 这里先设置第一个输入框的sparc1为假
sedit2:=trim(Edit2.Text);
len2:=length(sedit2);
for i:=1 to len2 do
if not (sedit2[i] in ['0'..'9','.']) then
begin 如果自己输入的是字符那么设置sparc2为假,屏蔽按钮
ShowMessage('请输入数字!');
sparc2:=false;
Button1.Enabled := false;
end
else
if sparc1=true then 只有自己为真和第一个输入框为数字的时候显示按钮
Button1.Enabled:=true;end;
begin
Result := False;
Try
StrToFloat(Trim(Sender.Text));
Except
Result := True;
Exit;
end;
end; vEditOnChange
vButton.Enabled := Not (CondNum() or CondNum(Edit2) )
vButton.Enabled := Not(CondNum(Edit1) or CondNum(Edit2);
但是如果哪个框输入了数字,会出错,出来个DEBUG错误,说另一个框的字符不是float。。我想是你函数里的转换导致的吧
代码如下:
procedure TForm1.Edit1Change(Sender: TObject);
var
i,len1:Integer;
sedit1:String;
begin
sedit1:=trim(Edit1.Text);
len1:=length(sedit1);
for i:=1 to len1 do
if not (sedit1[i] in ['0'..'9','.']) then
begin
ShowMessage('请输入数字!');
Button1.Enabled := false;
end
else
Button1.Enabled:= not (CondNum(Edit1) or CondNum(Edit2));end;procedure TForm1.Edit2Change(Sender: TObject);
var
i,len2:Integer;
sedit2:String;
begin
sedit2:=trim(Edit2.Text);
len2:=length(sedit2);
for i:=1 to len2 do
if not (sedit2[i] in ['0'..'9','.']) then
begin
ShowMessage('请输入数字!');
sparc2:=false;
Button1.Enabled := false;
end
else
Button1.Enabled:= not (CondNum(Edit1) or CondNum(Edit2));end;