Het TCheckBox Delphi-besturingselement geeft een selectievakje weer dat kan worden ingeschakeld (aangevinkt) of uitgeschakeld (niet aangevinkt). De Gecontroleerde eigendom geeft aan of het selectievakje is ingeschakeld of niet.
Wanneer de gebruiker op het selectievakje klikt om de status Gecontroleerd te wijzigen, wordt de OnClick-gebeurtenis voor het selectievakje geactiveerd.
Aangezien er geen is OnCheckedChanged gebeurtenis, zult u waarschijnlijk de programmalogica afhandelen, afhankelijk van de aangevinkte status van het selectievakje in de OnClick-gebeurtenis.
Echter, als u verander de eigenschap Gecontroleerd, de OnClick-gebeurtenis wordt geactiveerd -- hoewel er geen gebruikersinteractie plaatsvond.
Er zijn (ten minste) twee manieren om de aangevinkte eigenschap van het selectievakje programmatisch te wijzigen terwijl de OnClick-gebeurtenis wordt "uitgeschakeld".
In Delphi voor Win32 kan aan een gebeurtenis slechts één gebeurtenishandler (procedure) zijn gekoppeld (hoewel er een manier is om multicast-gebeurtenissen na te bootsen in Delphi voor Win32). De handtekening van de OnClick-gebeurtenis van een TCheckBox-besturingselement is "type TNotifyEvent = procedure (Sender: TObject) of object;"
Als u NIL toewijst aan de OnClick-gebeurtenis voordat u de status van het selectievakje wijzigt, keert u terug naar de oorspronkelijke OnClick-gebeurtenisafhandelingsprocedure - de OnClick-gebeurtenis wordt niet geactiveerd.
procedure SetCheckedState (const checkBox: TCheckBox; const selectievakje: boolean);
var
onClickHandler: TNotifyEvent;
beginnen
met checkbox Doen
beginnen
onClickHandler: = OnClick;
OnClick: = nul;
einde;
einde;
Het gebruik van deze procedure is eenvoudig:
// schakelen Gecontroleerde statusbeginnen
SetCheckedState (CheckBox1, NIET CheckBox1.Checked);
einde;
De SetCheckedState hierboven schakelt de eigenschap Gecontroleerd van het selectievakje CheckBox1 in.
Een andere manier om te stoppen met het uitvoeren van OnClick, wanneer u de eigenschap Gecontroleerd van een selectievakje programmatisch wijzigt, is om te profiteren van de "verborgen" (beschermd) ClicksDisabled eigendom.
Door te kijken naar de SetState-procedure van de TCheckBox die wordt uitgevoerd wanneer de eigenschap Gecontroleerd verandert, wordt de OnClick geactiveerd als ClicksDisabled niet waar is.
Omdat ClicksDisabled is beveiligd, hebt u er geen toegang toe vanuit uw code.
Gelukkig kun je met de beveiligde hacktechniek toegang krijgen tot die verborgen / beschermde eigenschappen van een Delphi-besturingselement.