Stel CheckBox in. Aangevinkt zonder het OnClick-evenement

De TCheckBox Delphi controle geeft een selectievakje weer dat aan (aangevinkt) of uit (uitgeschakeld) kan zijn. De Gecontroleerde eigenschap specificeert of het selectievakje is aangevinkt of niet.

Wanneer de gebruiker op het selectievakje klikt om de status Gecontroleerd te wijzigen, wordt de OnClick-gebeurtenis voor het selectievakje geactiveerd.

De aangevinkte eigenschap van het selectievakje wijzigen

Omdat er geen is OnCheckedChanged gebeurtenis, zult u waarschijnlijk de programmalogica afhandelen, afhankelijk van de aangevinkte status van het selectievakje in zijn OnClick-gebeurtenis.

Maar als je programmatisch de eigenschap Checked wijzigen, wordt de OnClick-gebeurtenis geactiveerd - hoewel er geen gebruikersinteractie heeft plaatsgevonden.

Er zijn (ten minste) twee manieren om de aangevinkte eigenschap van het selectievakje programmatisch te wijzigen terwijl u de OnClick-gebeurtenis "uitschakelt".

OnClick-handler verwijderen, aangevinkt wijzigen, de originele OnClick-handler terugzetten

instagram viewer

In Delphi voor Win32 kan een gebeurtenis slechts één gebeurtenishandler (procedure) hebben (hoewel er een manier is om multicast-gebeurtenissen in Delphi voor Win32 na te bootsen). De handtekening van de OnClick-gebeurtenis van een TCheckBox-besturingselement is "type TNotifyEvent = procedure (Sender: TObject) van 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 check: boolean);

var

 onClickHandler: TNotifyEvent;

beginnen

met checkBox Doen

beginnen

 onClickHandler: = OnClick;

 OnClick: = nihil;

Aangevinkt: = check;
OnClick: = onClickHandler;
einde;

einde; 

Het gebruik van deze procedure is eenvoudig:

// toggle Gecontroleerde staatbeginnen

 SetCheckedState (CheckBox1, NOT CheckBox1.Checked);

einde;

De SetCheckedState hierboven schakelt de eigenschap Checked van het selectievakje CheckBox1 in.

Beschermde hack: ClicksDisabled: = true

Een andere manier om te voorkomen dat de OnClick wordt uitgevoerd, wanneer u de eigenschap Checked van een selectievakje programmatisch wijzigt, is om te profiteren van het "verborgen" (beveiligd) Klikken uitgeschakeld eigendom.

Door te kijken naar de SetState-procedure van de TCheckBox die wordt uitgevoerd wanneer de eigenschap Checked verandert, wordt de OnClick geactiveerd als ClicksDisabled niet waar is.

Aangezien ClicksDisabled is beveiligd, hebt u er geen toegang toe vanaf uw code.

Gelukkig biedt de beschermde hacktechniek je toegang tot die verborgen / beschermde eigenschappen van een Delphi-besturingselement.

De toegang tot beschermde leden van een component biedt meer informatie over het onderwerp.

Wat u moet doen, is een eenvoudige dummy-klasse declareren die de TCheckBox uitbreidt in dezelfde eenheid waar u de eigenschap ClicksDisabled gaat gebruiken.

Zodra u ClicksDisabled in handen heeft, stelt u deze eenvoudig in op true, wijzigt u de eigenschap Checked en stelt u ClicksDisabled weer in op false (standaardwaarde):

type


 TCheckBoxEx = class (TCheckBox);


 ...


met TCheckBoxEx (CheckBox1) dobegin

 ClicksDisabled: = true;

 Aangevinkt: = NIET aangevinkt;

 ClicksDisabled: = false;

einde;

Opmerking: de bovenstaande code schakelt de eigenschap Checked van het selectievakje met de naam "CheckBox1" in met de beveiligde eigenschap ClicksDisabled.

Toepassingen bouwen met Delphi

  • Beginnershandleiding voor Delphi-databaseprogrammering
  • Basisgrafieken integreren in Delphi-toepassingen
  • Hoe u besturingselementen tijdens runtime kunt verplaatsen en het formaat ervan kunt wijzigen
  • Multithreaded Delphi-databasequery's
instagram story viewer