更改代码中的ItemIndex属性时发生ComboBox OnChange事件

ors*_*aro 5 delphi events combobox firemonkey

我在Delphi 10.1 Berlin上使用FMX.

我读了这个(这是我想要的行为):

/sf/answers/3005349721/

ItemIndex编程方式更改不会导致OnChange事件被触发.它仅在响应用户交互时触发.

这只适用于VCL吗?

我问这是因为,不幸的是我,从我可以测试,修改ItemIndex代码属性触发OnChange事件.

如果是这样,我怎样才能在FireMonkey中实现与VCL相同的行为?

Sil*_*ior 0

处理这个问题的正确方法是首先找出OnChange处理程序是从哪里调用的。这是在方法中完成的TCustomComboBox.DoChange()

因此,您需要做的是:

  1. 覆盖默认DoChange()方法以不触发OnChange事件方法。

  2. 重写ItemIndex属性设置器以使用不会调用该DoChange()方法的不同逻辑。

这两种方法都要求您为修改后的ComboBox.

  • 如果您重写“DoChange()”,您还必须引入一个新的属性或参数,以便在决定何时触发事件(用户操作)和何时不触发事件(编码操作)时查看。您无法覆盖“ItemIndex”设置器,因为“TCustomComboBox.SetItemIndex()”一开始就不是“虚拟”,您必须修改“FMX.ListBox.pas”并将其包含在您的项目中。 (3认同)