Измените состояние CheckBox, не называя Событие OnClick

Я задаюсь вопросом поэтому, когда я изменяю состояние CheckBox

CheckBox->Checked=false;

Это называет Событие CheckBoxOnClick, как избежать его?

13
задан menjaraz 28 January 2012 в 07:29
поделиться

3 ответа

Вы можете окружить код события onClick чем-то вроде

if myFlag then
  begin
    ...event code...
  end;

. Если вы не хотите, чтобы оно выполнялось, установите myFlag в false, а после изменения состояния флажка верните его в true.

9
ответ дан 1 December 2019 в 19:23
поделиться

Другой вариант - изменить защищенное свойство 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;
10
ответ дан 1 December 2019 в 19:23
поделиться

Надеюсь, что есть решение для кнопок, но вы могли бы хранить текущее событие в переменной TNotifyEvent, затем установить Checkbox.OnChecked в nil и после восстановить его.

6
ответ дан 1 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: