我正在使用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 事件,并且......