VCL世界中有各种技巧可以设置一个复选框状态而不会触发更改事件,例如:
yourCheckBox.Perform(BM_SETCHECK, 1, 0)
或者不太优雅地移除事件,更改状态并恢复事件。
我的问题是,是否有任何公认的方法可以更改firemonkey中复选框的状态而不会导致OnChange事件?
答案 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;