Computerwissenschaften

Setzen Sie CheckBox.Checked ohne das OnClick-Ereignis

Das TCheckBox Delphi- Steuerelement zeigt ein Kontrollkästchen an, das aktiviert (deaktiviert ) oder deaktiviert (deaktiviert) werden kann. Die Checked-Eigenschaft gibt an, ob das Kontrollkästchen aktiviert ist oder nicht.

Wenn der Benutzer auf das Kontrollkästchen klickt, um den Status „Aktiviert“ zu ändern, wird das OnClick-Ereignis für das Kontrollkästchen ausgelöst.

 

Ändern der Checked-Eigenschaft des Kontrollkästchens

Da es kein OnCheckedChanged- Ereignis gibt, werden Sie wahrscheinlich die Programmlogik abhängig vom aktivierten Status des Kontrollkästchens in seinem OnClick-Ereignis behandeln.

Wenn Sie jedoch die Checked-Eigenschaft programmgesteuert ändern, wird das OnClick-Ereignis ausgelöst – obwohl keine Benutzerinteraktion stattgefunden hat.

Es gibt (mindestens) zwei Möglichkeiten, die aktivierte Eigenschaft des Kontrollkästchens programmgesteuert zu ändern, während das OnClick-Ereignis „deaktiviert“ wird.

 

Entfernen Sie den OnClick-Handler, ändern Sie das Kontrollkästchen und setzen Sie den ursprünglichen OnClick-Handler zurück

In Delphi für Win32 kann einem Ereignis nur ein Ereignishandler (Prozedur) zugeordnet sein (obwohl es eine Möglichkeit gibt, Multicast-Ereignisse in Delphi für Win32 nachzuahmen). Die Signatur eines TCheckBox-Steuerelements durch das OnClick-Ereignis lautet „Typ TNotifyEvent=Prozedur (Absender: TObject) des Objekts“.

Wenn Sie dem OnClick-Ereignis NIL zuweisen, bevor Sie den Status des Kontrollkästchens ändern, kehren Sie zum ursprünglichen Verfahren zur Behandlung von OnClick-Ereignissen zurück. Das OnClick-Ereignis wird nicht ausgelöst.


 Prozedur SetCheckedState ( const checkBox: TCheckBox; const check: boolean);

 

var

 

   onClickHandler: TNotifyEvent;

 

 Start

 

   mit checkBox tun

 

   Start

 

 onClickHandler:=OnClick;

 

 OnClick:=nil ;

Geprüft:=prüfen;
OnClick:=onClickHandler;

Ende ;

 

Ende ;

Die Verwendung dieses Verfahrens ist einfach:


 // umschalten Checked state begin

 

   SetCheckedState (CheckBox1, NICHT CheckBox1.Checked);

 

 Ende ;

 

Der obige SetCheckedState schaltet die Checked-Eigenschaft des CheckBox1-Kontrollkästchens um.

 

Geschützter Hack: ClicksDisabled:=true

Eine andere Möglichkeit, die Ausführung von OnClick zu verhindern, wenn Sie die Checked-Eigenschaft eines Kontrollkästchens programmgesteuert ändern, besteht darin, die „versteckte“ (geschützte) ClicksDisabled- Eigenschaft zu nutzen.

Wenn Sie sich die SetState-Prozedur der TCheckBox ansehen, die ausgeführt wird, wenn sich die Checked-Eigenschaft ändert, wird der OnClick ausgelöst, wenn ClicksDisabled nicht true ist.

Da ClicksDisabled geschützt ist, können Sie nicht über Ihren Code darauf zugreifen .

Glücklicherweise können Sie mit der geschützten Hack-Technik auf die verborgenen / geschützten Eigenschaften eines Delphi-Steuerelements zugreifen.

Der Zugriff auf geschützte Mitglieder einer Komponente bietet weitere Informationen zu diesem Thema.

Sie müssen lediglich eine einfache Dummy-Klasse deklarieren, die die TCheckBox in derselben Einheit erweitert, in der Sie die ClicksDisabled-Eigenschaft verwenden.

Wenn Sie ClicksDisabled in den Händen halten, setzen Sie es einfach auf true, ändern Sie die Checked-Eigenschaft und setzen Sie ClicksDisabled wieder auf false (Standardwert):


 Art

 


 

 TCheckBoxEx=Klasse (TCheckBox);

 


 

 ...

 


 

 mit TCheckBoxEx (CheckBox1) Dobegin

 

   ClicksDisabled:=true;

 

   Geprüft:=NICHT geprüft;

 

   ClicksDisabled:=false;

 

 Ende ;

 

Hinweis: Mit dem obigen Code wird die Checked-Eigenschaft des Kontrollkästchens „CheckBox1“ mithilfe der geschützten ClicksDisabled-Eigenschaft umgeschaltet.

 

Erstellen von Anwendungen mit Delphi

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.