- - PR -
コンボボックスのEnable時の文字色
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-19 10:43
いつも参考にさせていただいています。
現在、VB.net(2003)にて開発を行っております。 さっそくの質問なのですが、コンボボックスをEnable=falseにした際の、 文字色を黒色のままにしたいのですが、何かいい方法はありませんでしょうか? 現在、System.Windows.Forms.ComboBoxを継承した、ComboBoxコントロールクラスを 作成しております。 このComboBoxコントロールクラスのレベルにて対応できないでしょうか? EnabledChangedイベント時に、文字色を黒に変えれば、上手くいくと思ったのですが、 無理でした・・。 他に調べたところ、パネルの上に乗せてパネル自体のEnableを変更する方法等はあるみたいですが・・・。 どうか、よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2006-09-19 10:59
たとえば、Enabled プロパティを Shadows で別の処理を実装するなど、いくつか考えられそうです。 (これをするくらいなら、MyEnabled プロパティか何かで実装した方が良いでしょうけど)
親コンテナの Enabled プロパティが false の場合、中に含まれるコントロールの外観も変化します。 親コンテナの Enabled プロパティの設定に依存しないのは、Visual Basic 6 までの話です。 <追記> スレッドのタイトルが不適切ですね。(^^) "Enable 時" では、'Enabled = true' という意味になります。 正しくは、'Enabled = false の時' か 'Disable の時' でしょう。 </追記> [ メッセージ編集済み 編集者: じゃんぬねっと 編集日時 2006-09-19 11:02 ] | ||||||||||||
|
投稿日時: 2006-09-19 11:05
色々と方法はありますが
コンボボックスの場合、WndProcメソッドでWM_ENABLEDを補足すれば 背景色、前景色を変更できドロップダウンは無効になります。 VS2005では確認済みです。 | ||||||||||||
|
投稿日時: 2006-09-19 11:12
ちょっと前に、TextBox で同じようなことをしたいと思ったことがありました。
グレーバックで、文字を黒にしたかったんです。 結局うまくできずに、似たような描画を行なう別のコントロールを作って 対処しました。 で、Enable プロパティに応じて、二つのコントロールの Visible プロパティを 制御しました。 素朴なところでは、同じ場所に自分のコントロールと、入力用のコントロールを 重ねておいて、Enable を制御する代わりに、Visible と表示内容を制御すれば いいと思います。 その辺までコントロールするまとめたコントロールを作るともうちょっと 便利ですよね。 graphics オブジェクトを使ったことがあれば、そんなに難しくないと思いますけど、 graphics オブジェクトを使ったことがないと、ちょっと面倒かも。 | ||||||||||||
|
投稿日時: 2006-09-19 13:08
皆様、早速のご返答ありがとうございます。
やはりそういった方法しかないでしょうか・・・。考えはついたのですが、 少し不安で。通常のEnableプロパティと違う動きが出てこないかと。
他にMyEnabled プロパティというのを追加するということでしょうか? 申し訳ないですが、呼び出すプロパティ名称は「Enabled」のままで行いたいのです・・・。
WM_ENABLEDとはAPIになるのでしょうか? ネット等でも情報があまり取得出来ないので・・・。 | ||||||||||||
|
投稿日時: 2006-09-19 13:22
調べるならば、'WM_ENABLE' でしょうね。(D は不要です) ただの定数ですけどね。 WndProc メソッドをオーバーライドして、このメッセージを捕捉するという意味です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-09-19 13:28
Enabled 値を監視して、False の時だけ、同じ値を表示したラベルなりロックしたテキストボックスなりを上に被せるという離れ技はどうでしょうか?(駄目?w)
_________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||||||
|
投稿日時: 2006-09-19 13:33
[/quote]
調べるならば、'WM_ENABLE' でしょうね。(D は不要です) ただの定数ですけどね。 WndProc メソッドをオーバーライドして、このメッセージを捕捉するという意味です。 [/quote] 失礼しました。 WM_ENABLEです。 TextBoxでも使えます。 |