Я задаюсь вопросом поэтому, когда я изменяю состояние CheckBox
CheckBox->Checked=false;
Это называет Событие CheckBoxOnClick, как избежать его?
Вы можете окружить код события onClick чем-то вроде
if myFlag then
begin
...event code...
end;
. Если вы не хотите, чтобы оно выполнялось, установите myFlag в false, а после изменения состояния флажка верните его в true.
Другой вариант - изменить защищенное свойство ClicksDisable с помощью класса интерпозера, например:
type
THackCheckBox = class(TCustomCheckBox)
end;
procedure TCheckBox_SetCheckedNoOnClick(_Chk: TCustomCheckBox; _Checked: boolean);
var
Chk: THackCheckBox;
begin
Chk := THackCheckBox(_Chk);
Chk.ClicksDisabled := true;
try
Chk.Checked := _Checked;
finally
Chk.ClicksDisabled := false;
end;
end;
Надеюсь, что есть решение для кнопок, но вы могли бы хранить текущее событие в переменной TNotifyEvent, затем установить Checkbox.OnChecked в nil и после восстановить его.