一个计算器的问题,两个输入框,只要有一个输入框为字母那么就屏蔽计算这个按钮,只有两个输入的都是数字或浮点数的时候,才使按钮可以用,但是我觉得思路都是对的,就是行不通啊。。
这里的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;

解决方案 »

  1.   

    Function CondNum(Sender : TEdit) : Boolean;
    begin
     Result := False;
     Try
       StrToFloat(Trim(Sender.Text));
     Except
       Result := True;
       Exit;
     end;
    end;  vEditOnChange
      vButton.Enabled := Not (CondNum() or CondNum(Edit2) )
      

  2.   

    上边少了一个Edit1,改
    vButton.Enabled := Not(CondNum(Edit1) or CondNum(Edit2);
      

  3.   

    我试了下,如果输入的是字符,当然会屏蔽按钮,
    但是如果哪个框输入了数字,会出错,出来个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;