Setați CheckBox. Verificat fără evenimentul OnClick

TCheckBox Delphi control afișează o casetă de selectare care poate fi activată (bifată) sau dezactivată (bifată). Proprietate verificată specifică dacă caseta este bifată sau nu.

Când utilizatorul face clic pe caseta de schimbare pentru a-și schimba starea de verificare, evenimentul OnClick pentru caseta de selectare este activat.

Modificarea proprietății verificate din caseta de selectare

Deoarece nu există OnCheckedChanged eveniment, probabil că veți gestiona logica programului dependentă de starea bifată a casetei în evenimentul său OnClick.

Cu toate acestea, dacă tu schimbați programatic proprietatea Checked, evenimentul OnClick va fi lansat - chiar dacă nu a avut loc interacțiunea utilizatorului.

Există (cel puțin) două moduri de a modifica programatic proprietatea bifată a căsuței de selectare în timp ce „dezactivați” evenimentul OnClick.

Scoateți OnClick Handler, Schimbați verificat, puneți înapoi dispozitivul OnClick

În Delphi pentru Win32, un eveniment poate avea un singur gestionator de evenimente (procedura) atașat la acesta (chiar dacă există o modalitate de a imita evenimentele multicast în Delphi pentru Win32). Semnătura evenimentului OnClick a unui control TCheckBox este „tip TNotifyEvent = procedura (expeditor: TObject) a obiectului;"

instagram viewer

Dacă atribuiți NIL la evenimentul OnClick înainte de a schimba starea casetei, atunci reveniți la procedura inițială de gestionare a evenimentelor OnClick - evenimentul OnClick nu va fi lansat.

procedură SetCheckedState (const checkBox: TCheckBox; const verificare: boolean);

var

 onClickHandler: TNotifyEvent;

începe

cu Caseta de bifat do

începe

 onClickHandler: = OnClick;

 OnClick: = zero;

Verificat: = verificare;
OnClick: = onClickHandler;
Sfârșit;

Sfârșit; 

Utilizarea acestei proceduri este simplă:

// comută starea verificatăîncepe

 SetCheckedState (CheckBox1, NOT CheckBox1.Checked);

Sfârșit;

SetCheckedState de mai sus comută proprietatea Checked din caseta de selectare CheckBox1.

Protect Hack: ClicksDisabled: = true

Un alt mod de a opri executarea OnClick, atunci când schimbați programatic proprietatea Checked a unei căsuțe, este să profitați de „ascuns” (protejat) ClicksDisabled proprietate.

Analizând procedura SetState TCheckBox care se execută de fiecare dată când se modifică proprietatea Checked, OnClick este declanșat dacă ClicksDisabled nu este adevărat.

Din moment ce ClicksDisabled este protejat, nu îl puteți accesa de la dvs. cod.

Din fericire, tehnica hack-ului protejat vă permite să accesați acele proprietăți ascunse / protejate ale unui control Delphi.

Accesarea membrilor protejați ai unei componente oferă mai multe informații despre subiect.

Ceea ce trebuie să faceți este să declarați o clasă simplă de manechin care extinde TCheckBox în aceeași unitate în care veți utiliza proprietatea ClicksDisabled.

După ce puneți mâna pe ClicksDisabled, pur și simplu setați-o pe true, schimbați proprietatea Checked, apoi setați ClicksDisabled din nou pe false (valoarea implicită):

tip


 TCheckBoxEx = clasă (TCheckBox);


 ...


cu TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

 Verificat: = NU Verificat;

 ClicksDisabled: = false;

Sfârșit;

Notă: codul de mai sus comută proprietatea verificată din caseta de selectare numită "CheckBox1" folosind proprietatea ClicksDisabled protejată.

Construirea aplicațiilor cu Delphi

  • Ghid pentru începători pentru programarea bazelor de date Delphi
  • Integrarea graficelor de bază în aplicațiile Delphi
  • Cum să mutați și să redimensionați controalele la timpul de execuție
  • Interogări de baze de date Delphi multithreaded