使用 Devexpress VCL 13.1.2 时出现堆栈溢出错误(无限循环)



我正在使用TcxGridDBBandedTableView,并且有两列类型为TcxGridDBBandedColumn

vwABC : TcxGridDBBandedTableView
vwABCField1 : TcxGridDBBandedColumn
vwABCField2 : TcxGridDBBandedColumn
当我更改 vwABCField1

中的任何内容时,应该清除 vwABCField2 值。为此,我使用 vwABCField1 的属性OnEditValueChanged如下所示:

procedure TMyForm.vwABCField1PropertiesEditValueChanged(Sender: TObject);
begin
  vwABCField2.EditValue := '';
end;

在调试时,当我来到vwABCField2.EditValue := '';语句时,我永远不会返回并陷入精细循环中,一段时间后我得到堆栈溢出错误。

vwABCField2.EditValue := '';一次又一次地递归无限地调用vwABCField1PropertiesEditValueChanged过程。我不知道为什么。我没有就vwABCField2事件OnEditValueChanged声明任何声明.

更新

如果我在上面的函数中编写任何其他内容而不是vwABCField2.EditValue := '';,它只会被调用一次。例如

procedure TMyForm.vwABCField1PropertiesEditValueChanged(Sender:TObject); 
begin   
  ShowMessage("hi"); 
end;

工作正常。所以我怀疑罪魁祸首是vwABCField2.EditValue := '';的说法。

如官方文档所述:

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

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

最新更新