有一个checkbox 我在它的click事件里 调用了一个函数
这个函数中的一行代码是:checkbox.checked:=False
但是我发现 执行到这里以后 他又触发了 click事件
我想知道 发生这种情况的原因。如何解决!

解决方案 »

  1.   

    procedure TCustomCheckBox.SetChecked(Value: Boolean);
    begin
      if Value then State := cbChecked else State := cbUnchecked;
    end;procedure TCustomCheckBox.SetState(Value: TCheckBoxState);
    begin
      if FState <> Value then
      begin
        FState := Value;
        if HandleAllocated then
          SendMessage(Handle, BM_SETCHECK, Integer(FState), 0);
        if not ClicksDisabled then Click; //<<<<<<<<这里~~
      end;
    end;//测试如下代码~~
    type
      TCheckBoxEx = class(TCheckBox)
      public
        property ClicksDisabled;
      end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      TCheckBoxEx(CheckBox1).ClicksDisabled := True;
      TCheckBoxEx(CheckBox1).Checked := not TCheckBoxEx(CheckBox1).Checked;
    end;
      

  2.   

    up
    我做了个最简单的函数 只写checkbox.checked:=False
    这一句话  他还是会调用
    不信 你们试试
      

  3.   

    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      CheckBox1.OnClick := nil;
      CheckBox1.Checked := False;
      CheckBox1.OnClick := CheckBox1Click;
    end;