Angi CheckBox. Sjekket uten OnClick-hendelsen

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

instagram viewer

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