delphi - 使用 Devexpress VCL 13.1.2 时出现 Stackoverflow 错误(无限循环)

标签 delphi devexpress vcl

我正在使用 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 过程。我不知道为什么。我尚未在 vwABCField2OnEditValueChanged 事件上声明任何内容。

更新

如果我在上述函数中编写任何其他内容而不是 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/

相关文章:

android - Java字节数组到Delphi字节数组

string - 如何在 TVarRec 中设置字符串(或 AnsiString)常量?

delphi - Delphi IDE是用什么IDE开发的?

css - 开发 express CSS "dx:"

Delphi菜单合并问题

delphi - 良好的 Delphi Prism 在线资源

c# - DevExpress Winform控件Radiobutton组

asp.net-mvc-3 - 带有 Autofac 简单网格绑定(bind)的 DevExpress

delphi - 如何减少 Delphi 中的 PageControl 闪烁?

c++ - 受 VCL 影响的基准测试