Setați CheckBox.Checked Fără evenimentul OnClick

Controlul TCheckBox Delphi 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 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 casetei de validare în timp ce „dezactivați” evenimentul OnClick.

Îndepărtați OnClick Handler, Schimbați verificat, puneți înapoi dispozitivul OnClick original

Î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;"

Dacă atribuiți NIL la evenimentul OnClick înainte de a schimba starea casetei, apoi 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 activează 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ă ori de câte ori se modifică proprietatea Checked, OnClick este declanșat dacă ClicksDisabled nu este adevărat.

Din moment ce ClicksDisabled este protejat, nu îl poți accesa din codul tău.

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