在Delphi中一次仅选中一个复选框

时间:2015-07-09 07:06:42

标签: delphi checkbox

问题:我有两个复选框(一次只能检查一个)和一个编辑框。对于选中它们时的复选框,编辑框中的值必须更改为' 0' 0否则原始值将保留在编辑框中。以下是两个复选框的两个onclick事件。当我写chkFacetoFace.checked:= false时,调用相应的onclick处理程序,我无法达到所需的结果。有谁可以帮我解决这个问题?

procedure TForm1.chkFacetoFaceClick(Sender: TObject);
begin
  if chkFacetoFace.Checked then
    begin
      edtConvFee.Text := '0.00';
      chkWaiveOff.Checked := False;
    end
    else
    begin
      edtConvFee.Text := '5.00';
    end;
end;

procedure TForm1.chkWaiveOffClick(Sender: TObject);
begin
  if chkWaiveOff.Checked then
    begin
      edtConvFee.Text := '0.00';
      chkFacetoFace.Checked := False;
    end
    else
    begin
      edtConvFee.Text := '5.00';
    end;
end;

2 个答案:

答案 0 :(得分:2)

  1. 正如TLama评论的那样:

      

    您可以暂时取消分配OnClick处理程序。

  2. EditBox.Text的值设置在非预期的情况中。在更改Checked之前,您应该检查两个Checkboxe的EditBox.Text状态。见这个例子:

  3. procedure TForm1.chkWaiveOffClick(Sender: TObject);
    begin
      if chkWaiveOff.Checked then
      begin
        edtConvFee.Text := '0.00';
        chkFacetoFace.Checked := False;
      end
      else if not chkFaceToFace.Checked then // <-- additional check for the respective checkbox
      begin
        edtConvFee.Text := '5.00';
      end;
    end;
    

答案 1 :(得分:0)

@David Heffernan说:“复选框在这里是错误的。”

试试这个:

procedure TForm1.chk1Click(Sender: TObject);
 begin
 inherited;
   chk1.OnClick := nil;
   chk2.OnClick := nil;
   chk2.OnClick := nil;
   if TCheckBox(Sender).Name = 'chk1' then
   begin
     chk2.Checked := False;
     chk3.Checked := False;
   end
   else if TCheckBox(Sender).Name = 'chk2' then
   begin
     chk1.Checked := False;
     chk3.Checked := False;
   end
   else if TCheckBox(Sender).Name = 'chk3' then
   begin
     chk1.Checked := False;
     chk2.Checked := False;
   end;
   chk1.OnClick := chk1Click;
   chk2.OnClick := chk1Click;
   chk3.OnClick := chk1Click;
 end;`