Set CheckBox.Checked Without the OnClick Event

Das TCheckBox Delphi-Steuerelement zeigt ein Kontrollkästchen an, das aktiviert (aktiviert) oder deaktiviert (deaktiviert) sein kann. Das 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.

Checked-Eigenschaft des Kontrollkästchens ändern

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

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

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

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

In Delphi für Win32 kann an ein Ereignis nur ein Ereignishandler (eine Prozedur) angehängt werden (obwohl es eine Möglichkeit gibt, Multicast-Ereignisse in Delphi für Win32 nachzuahmen). Die Signatur eines TCheckBox-Steuerelements im OnClick-Ereignis lautet "type TNotifyEvent = procedure (Sender: TObject) of object;"

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

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

var

   onClickHandler: TNotifyEvent;

 Start

   mit checkBox tun

   Start

     onClickHandler: = OnClick;

     OnClick: = Null;

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

Ende; 

Die Verwendung dieses Verfahrens ist einfach:

 // Überprüften Zustand umschaltenStart

   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 stoppen, wenn Sie die Checked-Eigenschaft eines Kontrollkästchens programmgesteuert ändern, besteht darin, die "versteckte" (geschützte) Funktion zu nutzen. ClicksDisabled Eigentum.

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

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

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