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

更新资料

如果我在上述函数而不是vwABCField2.EditValue := '';中写了其他任何东西,它将仅被调用一次。例如

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


工作良好。因此,我怀疑罪魁祸首是vwABCField2.EditValue := '';语句。

最佳答案

如官方文件中所述:


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


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

关于delphi - 使用Devexpress VCL 13.1.2时出现Stackoverflow错误(无限循环),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21849089/

10-13 05:44