Установите флажок. Проверено без события OnClick

TCheckBox Delphi Элемент управления отображает флажок, который может быть включен (отмечен) или выключен (не отмечен). Проверенная недвижимость указывает, установлен ли флажок или нет.

Когда пользователь щелкает по флажку, чтобы изменить его состояние Checked, запускается событие OnClick для флажка.

Изменение отмеченного флажка

Так как нет OnCheckedChanged событие, вы, вероятно, будете обрабатывать логику программы в зависимости от отмеченного состояния флажка в его событии OnClick.

Однако если вы программно изменить свойство Checked, событие OnClick будет запущено - даже при отсутствии взаимодействия с пользователем.

Есть (как минимум) два способа программно изменить свойство флажка флажка, одновременно «отключая» событие OnClick.

Удалите обработчик OnClick, отметьте изменения, верните оригинальный обработчик OnClick

В Delphi для Win32 к событию может быть прикреплен только один обработчик событий (процедура) (хотя в Delphi для Win32 есть способ имитировать многоадресные события). Подпись события OnClick элемента управления TCheckBox имеет вид «type TNotifyEvent = method (Sender: TObject) объекта;»

instagram viewer

Если вы присвоите NIL событию OnClick до изменения состояния флажка, то вернитесь к исходной процедуре обработки события OnClick - событие OnClick не будет запущено.

процедура SetCheckedState (Const checkBox: TCheckBox; Const проверка: логическое значение);

вар

 onClickHandler: TNotifyEvent;

начать

с CheckBox делать

начать

 onClickHandler: = OnClick;

 OnClick: = ноль;

Проверено: = проверка;
OnClick: = onClickHandler;
конец;

конец; 

Использование этой процедуры просто:

// переключить проверенное состояниеначать

 SetCheckedState (CheckBox1, НЕ CheckBox1.Checked);

конец;

SetCheckedState выше переключает свойство Checked флажка CheckBox1.

Защищенный хак: ClicksDisabled: = true

Другой способ остановить выполнение OnClick, когда вы программно изменяете свойство Checked флажка, - это воспользоваться «скрытым» (защищенным) ClicksDisabled свойство.

Рассматривая процедуру SetState TCheckBox, которая выполняется при каждом изменении свойства Checked, OnClick запускается, если ClicksDisabled не имеет значения true.

Поскольку ClicksDisabled защищен, вы не можете получить к нему доступ со своего код.

К счастью, техника защищенного взлома позволяет вам получить доступ к этим скрытым / защищенным свойствам элемента управления Delphi.

Доступ к защищенным членам компонента предоставляет больше информации по теме.

Вам нужно объявить простой фиктивный класс, расширяющий TCheckBox в том же модуле, где вы будете использовать свойство ClicksDisabled.

Как только вы получите ClicksDisabled, просто установите для него значение true, измените свойство Checked, а затем установите для ClicksDisabled значение false (значение по умолчанию):

тип


 TCheckBoxEx = class (TCheckBox);


 ...


с TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

 Проверено: = НЕ проверено;

 ClicksDisabled: = false;

конец;

Примечание. Приведенный выше код переключает свойство Checked флажка с именем «CheckBox1», используя защищенное свойство ClicksDisabled.

Создание приложений с Delphi

  • Руководство для начинающих по программированию баз данных Delphi
  • Интеграция основных диаграмм в приложения Delphi
  • Как переместить и изменить размеры элементов управления во время выполнения
  • Многопоточные запросы к базе данных Delphi
instagram story viewer