- PR -

WindowsFormのコントロールEnabled=false時のコントロール前景色

1
投稿者投稿内容
さとくんパパ♪
常連さん
会議室デビュー日: 2004/05/07
投稿数: 29
投稿日時: 2008-04-25 17:03
.Net Framework2.0または3.5のWebBrowserを使用して、WindowsForm
アプリを開発しております。(当然Click_Oneでスマクラに上げる予定で)

今回の質問は、WindowForm系の入力コントロールのEnabled = false
にしたときの前景色についてです。

--------------------------------
【1.質問事項】
--------------------------------
WindowsFormのComboBoxやCheckBox, CheckedListBox等について、
Enabled = falseにした時の前景色(あるいは背景色も)を制御
することは可能でしょうか?


--------------------------------
【2.問題点・・・質問の背景】
--------------------------------
ご存知の通りComboBoxやCheckBox, CheckedListBoxといった利用頻度の
高いコントロールには、Enabledプロパティがあるのですが、これを
Falseにすると、前景色が自動的にグレーになり、どのような値が設定
されているのか見えづらくなります。

従って皆さんもよくやると思うのですが、入力画面と照会画面を1つに
してしまおうとしたときに、上述のコントロールを使用したときで、
かつ画面を照会モードにしたとき、『設定されている値が見え難い』
という問題が発生します。
--------------------------------

これを解決するには基本的に以下の3つの方法があるものと思われます。
@ 画面を照会画面と入力画面に分ける。

A 何らかの方法で、Enabled = true/falseになったときの前景色/背景色
 を入れ替える。(イベントハンドラかな・・・と思ったのですが
 EnabledChangedで色変えても無視されますよね)

B ComboBoxやCheckBox, CheckedListBoxの何れかとTextBoxを組み合わせた
 複合ユーザコントロールを作成する。で、Enabledの代わりにReadOnly
 プロパティを持たせて、=trueであえればReadOnly=true状態のTextBox
 を表示する。

--------------------------------
質問をした手前、拙者のスタンスを明らかにするとBです。(皆さんは
どうやっているのかな?とても興味深々なのですが・・・)
でも、『そこまでやらなくてもよい。画面で黒い字ではっきり見えるだけで
よい。』という要望も多く、ちょっと悩んでいるところです。


--------------------------------
【3.最初に戻って・・・】
--------------------------------
ということで、改めて最初の質問に戻ります。要は上で云うA、何らかの
方法で、ComboBoxやCheckBox, CheckedListBoxのEnabled = falseのときの
前景色・背景色の変更の仕方を教えてください。


以上、よろしくお願いいたします。
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-04-26 09:23
まず、CheckBox は AutoCheck プロパティを false にすればチェックできなくなります。

ComboBox は、おっしゃるように複合ユーザーコントロールを使って、
TextBox と切り替えるのが簡単そうですね。

CheckedListBox については、あまりいいアイデアがありません。
継承してカスタムコントロールを作ればできると思いますけど。
見栄えが変わってしましますが DataGridView を使えば同じようなものは作れます。


提示されている方法の選択に関しては、
(2) は避けた方がよいと思います。私は (1) か (3) です。

私見ですが、無効であることと、読み取り専用であることは違うと思います。
Enabled = False は、本当に意味がない項目に使うべきだと思っています。

例えば、背景色を指定するか、背景画像を指定するかを選択するラジオボタンがあり、
背景色を指定する場合はその色を入力することができ、
背景画像を指定する場合はファイルを選択することができるとします。
この場合、背景色のラジオボタンがチェックされているとき、
背景画像のファイルを選択するコントロールは無効です。
逆に背景画像のラジオボタンがチェックされているとき、
背景色を指定するコントロールは無効です。

それに対して今回のように、意味がある項目だけど、
(例えば操作権限などの関係で)「読み取り専用」にしたいという目的なら、
ReadOnly ということになると思います。
ComboBox とかには ReadOnly がないから質問されてるのだと思いますが…
標準で用意して欲しい気もしています。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-04-28 17:00
SetStyle メソッドで Selectable を無効、UserMouse を設定し、さらにキーの制御を入れれば ReadOnly な ComboBox が作れます。 見た目を変えたくない時に利用することがありますが私は嫌いですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)