C#でダブルバッファを使って画面のちらつきを防ぐ方法

今回は、C#でダブルバッファを使って画面のちらつきを防ぐ方法についてです。

画面がちらつくという現象は、画面の描画が速く行われるときに起こります。例えばウィンドウをリサイズしたりすると、画面の一部が更新されます。
このとき画面の更新が一瞬で行われると、画面がちらついて見えることがあります。これは、画面の更新がユーザーの目に追いつかないために起こります。

画面のちらつきを防ぐには、ダブルバッファという技術を使います。
ダブルバッファとは、画面に表示するデータを2つのバッファに分けて管理する方法です。
一つのバッファは、画面に表示されるバッファで、もう一つのバッファは、画面に表示する準備をするバッファです。
画面の更新が必要になったときには、準備されたバッファを画面に表示するバッファと入れ替えます。
このようにすると、画面の更新が一瞬で行われるのではなく、スムーズに行われるので、画面のちらつきが防げます。

C#のWindowsFormsでダブルバッファを使うには、DoubleBufferedプロパティを使用します。
DoubleBufferedプロパティは、コントロールのダブルバッファを有効にするかどうかを表すプロパティです。
DoubleBufferedプロパティをtrueにすると、コントロールのダブルバッファが有効になります。
ただし、単に自身のコントロールのDoubleBufferedをtrueにするだけでは、子コントロールのちらつきは防げません。
子コントロールも含めて全てのコントロールのDoubleBufferedをtrueにする必要があります。
しかし、子コントロールのDoubleBufferedは、通常は外部から設定できません。
そこで、リフレクションを使って、外部から子コントロールのDoubleBufferedを設定できるようにし、子コントロールのDoubleBufferedプロパティを再帰的にtrueに設定します。

このようにして、C#でダブルバッファを使って画面のちらつきを防ぐことができます。

変なシステムを作らないために。

こんにちは mtjです。

プログラマーの仕事をしていると 世の中のどうしてこうなった ようなシステムを見るともやもやする機会が増えます。
そこからこうなった原因はどこなんだろうと考えるのも面白いですがそうならないためにを考えていきます。

まず変なシステムを作らないためにはお客さんの要望をしっかり聞く事が大事です
・何をしたいか。
・その後どう使うか。
・どのような人が使うか。
のようにしっかり要点をまとめ、お客さんの依頼通りのシステムだけでなく 用途にあったシステムを作っていくことが重要だと思います。

依頼主は依頼主の知識内でしか想像できませんし、開発側も開発側の知識しかありません。
その2つを上手くすり合わせし必要なシステムを作ることが大事だと思います。

しかし、提案だけではシステムは上手くいきません。
システムはそこから作る人の問題もあるため結局はお客さんの伝える能力、開発側の依頼を受ける能力、開発側の開発自体の能力等すべて揃って初めて良いシステムになると思います。

自分も変なシステムを作らないようにそういった意識を持って開発していきたいと思います。

画面のデザインは難しい

2024年 本年もどうぞよろしくお願い申し上げます。

先日Windowsのソフトで画面の実装を行う機会があり、
それほど複雑な画面ではないものの、ユーザーにとって視認性の高い画面にする必要がありました。

仕様書の段階で画面のイメージは概ね出来上がっていたものの、
実装段階になるとデザインがなかなか上手くできずに困り、
結局、この件ではデザイナの方にデザインをお願いすることになりました。

WPFやMVVMなどのフレームワークが整っている環境でも、
実際にはデザイナではない開発者が、画面のデザインや実装も担当する場合が多いと思います。
その場合でもデザイナの方が行った目標とするデザイン(ゴール)がきちんとあれば、
実装はとてもやりやすいと感じました。