Ich frage mich, wenn ich also Zustand der CheckBoxändern CheckBox Zustand ohne OnClick Ereignis ruft
ändernCheckBox->Checked=false;
Es ruft CheckBoxOnClick Ereignis, wie es zu vermeiden?
Ich frage mich, wenn ich also Zustand der CheckBoxändern CheckBox Zustand ohne OnClick Ereignis ruft
ändernCheckBox->Checked=false;
Es ruft CheckBoxOnClick Ereignis, wie es zu vermeiden?
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.
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.
CheckBox-> Checked = false ist auf den Knopf, aber es ruft auch onClick Ereignis. Also werde ich es versuchen. Vielen Dank. – Cynede
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;
+1 für ClicksDisabled – yonojoy
CheckBox.State := cbUnchecked;
Werke in Delphi, das Feuer nicht onClickEvent
AFAIK
Hat bei mir nicht funktioniert. – Noumenon
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.
Es ist genau das, was ich gesucht habe !! Vielen Dank – KryNaC
versuchen auf diese Weise:
Checkbox.OnClick := nil;
try
Checkbox.Checked := yourFlag;
finally
Checkbox.OnClick := CheckboxClick;
end;
Einfache Lösung ist Ihr Onclick Code in onmouseup Ereignis zu setzen;
ja ...: -S das ist wirklich einfach. Ich weiß nicht warum ich es nicht selbst gemacht habe> _ < – Cynede