【发布时间】:2017-07-31 19:10:54
【问题描述】:
我在 Delphi 10.1 Berlin 上使用 FMX。
我读到了这个(这是我想要的行为):
https://stackoverflow.com/a/42933567/1343976
以编程方式更改
ItemIndex不会导致触发OnChange事件。它仅在响应用户交互时触发。
这仅适用于 VCL 吗?
我要求这样做是因为,不幸的是,根据我可以测试的情况,修改代码中的 ItemIndex 属性触发OnChange 事件。
如果这是真的,我怎样才能在 FireMonkey 中实现与 VCL 相同的行为?
【问题讨论】:
-
在更改 ItemIndex 之前将 OnChange 设置为 nil,然后恢复 OnChange 处理程序。
-
@LURD 我认为这是您可以使用的更糟糕的方法。为什么?在将 OnChange 设置为 nil 之前,您需要存储其当前值以便以后能够恢复它,这意味着您需要在代码中引入另一个变量。
-
与其重置事件本身,不如设置事件查看的变量,如果设置了变量,则立即退出。但这仍然引入了一个变量。这不是世界末日...
-
@LURD:这样会更好:
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; -
@kobik,完成。谢谢。
标签: delphi events combobox firemonkey