※Enableの方でも変更する方法はあるにはあるのだが、カスタムコントロール作成したりと手間がかかる(参考:DOBON.NET)
※EnableとReadOnlyの違いはVisual Basic 中学校参照
がしかし、ReadOnlyを使用する方法でForeColorを設定したにも拘わらず、設定が反映されない場合が存在するのだ。仕事でこの問題にぶち当たったので調べてみたが、その原因や解決法を解説した日本語サイトが見つからなかった(俺の検索力不足?)ので、ブログにメモ。
何とか見つけた情報はここ(英語)。このページによると、TextBoxのBackColorプロパティを設定しないと、ForeColorの設定が反映されないようです。
「ちょっと待て、デザイナで確認するとBackColorプロパティには「Control」が設定されているぞ」と思われるかもしれませんが、実は何も設定されていないんです。これはTextBoxクラスの設定値ではなく、親クラスのTextBoxBaseクラスの値なのです(多分)。
ちなみに、TextBoxBase.ForeColorプロパティの「解説」に、以下のような記述があります。
TextBoxBase の ReadOnly プロパティが true に設定されている場合、 このプロパティはオーバーライドされることがあります。
TextBoxクラスのReadOnlyプロパティはTextBoxBaseクラスのそれを継承したものなので、TextBox.ReadOnlyはTextBoxBase.ReadOnlyと同じものです。BackColorプロパティに関する記述はありませんが、少なくともForeColorの値はオーバーライドされることがあるようです。以上より、僕は以下の推測を立てました。
- ReadOnly=True かつ BackColorが未設定の場合、ForeColorはデフォルト値(黒)でオーバーライドされる
このエントリを書くに当たって再度Webを検索してたら、日本語の情報あったよ。。。 俺の検索力…
4 件のコメント:
はじめまして、javaやC#で日本株の売買プログラムを作っている者です。
ForeColorをどうしてもRedにできず悩むこと数時間、ようやくこちらに辿り着き、無事解決できました。
有益な情報ありがとうございました。
To:みゅうさん
はじめまして!お役に立てて何よりです。これからも有益な情報を発信していけたらと思います。
…てか、そろそろブログ更新しろよ、俺。
Enableのとき色変えれなかったよなと思い、もしやと調べればヒットしました。
英語サイトまで探索できる能力が羨ましく、助かります。
ありがとうございました。
Re: tanaka_otupaiさん
どうもです。
ハンドルネーム素敵です。
コメントを投稿