Ustaw CheckBox.Checked bez zdarzenia OnClick

Odkrywanie chronionej właściwości ClicksDisabled

Kursor ponad

Getty Images/David Gould





TCheckBox Delfy formant wyświetla pole wyboru, które może być włączone (zaznaczone) lub wyłączone (niezaznaczone). The Sprawdzona nieruchomość określa, czy pole wyboru jest zaznaczone, czy nie.

Gdy użytkownik kliknie pole wyboru, aby zmienić jego stan Checked, zostanie wywołane zdarzenie OnClick dla pola wyboru.



Zmiana zaznaczonej właściwości pola wyboru

Ponieważ nie ma Po sprawdzeniuZmieniono zdarzenia, prawdopodobnie będziesz obsługiwał logikę programu zależną od zaznaczonego stanu pola wyboru w jego zdarzeniu OnClick.

Jeśli jednak programowo zmień właściwość Checked, zostanie wywołane zdarzenie OnClick -- mimo że nie doszło do interakcji użytkownika.



Istnieją (co najmniej) dwa sposoby programowej zmiany właściwości checkbox pola wyboru podczas „wyłączania” zdarzenia OnClick.

Usuń obsługę OnClick, Zmień zaznaczone, odłóż oryginalną obsługę OnClick

W Delphi dla Win32 do zdarzenia może być dołączony tylko jeden program obsługi zdarzeń (procedura) (nawet jeśli istnieje sposób na naśladowanie zdarzeń multiemisji w Delphi dla Win32). Sygnatura zdarzenia OnClick kontrolki TCheckBox to 'type TNotifyEvent = procedure(Sender: TObject) obiektu;'

Jeśli przypiszesz NIL do zdarzenia OnClick przed zmianą stanu pola wyboru, a następnie powrócisz do oryginalnej procedury obsługi zdarzenia OnClick — zdarzenie OnClick nie zostanie wywołane.

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
Sprawdzone := sprawdź;
OnClick := onClickHandler;
|_+_|
|_+_|

Zastosowanie tej procedury jest proste:



|_+_||_+_|
|_+_|
|_+_|

Powyższy SetCheckedState przełącza właściwość Checked pola wyboru CheckBox1.

Protected Hack: ClicksDisabled: = true

Innym sposobem na zatrzymanie wykonywania OnClick, gdy programowo zmienisz właściwość Checked pola wyboru, jest skorzystanie z „ukrytego” (chronionego) Kliknięcia wyłączone własność.



Patrząc na procedurę SetState TCheckBox, która jest wykonywana przy każdej zmianie właściwości Checked, OnClick jest uruchamiany, jeśli ClicksDisabled nie jest prawdziwe.

Ponieważ ClicksDisabled jest chroniony, nie możesz uzyskać do niego dostępu ze swojego kod .



Na szczęście technika chronionego hakowania umożliwia dostęp do ukrytych/chronionych właściwości kontrolki Delphi.

Dostęp do chronionych członków składnika zawiera więcej informacji na ten temat.



To, co musisz zrobić, to zadeklarować prostą klasę fikcyjną rozszerzającą TCheckBox w tej samej jednostce, w której będziesz używać właściwości ClicksDisabled.

Gdy zdobędziesz ClicksDisabled, po prostu ustaw go na true, zmień właściwość Checked, a następnie ustaw ClicksDisabled z powrotem na false (wartość domyślna):

|_+_||_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|
|_+_|

Uwaga: powyższy kod przełącza właściwość Checked pola wyboru o nazwie „CheckBox1” przy użyciu chronionej właściwości ClicksDisabled.

Tworzenie aplikacji z Delphi