- PR -

コンボボックスのEnable時の文字色

投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-09-19 10:43
いつも参考にさせていただいています。

現在、VB.net(2003)にて開発を行っております。

さっそくの質問なのですが、コンボボックスをEnable=falseにした際の、
文字色を黒色のままにしたいのですが、何かいい方法はありませんでしょうか?

現在、System.Windows.Forms.ComboBoxを継承した、ComboBoxコントロールクラスを
作成しております。
このComboBoxコントロールクラスのレベルにて対応できないでしょうか?

EnabledChangedイベント時に、文字色を黒に変えれば、上手くいくと思ったのですが、
無理でした・・。

他に調べたところ、パネルの上に乗せてパネル自体のEnableを変更する方法等はあるみたいですが・・・。

どうか、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-19 10:59
引用:

.netさんの書き込み (2006-09-19 10:43) より:

さっそくの質問なのですが、コンボボックスをEnable=falseにした際の、文字色を黒色のままにしたいのですが、何かいい方法はありませんでしょうか?

現在、System.Windows.Forms.ComboBoxを継承した、ComboBoxコントロールクラスを
作成しております。
このComboBoxコントロールクラスのレベルにて対応できないでしょうか?


たとえば、Enabled プロパティを Shadows で別の処理を実装するなど、いくつか考えられそうです。
(これをするくらいなら、MyEnabled プロパティか何かで実装した方が良いでしょうけど)

引用:

他に調べたところ、パネルの上に乗せてパネル自体のEnableを変更する方法等はあるみたいですが・・・。


親コンテナの Enabled プロパティが false の場合、中に含まれるコントロールの外観も変化します。
親コンテナの Enabled プロパティの設定に依存しないのは、Visual Basic 6 までの話です。

<追記>
 スレッドのタイトルが不適切ですね。(^^)
 "Enable 時" では、'Enabled = true' という意味になります。
 正しくは、'Enabled = false の時' か 'Disable の時' でしょう。
</追記>

[ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-09-19 11:02 ]
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2006-09-19 11:05
色々と方法はありますが
コンボボックスの場合、WndProcメソッドでWM_ENABLEDを補足すれば
背景色、前景色を変更できドロップダウンは無効になります。
VS2005では確認済みです。
わちゃ
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 162
お住まい・勤務地: 東京
投稿日時: 2006-09-19 11:12
ちょっと前に、TextBox で同じようなことをしたいと思ったことがありました。
グレーバックで、文字を黒にしたかったんです。

結局うまくできずに、似たような描画を行なう別のコントロールを作って
対処しました。

で、Enable プロパティに応じて、二つのコントロールの Visible プロパティを
制御しました。

素朴なところでは、同じ場所に自分のコントロールと、入力用のコントロールを
重ねておいて、Enable を制御する代わりに、Visible と表示内容を制御すれば
いいと思います。

その辺までコントロールするまとめたコントロールを作るともうちょっと
便利ですよね。


graphics オブジェクトを使ったことがあれば、そんなに難しくないと思いますけど、
graphics オブジェクトを使ったことがないと、ちょっと面倒かも。
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-09-19 13:08
皆様、早速のご返答ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2006-09-19 10:59) より:
たとえば、Enabled プロパティを Shadows で別の処理を実装するなど、いくつか考えられそうです。



やはりそういった方法しかないでしょうか・・・。考えはついたのですが、
少し不安で。通常のEnableプロパティと違う動きが出てこないかと。

引用:

(これをするくらいなら、MyEnabled プロパティか何かで実装した方が良いでしょうけど)



他にMyEnabled プロパティというのを追加するということでしょうか?
申し訳ないですが、呼び出すプロパティ名称は「Enabled」のままで行いたいのです・・・。

引用:

未記入さんの書き込み (2006-09-19 11:05) より:
色々と方法はありますが
コンボボックスの場合、WndProcメソッドでWM_ENABLEDを補足すれば



WM_ENABLEDとはAPIになるのでしょうか?
ネット等でも情報があまり取得出来ないので・・・。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-09-19 13:22
引用:

.netさんの書き込み (2006-09-19 13:08) より:

WM_ENABLEDとはAPIになるのでしょうか?
ネット等でも情報があまり取得出来ないので・・・。


調べるならば、'WM_ENABLE' でしょうね。(D は不要です)
ただの定数ですけどね。

WndProc メソッドをオーバーライドして、このメッセージを捕捉するという意味です。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-09-19 13:28
Enabled 値を監視して、False の時だけ、同じ値を表示したラベルなりロックしたテキストボックスなりを上に被せるという離れ技はどうでしょうか?(駄目?w)

_________________
R・田中一郎 -  R.Tanaka.Ichiro’s Blog
未記入
大ベテラン
会議室デビュー日: 2006/05/19
投稿数: 125
投稿日時: 2006-09-19 13:33
[/quote]
調べるならば、'WM_ENABLE' でしょうね。(D は不要です)
ただの定数ですけどね。

WndProc メソッドをオーバーライドして、このメッセージを捕捉するという意味です。


[/quote]

失礼しました。
WM_ENABLEです。
TextBoxでも使えます。

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