[C#]Formのコントロールをダブルバッファ対応にする方法

画面を頻繁にリフレッシュするプログラムを作る場合、コントロールが持つ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); 
}

関連記事

コメントを残す

メールアドレスが公開されることはありません。