2010-02-15 9 views

Répondre

7

Vous pouvez entourer le code d'événement onClick avec quelque chose comme

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

Si vous ne voulez pas qu'il soit exécuté, mis Mémento à false et après la case changement de l'état défini nouveau à vrai.

+0

oui ...: -S c'est vraiment facile. Je ne sais pas pourquoi je ne l'ai pas fait moi-même> _ < – Cynede

6

J'espère qu'il existe une solution de bouton, mais vous pouvez stocker l'événement en cours dans un var TNotifyEvent, puis définir Checkbox.OnChecked à zéro et le restaurer ensuite.

+0

CheckBox-> Checked = false est sur le bouton mais il appelle même l'événement onClick. Donc je vais essayer. Je vous remercie. – Cynede

9

Une autre option est de changer la propriété ClicksDisable protégée en utilisant une classe adaptatrice comme ceci:

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 pour ClicksDisabled – yonojoy

0

CheckBox.State := cbUnchecked; œuvres dans Delphi, cela ne déclenche pas onClickEvent AFAIK

+0

Ne fonctionnait pas pour moi. – Noumenon

6

Dans les nouvelles versions Delphi vous pouvez utiliser aides de classe pour ajouter cette fonctionnalité:

CheckBox.SetCheckedWithoutClick(False); 

en utilisant l'assistant de classe suivante pour une VCL 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; 

Juste pour être complet: Un FMX TCheckBox se comportera similaire (déclenchement OnChange). Vous pouvez contourner cela en utilisant l'assistant de classe suivante:

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; 

Avertissement: Merci, dummzeuch pour l'idée originale. Soyez conscient des conseils habituels concernant les aides de classe.

+0

C'est exactement ce que je cherchais !! Merci – KryNaC

2

essayer cette façon:

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

solution simple est de mettre votre code onclick en cas onmouseup;

Questions connexes