TCheckBox Delphi kontrol viser et afkrydsningsfelt, der kan være tændt (markeret) eller slukket (ikke markeret). Det Kontrolleret ejendom angiver, om afkrydsningsfeltet er markeret eller ej.
Når brugeren klikker på afkrydsningsfeltet for at ændre dets Kontrollerede tilstand, udløses OnClick-begivenheden for afkrydsningsfeltet.
Ændring af afkrydsningsfeltets markerede egenskab
Da der ikke er noget OnCheckedChanged begivenhed, håndterer du sandsynligvis programlogikken afhængig af afkrydsningsfeltets indstillede tilstand i dens OnClick-begivenhed.
Men hvis du programmatisk ændre egenskaben Kontrolleret, OnClick-begivenheden fyres - selvom der ikke fandt nogen brugerinteraktion sted.
Der er (mindst) to måder til programmatisk at ændre den markerede egenskab i afkrydsningsfeltet, mens "deaktiveres" OnClick-begivenheden.
Fjern OnClick Handler, Skift markeret, Sæt den originale OnClick-handler tilbage
I Delphi for Win32 kan en begivenhed kun have en begivenhedshåndterer (procedure) knyttet til den (selvom der er en måde at efterligne multicast-begivenheder i Delphi til Win32). OnClick-begivenhedens underskrift af en TCheckBox-kontrol er "type TNotifyEvent = procedure (Afsender: TObject) af objekt;"
Hvis du tildeler NIL til OnClick-hændelsen, før du ændrer afkrydsningsstatus, vender du tilbage til den oprindelige OnClick-hændelsesprocedure - OnClick-begivenheden fyres ikke.
procedure SetCheckedState (const checkBox: TCheckBox; const check: boolsk);
Var
onClickHandler: TNotifyEvent;
begynde
med afkrydsningsfelt gøre
begynde
onClickHandler: = OnClick;
OnClick: = nul;
Kontrolleret: = check;
OnClick: = onClickHandler;
ende;
ende;
Anvendelse af denne procedure er enkel:
// veksle Kontrolleret tilstandbegynde
SetCheckedState (CheckBox1, IKKE CheckBox1.Checked);
ende;
SetCheckedState ovenfor skifter afkrydsningsfeltet Kontrolleret egenskab i CheckBox1.
Protected Hack: ClicksDisabled: = sandt
En anden måde at forhindre OnClick i at udføre, når du programmelt ændrer egenskaben Kontrolleret i et afkrydsningsfelt, er at drage fordel af det "skjulte" (beskyttede) ClicksDisabled ejendom.
Ved at se på TCheckBox's SetState-procedure, der udføres, når egenskaben Kontrolleret ændres, udløses OnClick, hvis ClicksDisabled ikke er sandt.
Da ClicksDisabled er beskyttet, kan du ikke få adgang til det fra dit kode.
Heldigvis giver den beskyttede hack-teknik dig adgang til de skjulte / beskyttede egenskaber ved en Delphi-kontrol.
De adgang til beskyttede medlemmer af en komponent giver mere info om emnet.
Hvad du skal gøre er at erklære en simpel dummyklasse, der udvider TCheckBox i den samme enhed, hvor du vil bruge egenskaben ClicksDisabled.
Når du først har fået hånden på ClicksDisabled, skal du blot indstille den til true, ændre egenskaben Kontrolleret og derefter indstille ClicksDisabled tilbage til falsk (standardværdi):
type
TCheckBoxEx = klasse (TCheckBox);
...
med TCheckBoxEx (CheckBox1) dobegin
ClicksDisabled: = sandt;
Kontrolleret: = IKKE Kontrolleret;
ClicksDisabled: = falsk;
ende;
Bemærk: Ovenstående kode skifter egenskaben Kontrolleret i afkrydsningsfeltet "CheckBox1" ved hjælp af den beskyttede egenskab ClicksDisabled.
Bygge applikationer med Delphi
- Begyndervejledning til Delphi-databaseprogrammering
- Integration af grundlæggende diagrammer i Delphi-applikationer
- Sådan flyttes og ændres størrelse på kontroller under kørselstidspunkt
- Multithreaded Delphi-databasespørgsmål