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

标签 delphi events combobox firemonkey

我在 Delphi 10.1 Berlin 上使用 FMX。

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

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

Changing ItemIndex programmatically does not result in the OnChange event being fired. It fires only in response to user interaction.

这仅适用于 VCL 吗?

我之所以提出这个要求,是因为不幸的是,根据我的测试,修改代码中的 ItemIndex 属性会触发 OnChange 事件。

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

最佳答案

Is this true only for VCL?

FMX 中许多事情都以不同的方式处理。

If this is true, how can I achieve the same behaviour as VCL in FireMonkey?

一个简单的解决方法是在更改 ItemIndex 之前清空 OnChange 事件属性,然后恢复事件。

执行此操作的简单例程如下(如@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;  

关于delphi - 更改代码中的 ItemIndex 属性时会发生 ComboBox OnChange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45423581/

相关文章:

delphi - 以较慢的速率发送 TCP POST 请求

jQuery 应该将具有类似事件的选择器分组为 1 个选择器。

javascript - jQuery .on() 方法在 Chrome 中不起作用(但在 IE 和 FF 中起作用)

javascript - Vue.js - 在点击事件上添加类

c# - WinForms 组合框

c++ - 将 C++ 回调函数转换为 Delphi

delphi - 启用MultiSelect的TListBox拖放问题

delphi - 如何最好地将记录添加到TArray

grails - 用于组合框的jQuery easyui数据网格编辑器未随grails一起加载

xaml - 如何让组合框只在 Windows 8 中向下拉伸(stretch)