C#

【C#】Panelに描画する時のちらつきを防止する方法

何も考えずにフォーム上にPanelをフォーム上に配置して描画処理を書くとちらつきが発生することがあります。ちらつきがあるとアプリを使う時にどうしても目障りで気になりますよね。

そんな時にPanelのちらつきを防止する方法を紹介します。

【方法①】Panelを継承したクラスでダブルバッファ設定する

ダブルバッファの設定をPanelにすることで、描画時にちらつかないようにすることができます。

ですが、PanelにはForm等にあるようなDoubleBufferedの公開プロパティがないので直接プロパティの設定を変更することはできません。なのでPanelを継承したクラスを作成することでDoubleBufferedのプロパティ変更を行います。

このようにPanelを継承させたクラスを作成し、コンストラクタでDoubleBufferedプロパティを設定してあげればOKです。後はこの継承したPanelクラスを使うようにしましょう。

参考で書いておきますが、DoubleBufferedプロパティの代わりにSetStyleメソッドでも同じようにちらつき防止設定ができます。以下がやり方になります。

【方法②】リフレクションでPanelのDoubleBufferedプロパティを設定する

C#のリフレクションの機能を使うことで、わざわざPanelを継承したクラスを作らなくてもダブルバッファ設定を外からすることが可能です。

コードは以下のように書きます。

リフレクションは引数の数が多かったりしてややこしいので使う際は引数の意味等をしっかり理解して使うようにしましょう。