2010-02-15 6 views

Antwort

7

Sie könnten den onClick-Ereigniscode mit so etwas wie

if myFlag then 
    begin 
    ...event code... 
    end; 

umgeben Wenn Sie es ausgeführt werden soll, nicht wollen, setzen Sie myFlag auf false und nach der Änderung es zurück auf true gesetzt ist Checkbox Zustand.

+0

ja ...: -S das ist wirklich einfach. Ich weiß nicht warum ich es nicht selbst gemacht habe> _ < – Cynede

6

Ich hoffe, es gibt eine Button-Lösung, aber man könnte das aktuelle Ereignis in einem TNotifyEvent var speichern, stellen Sie dann Checkbox.OnChecked auf Null und es danach wieder herzustellen.

+0

CheckBox-> Checked = false ist auf den Knopf, aber es ruft auch onClick Ereignis. Also werde ich es versuchen. Vielen Dank. – Cynede

9

Eine weitere Option ist die geschützte ClicksDisable Eigenschaft mit einem Einfügestück Klasse wie folgt zu ändern:

type 
    THackCheckBox = class(TCustomCheckBox) 
    end; 

procedure TCheckBox_SetCheckedNoOnClick(_Chk: TCustomCheckBox; _Checked: boolean); 
var 
    Chk: THackCheckBox; 
begin 
    Chk := THackCheckBox(_Chk); 
    Chk.ClicksDisabled := true; 
    try 
    Chk.Checked := _Checked; 
    finally 
    Chk.ClicksDisabled := false; 
    end; 
end; 
+0

+1 für ClicksDisabled – yonojoy

0

CheckBox.State := cbUnchecked; Werke in Delphi, das Feuer nicht onClickEvent AFAIK

+0

Hat bei mir nicht funktioniert. – Noumenon

6

In neueren Delphi-Versionen Sie verwenden können, Klasse Helfer diese Funktionalität hinzuzufügen:

CheckBox.SetCheckedWithoutClick(False); 

durch die folgende Klasse Helfer für eine VCL mit TCheckBox:

TCheckBoxHelper = class helper for TCheckBox 
    procedure SetCheckedWithoutClick(AChecked: Boolean); 
end; 

procedure TCheckBoxHelper.SetCheckedWithoutClick(AChecked: Boolean); 
begin 
    ClicksDisabled := True; 
    try 
     Checked := AChecked; 
    finally 
     ClicksDisabled := False; 
    end; 
end; 

Nur der Vollständigkeit halber: Ein FMX TCheckBox verhält sich ähnlich (Triggerung OnChange). Sie können dies umgehen, indem Sie die folgende Klasse Helfer mit:

TCheckBoxHelper = class helper for TCheckBox 
    procedure SetCheckedWithoutClick(AChecked: Boolean); 
end; 

procedure TCheckBoxHelper.SetCheckedWithoutClick(AChecked: Boolean); 
var 
    BckEvent: TNotifyEvent; 
begin 
    BckEvent := OnChange; 
    OnChange := nil; 
    try 
     IsChecked := AChecked; 
    finally 
     OnChange := BckEvent; 
    end; 
end; 

Haftungsausschluss: Danke, dummzeuch für die ursprüngliche Idee. Beachten Sie die üblichen Hinweise zu Klassenhelfern.

+0

Es ist genau das, was ich gesucht habe !! Vielen Dank – KryNaC

2

versuchen auf diese Weise:

Checkbox.OnClick := nil; 
try 
    Checkbox.Checked := yourFlag; 
finally 
    Checkbox.OnClick := CheckboxClick; 
end; 
-1

Einfache Lösung ist Ihr Onclick Code in onmouseup Ereignis zu setzen;