我正在使用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
的vwABCField2
事件上声明任何内容。更新资料
如果我在上述函数而不是
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/