Me pregunto por lo que cuando cambie el estado de CheckBoxestado Cambio CheckBox sin llamar OnClick evento
CheckBox->Checked=false;
que llama CheckBoxOnClick Evento, cómo evitarlo?
Me pregunto por lo que cuando cambie el estado de CheckBoxestado Cambio CheckBox sin llamar OnClick evento
CheckBox->Checked=false;
que llama CheckBoxOnClick Evento, cómo evitarlo?
Usted podría rodear el código de evento de clic con algo como
if myFlag then
begin
...event code...
end;
Si no desea que sea ejecutado, establece myFlag false y después del cambio del estado casilla de verificación puso de nuevo a la verdadera.
Espero que haya una solución de botón pero podría almacenar el evento actual en una var. TNotifyEvent, luego establecer Checkbox.OnChecked en cero y luego restaurarlo.
CheckBox-> Checked = false está en el botón pero incluso llama al evento ClickClick. Entonces lo intentaré. Gracias. – Cynede
Otra opción es cambiar la propiedad ClicksDisable protegida mediante una clase de interposición de esta manera:
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 para ClicksDisponible – yonojoy
CheckBox.State := cbUnchecked;
obras en Delphi, esto no se dispara onClickEvent
yo sepa
No funcionó para mí. – Noumenon
En las nuevas versiones de Delphi que puede utilizar ayudantes de clase para agregar esta funcionalidad:
CheckBox.SetCheckedWithoutClick(False);
utilizando la siguiente clase auxiliar para un 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;
simplemente para la corrección: Un FMX TCheckBox
se comportará similar (activación OnChange
). Puede solucionar esto usando la siguiente clase auxiliar:
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;
responsabilidad: Gracias, dummzeuch de la idea original. Tenga en cuenta los consejos habituales sobre los ayudantes de clase.
¡Es justo lo que estaba buscando! Gracias – KryNaC
tratan de esta manera:
Checkbox.OnClick := nil;
try
Checkbox.Checked := yourFlag;
finally
Checkbox.OnClick := CheckboxClick;
end;
solución simple es poner su código en el evento onclick onmouseup;
sí ...: -S eso es realmente fácil. No sé por qué no lo hice yo mismo> _ < – Cynede