wm_setredraw
を使用して.NET制御再挿入を最適化します.NET開発者は、大規模な更新中に、コントロール内およびその子供内で一時的に補充を停止する必要があることがよくあります。 SuspendLayout
とResumeLayout
レイアウトを管理していますが、彼らは完全に再描画を抑制しません。
wm_setredrawソリューション
コントロールのウィンドウハンドルに送信されるWM_SETREDRAW
メッセージは、堅牢なソリューションを提供します。 ブールパラメーターは再描画を制御します:false
無効にし、true
を有効にします。
サスペンドドローと再開の方法の実装
この合理化されたクラスは、機能をカプセル化します:
<code class="language-csharp">public static class ControlPainting { [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam); private const int WM_SETREDRAW = 11; public static void SuspendPainting(Control parent) { SendMessage(parent.Handle, WM_SETREDRAW, false, 0); } public static void ResumePainting(Control parent) { SendMessage(parent.Handle, WM_SETREDRAW, true, 0); parent.Refresh(); } }</code>
使用例
塗り直しを防ぐため:
<code class="language-csharp">ControlPainting.SuspendPainting(myControl); // ... perform modifications ... ControlPainting.ResumePainting(myControl);</code>
さらに読み取り
詳細な情報については、これらのリソースを参照してください:
以上が.NETコントロールとその子供のために塗装を効率的に一時停止して再開するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。