Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Delphi中一次只选中一个复选框_Delphi_Checkbox - Fatal编程技术网

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

在Delphi中一次只选中一个复选框,delphi,checkbox,Delphi,Checkbox,问题:我有两个复选框(一次只能选中一个)和一个编辑框。对于选中的两个复选框,编辑框中的值必须更改为“0”,否则原始值将保留在编辑框中。下面是两个复选框的两个onclick事件。当我写入chkfacietoface.checked:=false时,将调用相应的onclick处理程序,并且我无法获得所需的结果。有人能帮我解决这个问题吗 procedure TForm1.chkFacetoFaceClick(Sender: TObject); begin if chkFacetoFace.Chec

问题:我有两个复选框(一次只能选中一个)和一个编辑框。对于选中的两个复选框,编辑框中的值必须更改为“0”,否则原始值将保留在编辑框中。下面是两个复选框的两个onclick事件。当我写入chkfacietoface.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;
  • 正如特拉马评论的那样:


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

  • EditBox.Text的值在非预期情况下设置。在更改
    EditBox.Text
    之前,应选中两个复选框的
    选中状态。请参见此示例:

  • 程序TForm1.chkWaiveOffClick(发送方:TObject);
    开始
    如果chkWaiveOff,则检查
    开始
    文本:='0.00';
    chkface.Checked:=假;
    结束
    否则,如果不是chkface.Checked then/@davidheffernan说“这里的复选框是错误的。”

    试试这个:

    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;`
    

    您可以暂时取消分配
    OnClick
    处理程序。“我有两个复选框(一次只需选中一个)”。使用
    单选按钮
    instead@ValMarinovIMHO,对于RadioButton用户期望必须检查一个值,完全未检查的RadioGroup会激怒用户。是的,我想到了,但用户可以不选中任何复选框继续。单选按钮没用,对吧?这里的复选框错了。你需要一个有三个选择的广播组。“额外”对应于未选中的复选框。这里有一个众所周知的UI习惯用法。复选框告诉用户可以组合选项。单选按钮告诉用户选项是互斥的。不要以这种方式混淆用户。引用仅代表大卫所说的话。。。我的意思是我同意,但那不是我的话。我应该说:就像@David Heffernan说的“这里的复选框错了。”好的,谢谢。我以为你认为这句话意味着复选框是不可能的,你证明了不是这样。有时,多用几个词会使一个短语更清楚谢谢你,Marisco
    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;`