delphi events combobox firemonkey

delphi - El evento ComboBox OnChange ocurre cuando se cambia la propiedad ItemIndex en el código



events firemonkey (2)

La forma correcta de resolver este problema es primero averiguar de dónde se OnChange controlador OnChange . Esto se está haciendo en el método TCustomComboBox.DoChange() .

Entonces, lo que debes hacer es:

  1. anula el DoChange() predeterminado DoChange() para no OnChange método de evento OnChange .

  2. anula el setter de propiedades de ItemIndex para usar una lógica diferente que no llamará al método DoChange() .

Ambos enfoques requieren que crees una nueva clase para tu ComboBox modificado.

Estoy usando FMX en Delphi 10.1 Berlin.

Leo esto (que es el comportamiento que quiero):

https://stackoverflow.com/a/42933567/1343976

Cambiar ItemIndex programación no OnChange el OnChange evento OnChange . Dispara solo en respuesta a la interacción del usuario.

¿Es esto cierto solo para VCL?

Estoy pidiendo esto porque, desafortunadamente para mí, por lo que puedo probar, la modificación de la propiedad ItemIndex en el código desencadena el evento OnChange .

Si esto es cierto, ¿cómo puedo lograr el mismo comportamiento que VCL en FireMonkey?


¿Es esto cierto solo para VCL?

Muchas cosas se manejan de manera diferente en FMX.

Si esto es cierto, ¿cómo puedo lograr el mismo comportamiento que VCL en FireMonkey?

Una solución simple es OnChange propiedad del evento OnChange antes de cambiar el ItemIndex y luego restaurar el evento.

Una rutina simple para hacer esto sería algo así (como se describe en @Remy):

procedure SetItemIndex(ix : Integer; cb: TComboBox); var original : TNotifyEvent; begin original := cb.OnChange; cb.OnChange := nil; try cb.ItemIndex := ix; finally cb.OnChange := original; end; end;