更改复选框而不在firemonkey中启动OnChange



在VCL世界中有各种技巧可以设置复选框状态,而不触发更改事件,例如:

  yourCheckBox.Perform(BM_SETCHECK, 1, 0)

或者不太优雅地删除事件、更改状态并恢复事件。

我的问题是,有没有公认的方法可以在不引发OnChange事件的情况下更改firemonkey中复选框的状态?

我发现了这个答案(在不调用OnClick Event的情况下更改复选框状态),它使用助手类来实现该功能。这是对VCL和Firemonkey友好的,但需要注意的是,每个类只能有一个helper类。这意味着,如果其他人也有TCheckbox的帮助程序类,那么将只使用其中一个帮助程序类。另一种方法是编写一个单独的方法,例如:

procedure TfrmMain.setCheckBox (chkBox : TCheckBox; state : boolean);
var OnChangeHandler : TNotifyEvent;
begin
  OnChangeHandler := chkBox.OnChange;
  chkBox.OnChange := nil;
  chkBox.IsChecked := state;
  chkBox.OnChange := OnChangeHandler;
end;

最新更新