TCheckBox Delphi kontroll viser en avkrysningsrute som kan være på (merket) eller av (ikke avkrysset). De Sjekket eiendom angir om avkrysningsruten er merket eller ikke.
Når brukeren klikker i avmerkingsboksen for å endre sin avkryssede tilstand, blir OnClick-hendelsen for avmerkingsboksen avfyrt.
Endre avmerkingsboksens merkede eiendom
Siden det ikke er noe OnCheckedChanged hendelse, vil du sannsynligvis håndtere programlogikken avhengig av avkrysset tilstand for avmerkingsboksen i OnClick-hendelsen.
Imidlertid, hvis du programmatisk endre sjekket egenskap, blir OnClick-hendelsen avfyrt - selv om ingen brukerinteraksjon fant sted.
Det er (minst) to måter å programmatisk endre den avmerkede egenskapen til avmerkingsboksen mens du "deaktiverer" OnClick-hendelsen.
Fjern OnClick-behandleren, endre merket, sett tilbake den originale OnClick-behandleren
I Delphi for Win32 kan en hendelse bare ha en hendelsesbehandler (prosedyre) knyttet til seg (selv om det er en måte å etterligne multicast-hendelser i Delphi for Win32). OnClick-hendelsens signatur av en TCheckBox-kontroll er "type TNotifyEvent = prosedyre (avsender: TObject) av objekt;"
Hvis du tilordner NIL til OnClick-hendelsen før du endrer status for avmerkingsboksen, går du tilbake til den opprinnelige prosedyren for håndtering av OnClick-hendelser - OnClick-hendelsen blir ikke avfyrt.
fremgangsmåte SetCheckedState (konst checkBox: TCheckBox; konst sjekk: boolsk);
Var
onClickHandler: TNotifyEvent;
begynne
med avkrysnings gjøre
begynne
onClickHandler: = OnClick;
OnClick: = nil;
Sjekket: = sjekk;
OnClick: = onClickHandler;
slutt;
slutt;
Bruk av denne prosedyren er enkel:
// veksle Sjekket tilstandbegynne
SetCheckedState (CheckBox1, NOT CheckBox1.Checked);
slutt;
SetCheckedState ovenfor bytter til avmerkingsegenskapen til sjekkboksen CheckBox1.
Protected Hack: ClicksDisabled: = true
En annen måte å forhindre at OnClick kjører, når du programmelt endrer egenskapen Sjekket i en avkrysningsrute, er å dra nytte av det "skjulte" (beskyttede) ClicksDisabled eiendom.
Ved å se på TCheckBoxs SetState-prosedyre som blir utført hver gang egenskapen Sjekket endres, blir OnClick avfyrt hvis ClicksDisabled ikke er sant.
Siden ClicksDisabled er beskyttet, kan du ikke få tilgang til det fra ditt kode.
Heldigvis gir den beskyttede hack-teknikken deg tilgang til de skjulte / beskyttede egenskapene til en Delphi-kontroll.
De tilgang til beskyttede medlemmene av en komponent gir mer info om emnet.
Det du trenger å gjøre er å erklære en enkel dummy-klasse som utvider TCheckBox i samme enhet hvor du vil bruke egenskapen ClicksDisabled.
Når du har fått tak i ClicksDisabled, bare sett den til true, endre egenskapen Sjekket, og sett deretter ClicksDisabled tilbake til falsk (standardverdi):
type
TCheckBoxEx = klasse (TCheckBox);
...
med TCheckBoxEx (CheckBox1) dobegin
ClicksDisabled: = sant;
Sjekket: = IKKE Sjekket;
ClicksDisabled: = falsk;
slutt;
Merk: koden ovenfor skifter egenskapen Sjekket for avmerkingsboksen "CheckBox1" ved å bruke den beskyttede ClicksDisabled-egenskapen.
Bygg applikasjoner med Delphi
- Nybegynnerguide for programmering av Delphi-databaser
- Integrere grunnleggende diagrammer i Delphi-applikasjoner
- Hvordan flytte og endre størrelse på kontroller under kjøretid
- Multithreaded Delphi Database Queries