我正在使用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;
陈述。
答案 0 :(得分:3)
正如官方文件所述:
不要更改OnEditValueChanged事件处理程序中的编辑值,因为这可能导致堆栈溢出。使用此事件可以获得编辑值已更改的通知。
因为当您更改此事件中的编辑值时,您的editvalue会被更改,因此会一次又一次地调用OnEditValueChanged事件并且......