|
.NET TIPS 文字列や画像を無効状態で描画するには?デジタルアドバンテージ 一色 政彦2005/05/27 |
![]() |
|
|
|
「TIPS:画像を高品質に拡大/縮小するには?」でも示されているように、文字列や画像を描画するには、それぞれGraphicsクラス(System.Drawing名前空間)の次のメソッドを利用すればよい。
- 文字列の描画:Graphics.DrawStringメソッド
- 画像の描画:Graphics.DrawImageメソッド
これはWindowsフォームのユーザー・コントロールやカスタム・コントロールでも(一般的な.NET開発では)同じで、これらのコントロール上に文字列や画像を描画する際にはDrawStringメソッドやDrawImageメソッドを用いればよい。
ただし、コントロールを無効化している場合(EnabledプロパティをFalseに設定する)には注意が必要となる。本稿では、無効化されたコントロールに文字列や画像を正しく描画するための方法を紹介する。
無効状態に見えないコントロール
Windows OSの一般的なユーザー・インターフェイスでは、無効化されたコントロールに描画されている文字列や画像はグレー・アウトした状態(=グレー色)で表示される。
しかしDrawStringメソッドやDrawImageメソッドで独自の描画を加えた場合、これらはコントロールのEnabledプロパティをFalseに変更しただけでは、グレー・アウトした状態で表示されるような仕様にはなっていない。そのため、(単にこれらのメソッドを使って描画しただけでは)そのコントロールは無効状態に見えないのだ。
次の画面は、実際にはフォーム上のすべてのコントロールが無効化されているにもかかわらず、そのようには見えない例である。
![]() |
|||||||||
| 独自に描画を行ったために無効状態に見えないコントロールの例 | |||||||||
| フォームを無効化する(EnabledプロパティをFalseに設定する)ことで、フォーム上のすべてのコントロールを無効化したところ。だが、一部のコントロール( |
|||||||||
|
この画面例を見ると分かるように、フォーム上のすべてのコントロールが無効化されているにもかかわらず、DrawStringメソッドやDrawImageメソッドを使って描画を行っているコントロール(この例では、Panelコントロール
とPictureBoxコントロール
)だけが、グレー・アウトした状態で表示されていない。そのため、コントロールを見ただけでは無効になっているかどうかを判別できない。これではやはりユーザビリティの面で問題となるだろう。
無効状態での文字列と画像の描画
文字列や画像を無効状態で(つまりグレー色で)描画するためには、それぞれControlPaintクラス(System.Windows.Forms名前空間)の次のメソッドを使えばよい(いずれも静的メソッドなので、直接呼び出せる)。
- 無効化された文字列の描画:ControlPaint.DrawStringDisabledメソッド
- 無効化された画像の描画:ControlPaint.DrawImageDisabledメソッド
コントロールが無効化されている場合には、先ほどのDrawStringメソッドやDrawImageメソッドの代わりに、このDrawStringDisabledメソッドやDrawImageDisabledメソッドを用いればよいわけである。
次のコードは、コントロールのEnabledプロパティがFalseの場合に、DrawStringDisabledメソッドやDrawImageDisabledメソッドを用いて文字列や画像を描画する例である。なお、コントロールへの文字列や画像の描画は、そのコントロールのPaintイベント・ハンドラで行うことができる。
|
|
| 無効状態の文字列や画像を描画するサンプル・コード(C#) |
|
|
| 無効状態の文字列や画像を描画するサンプル・コード(VB.NET) | |
| DrawStringメソッドやDrawStringDisabledメソッドのパラメータで使われているRectangleF.op_Implicitメソッドは、Rectangle構造体のオブジェクトをRectangleF構造体のオブジェクトに型変換するためのものだ。詳しくはMSDNの「Rectangle から RectangleF への変換」を参照してほしい。なお、C#のコードにはあるDrawStringDisabledメソッドやDrawImageDisabledメソッドのパラメータ内容についてのコメントは、このVB.NETのコードでは割愛している。これは、VB.NETのコード規約ではアンダーバーによる行継続とコメントを併記できないためである。従って、パラメータ内容はC#のコードを参照すること。 |
このサンプル・コードの内容を冒頭のWindowsフォームのプログラムに追加して実行したものが、次の画面である。
![]() |
||||||
| 独自に描画を行っても正しく無効状態に見えるコントロールの例 | ||||||
| フォームを無効化する(EnabledプロパティをFalseに設定する)ことで、フォーム上のすべてのコントロールを無効化したところ。すべてのコントロールが無効化されているのが、見ただけですぐに分かる。 | ||||||
|
なお、ControlPaint.DrawImageDisabledメソッドの第5パラメータにある背景色の指定は実際の描画色として適用されてないようだ(これは恐らく、.NET Frameworkのバグであろう)。このため、いくら背景色を変更しても、常にこの画面例と同じ色でしか描画されないので注意してほしい。![]()
| カテゴリ:クラス・ライブラリ 処理対象:ビットマップ カテゴリ:Windowsフォーム 処理対象:ウィンドウ カテゴリ:Windowsフォーム 処理対象:コントロール 使用ライブラリ:Graphicsクラス(System.Drawing名前空間) 使用ライブラリ:ControlPaintクラス(System.Windows.Forms名前空間) 関連TIPS:画像を高品質に拡大/縮小するには? |
|
||||||||||||||||||||||||||||
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




