使用Devexpress VCL 13.1.2时的Stackoverflow错误(无限循环)

时间:2014-02-18 09:20:48

标签: 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 := '';语句时,我永远不会返回并被困在infine循环中,并且在一段时间后我得到stackoverflow错误。

vwABCField2.EditValue := '';一次又一次地调用vwABCField1PropertiesEditValueChanged过程,递归无限时间。我不知道为什么。我没有在OnEditValueChanged的{​​{1}}事件中声明任何内容。

更新

如果我在上面的函数中写了其他内容而不是vwABCField2,那么它只会被调用一次。例如

vwABCField2.EditValue := '';

工作正常。所以我怀疑罪魁祸首是procedure TMyForm.vwABCField1PropertiesEditValueChanged(Sender:TObject); begin ShowMessage("hi"); end; 陈述。

1 个答案:

答案 0 :(得分:3)

正如官方文件所述:

  

不要更改OnEditValueChanged事件处理程序中的编辑值,因为这可能导致堆栈溢出。使用此事件可以获得编辑值已更改的通知。

因为当您更改此事件中的编辑值时,您的editvalue会被更改,因此会一次又一次地调用OnEditValueChanged事件并且......