これは少し複雑なので、我慢してください。
TDataset.Editを呼び出しSetState(dsEdit);ます。DataEvent(deUpdateState, 0);
TDataSet.DataEventのパラメーターで呼び出されたdeUpdateState場合、データセットでコントロールを無効にしたdeLayoutChange場合、コントロールが再度有効になったときにイベントを送信するフラグを設定します。ドキュメントによると、「データのレイアウトデータベース対応コントロールが変更されました。」
再有効化されるコントロールがデータ バインド グリッドである場合、非常にコストのかかるリセットが発生し、グリッド全体を再レイアウトする必要があります。多数の行と列を含む大規模なデータセットでは、グリッドのレイアウトに影響するコントロールが無効になっている間に何もしなかった場合でも、これには数秒かかることがあります。
これが起こらないようにする方法はありますか? SetState仮想ではありません。 DataEvent仮想ですが、FEnableEventこれを設定するために使用するフィールドには、派生クラスからアクセスできません。ひどいハッキングなしにこれを回避する方法はないようです。(RTTI手術、オーバーレイクラスなど)それをうまくやってのけるより良い方法を知っている人はいますか?