画面を頻繁にリフレッシュするプログラムを作る場合、コントロールが持つDoubleBufferedプロパティをtrueすることで、ダブルバッファ機能を有効にすることが出来ます。
Formの場合は、Form1.DoubleBuffered = trueとすればOKなのですが、DataGridView等のコントロールの場合はこのプロパティがProtectedとなっているため、プログラムから値を変更することが出来ません。
この場合は、リフレクションを使用して、DoubleBufferedプロパティを強制的にtrueにすれば、チラツキを抑えられます。
public static void SetDoubleBuffered(System.Windows.Forms.Control c) { // リモートアクセス中の場合は何もしない if (System.Windows.Forms.SystemInformation.TerminalServerSession) { return; } // ダブルバッファ制御用のプロパティを強制的に取得する System.Reflection.PropertyInfo p; p = typeof( System.Windows.Forms.Control).GetProperty( "DoubleBuffered", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); // ダブルバッファを有効にする p.SetValue(c, true, null); } |
関連記事
コメントを残す