更改复选框而不在firemonkey中触发OnChange

时间:2014-08-27 05:46:36

标签: firemonkey

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

  yourCheckBox.Perform(BM_SETCHECK, 1, 0)

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

我的问题是,是否有任何公认的方法可以更改firemonkey中复选框的状态而不会导致OnChange事件?

1 个答案:

答案 0 :(得分:0)

我发现这个答案(Change CheckBox state without calling OnClick Event)使用帮助程序类来实现该功能。这是VCL和Firemonkey友好的警告,每个类只能有一个助手类。这意味着如果其他人也有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;
相关问题