これは本当に簡単です。
データベースクエリに基づいたコントロール(ラベル、ボタン、およびボタン付きの一部のパネル)が入力されたTableLayoutPanelがあります。データを更新する必要がある場合は、TableLayoutPanel.Controls.Clear()を使用します。残念ながら、これは非常に遅い操作です。テーブルに入力するコードよりも高速であると思いますが、少なくとも3倍または4倍遅くなります。
メッセージボックスが表示された後にTableLayoutPanelに対して行われる単一の処理としてこれを実行することにより、Controls.Clear()を実行するときの速度が遅いことを明確に証明しました(その後、プロシージャが戻ります)。コントロールは下から上に向かって目に見えて消えます。レコードセットを使用してTableLayoutPanelを再設定すると、上から下に表示されるコントロールの速度は、私が見ることができる速度よりもほぼ速くなります。
私はすでにTableLayoutPanel.SuspendLayout()とResumeLayout()を実行しています。
フォームで使用this.DoubleBuffered = true
しても何も起こらないようです。
コントロール全体を破棄してコードで再作成することもできますが、これは大きな苦痛であり、優れたフォームデザイナーGUIを使用することは無意味です。コントロールに設定したすべてのプロパティを掘り下げて、そのコードの行を作成する必要があります(これは、デザイナーコード自体から取得できると思いますが、それでも間違っていると感じます)。
仕事をより速くする方法について何かアイデアはありますか?TableLayoutPanel以外のメソッドを使用することもできます...セルごとに複数のボタンを配置するか、テーブルヘッダーの列にまたがることができないようにする自由が必要です。
C#は、再描画中にフォーム全体を少なくともフリーズしてから、一度にペイントできますか?