Задайте CheckBox. Проверено без събитието OnClick

The TCheckBox Delphi control показва квадратче за отметка, което може да бъде включено (отметнато) или изключено (непроверено). Най- Проверен имот указва дали квадратчето е отметнато или не.

Когато потребителят кликне върху квадратчето, за да промени състоянието си на отметка, събитието OnClick за отметката се задейства.

Промяна на отметената собственост на квадратчето за отметка

Тъй като няма OnCheckedChanged събитие, вероятно ще се справите с логиката на програмата, зависеща от провереното състояние на квадратчето в неговото събитие OnClick.

Все пак, ако сте програмно променете свойството Проверено, събитието OnClick ще бъде задействано - въпреки че не се осъществи взаимодействие с потребители.

Има (най-малко) два начина за програмна промяна на отметеното свойство на квадратчето, докато „деактивираме“ събитието OnClick.

Премахване на OnClick Handler, Промяна на проверените, Поставете обратно оригиналния манипулатор на OnClick

В Delphi за Win32 едно събитие може да има само един манипулатор на събития (процедура), прикрепен към него (въпреки че има начин да имитирате многоадресни събития в Delphi за Win32). Подписът на събитието OnClick на контрола на TCheckBox е "въведете TNotifyEvent = процедура (Sender: TObject) на обект;"

instagram viewer

Ако зададете NIL на събитието OnClick, преди да промените състоянието на квадратчето, след това се върнете към първоначалната процедура за обработка на събитията OnClick - събитието OnClick няма да бъде задействано.

процедура SetCheckedState (конст checkBox: TCheckBox; конст проверка: булева);

Var

 onClickHandler: TNotifyEvent;

започвам

с отметката правя

започвам

 onClickHandler: = OnClick;

 OnClick: = нула;

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

край; 

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

// превключване Проверено състояниезапочвам

 SetCheckedState (CheckBox1, NOT CheckBox1.Checked);

край;

По-горе SetCheckedState превключва квадратчето за отметка на свойството Checked на CheckBox1.

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

Друг начин да спрете изпълнението на OnClick, когато програмно промените отметеното свойство на отметка, е да се възползвате от „скритото“ (защитено) ClicksDisabled Имот.

Преглеждайки процедурата SetState на TCheckBox, която се изпълнява винаги, когато провереното свойство се промени, OnClick се пуска, ако ClicksDisabled не е вярно.

Тъй като ClicksDisabled е защитен, нямате достъп до него от вашия код.

За щастие, техниката на защитен хак ви дава достъп до онези скрити / защитени свойства на контрола на Delphi.

Достъпът до защитени членове на компонент предоставя повече информация по темата.

Това, което трябва да направите, е да декларирате прост клас манекен, разширяващ TCheckBox в същата единица, където ще използвате свойството ClicksDisabled.

След като получите ръцете си върху ClicksDisabled, просто го задайте на true, променете свойството Checked, след което задайте ClicksDisabled обратно на false (стойност по подразбиране):

Тип


 TCheckBoxEx = клас (TCheckBox);


 ...


с TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

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

 ClicksDisabled: = false;

край;

Забележка: горният код превключва отметеното свойство на отметка в квадратчето с име „CheckBox1“, използвайки защитеното свойство ClicksDisabled.

Изграждане на приложения с Delphi

  • Ръководство за начинаещи за програмиране на база данни на Delphi
  • Интегриране на основни графики в Delphi приложения
  • Как да преместите и оразмерите контролите по време на изпълнение
  • Многопоточни заявки за бази данни в Delphi
instagram story viewer