我在Delphi 10.1 Berlin上使用FMX。
我读过这个(这是我想要的行为):
https://stackoverflow.com/a/42933567/1343976
以编程方式更改
ItemIndex
不会导致OnChange
事件被触发。它仅在响应用户交互时触发。
这仅适用于VCL吗?
我要求这样做,因为不幸的是,我可以测试,修改代码中的ItemIndex
属性触发 OnChange
事件。
如果是这样,我怎样才能在FireMonkey中实现与VCL相同的行为?
答案 0 :(得分:2)
这仅适用于VCL吗?
在FMX中,许多事情都以不同的方式处理。
如果是这样,我怎样才能在FireMonkey中实现与VCL相同的行为?
一个简单的解决方法是在更改OnChange
之前以及之后恢复事件之前使ItemIndex
事件属性为零。
执行此操作的简单例程就像这样(如@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;
答案 1 :(得分:0)
处理此问题的正确方法是首先找出调用DoChange()
处理程序的位置。这是在OnChange
方法中完成的。
所以,你需要做的是:
覆盖默认的ItemIndex
方法,不会触发DoChange()
事件方法。
覆盖ComboBox
属性设置器,使用不同的逻辑,不会调用varchar(10)
方法。
这两种方法都要求您为修改后的="javascript:void(window.open('http://www.report.utm.com/Reports/Pages/Report.aspx?ItemPath=%2fTechn+Info%2fConst_Tel&**ConstID=" & Fields!CONSTITUENTID.Value** & "','_blank'))"
创建新类。