这有点涉及,所以请耐心等待。
TDataset.Edit
调用SetState(dsEdit);
,调用DataEvent(deUpdateState, 0);
TDataSet.DataEvent
,当使用参数调用时deUpdateState
,如果您禁用了数据集上的控件,它会设置一个标志,deLayoutChange
当控件重新启用时将发送一个事件,根据文档,这有点模糊地表示“数据的布局数据感知控件发生了变化。”
当重新启用的控件是数据绑定网格时,这可能会导致一些非常昂贵的重置,从而迫使整个网格重新布局。在具有大量行和列的大型数据集上,这可能需要几秒钟,即使您在禁用影响网格布局的控件时没有执行任何操作。
有什么办法可以防止这种情况发生吗? SetState
不是虚拟的。 DataEvent
是虚拟的,但FEnableEvent
它用来设置它的字段不能从派生类访问。如果没有严重的黑客行为,似乎没有任何方法可以解决这个问题。(RTTI 手术、叠加课程等)有人知道更好的方法吗?