我正在使用 TcxGridDBBandedTableView
并有两列 TcxGridDBBandedColumn
类型。
vwABC : TcxGridDBBandedTableView
vwABCField1 : TcxGridDBBandedColumn
vwABCField2 : TcxGridDBBandedColumn
当我更改 vwABCField1 中的任何内容时,vwABCField2 值应该被清除。为此,我使用 vwABCField1 的 OnEditValueChanged
属性,如下所示:
procedure TMyForm.vwABCField1PropertiesEditValueChanged(Sender: TObject);
begin
vwABCField2.EditValue := '';
end;
在调试时,当我到达 vwABCField2.EditValue := '';
语句时,我再也没有返回并陷入无限循环中,一段时间后我收到了 stackoverflow 错误。
vwABCField2.EditValue := '';
正在无限次递归地一次又一次调用 vwABCField1PropertiesEditValueChanged
过程。我不知道为什么。我尚未在 vwABCField2
的 OnEditValueChanged
事件上声明任何内容。
更新
如果我在上述函数中编写任何其他内容而不是 vwABCField2.EditValue := '';
,则它将仅被调用一次。例如
procedure TMyForm.vwABCField1PropertiesEditValueChanged(Sender:TObject);
begin
ShowMessage("hi");
end;
工作正常。所以我怀疑罪魁祸首是 vwABCField2.EditValue := '';
语句。
最佳答案
正如官方文档所述:
Do not change the edit value in your OnEditValueChanged event handler, as this can result in stack overflow. Use this event to get notification that the edit value has changed.
因为当你在此事件中更改编辑值时,当然,你的编辑值也会更改,因此一次又一次调用 OnEditValueChanged 事件......
关于delphi - 使用 Devexpress VCL 13.1.2 时出现 Stackoverflow 错误(无限循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21849089/