Je me demande quand je change d'état de CheckBoxModifier l'état CheckBox sans appeler l'événement OnClick
CheckBox->Checked=false;
Il appelle CheckBoxOnClick événement, comment l'éviter?
Je me demande quand je change d'état de CheckBoxModifier l'état CheckBox sans appeler l'événement OnClick
CheckBox->Checked=false;
Il appelle CheckBoxOnClick événement, comment l'éviter?
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.
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.
CheckBox-> Checked = false est sur le bouton mais il appelle même l'événement onClick. Donc je vais essayer. Je vous remercie. – Cynede
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;
+1 pour ClicksDisabled – yonojoy
CheckBox.State := cbUnchecked;
œuvres dans Delphi, cela ne déclenche pas onClickEvent
AFAIK
Ne fonctionnait pas pour moi. – Noumenon
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.
C'est exactement ce que je cherchais !! Merci – KryNaC
essayer cette façon:
Checkbox.OnClick := nil;
try
Checkbox.Checked := yourFlag;
finally
Checkbox.OnClick := CheckboxClick;
end;
solution simple est de mettre votre code onclick en cas onmouseup;
oui ...: -S c'est vraiment facile. Je ne sais pas pourquoi je ne l'ai pas fait moi-même> _ < – Cynede