- - PR -
C# TextBoxのEnabled=false時、ForeColorを変更できませんが
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-21 12:52
いつもお世話になっております。
saharaです。 WindowsForm開発: TextBoxのEnabled=false時にForeColorをColor.Redに変更すると思います。 然し、TextBoxはDisabled時にForeColorの設定が無効になりましたが… ご指導お願いいたします。 環境 C#.net WINXP [ メッセージ編集済み 編集者: sahara 編集日時 2005-06-21 13:33 ] | ||||
|
投稿日時: 2005-06-21 13:55
こんにちは、じゃんぬ です。
Windows の仕様です。 ReadOnly を利用などしてください。 フォーカスの制御は UpdateDefaultButton() などをオーバーライドして、 行かないようにすることは可能です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-06-21 15:04
ご返答ありがとうございます。
やはりそうですね。。。 但し、開発仕様では、EnabledをFalseに設定しなければなりませんが。。。 | ||||
|
投稿日時: 2005-06-21 15:21
こんにちは、じゃんぬ です。
だとすると、全部を派生クラスに張り替えて、 OnEnabledChanged で色々細工して、 あたかも Enabled = False のような動きを実現するしかないですね。 Enabled プロパティ自身も Shadow して何かに置き換えなければいけません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-06-21 15:26
その仕様を決めた人が知っているはず…と思いたいところですが
#たぶん知らないで決めてるんだろうなぁ _________________ # Future Is On Fire ! | ||||
|
投稿日時: 2005-06-21 21:08
> TextBoxのEnabled=false時にForeColorをColor.Redに変更すると思います。
10年前からそんなことはしません。変えられませんから。 入力コントロールの“状態”はいくつかあって、
くらいが考えられると思います。以前行ったプロジェクトでは、IStatefullというインターフェイスを作って列挙型に上記状態を定義し、TextBox、ComboBox、ListBoxを継承して拡張したコントロールを作りました。 それぞれのforeColor、backgroundColorはレジストリから取得するようにして、「入力不可能」はEnabledではなく、ReadOnlyで表現しました。 # ComboBoxはTextBoxに張り替える _________________ | ||||
|
投稿日時: 2005-06-22 11:21
お返事を頂き、ありがとうございます。
皆様: かきのように修正をすると、問題が解決されると思います。 protected override void OnEnabledChanged(EventArgs e) { ... base.SetStyle(ControlStyles.UserPaint, !this.Enabled); ... } protected override void OnPaint(PaintEventArgs e) { ... using(StringFormat sf = new StringFormat()) { if(this.TextAlign == HorizontalAlignment.Center) { sf.Alignment = StringAlignment.Center; } else if(this.TextAlign == HorizontalAlignment.Left) { sf.Alignment = StringAlignment.Near; } else { sf.Alignment = StringAlignment.Far; } e.Graphics.DrawString(base.Text, base.Font, new SolidBrush(ForeColor), new Rectangle(-1, 2, base.Width, base.Height), sf); if(this.BorderStyle == BorderStyle.FixedSingle) { e.Graphics.DrawRectangle(new Pen(Color.Black), 0, 0, this.Width - 1, this.Height - 1); } } ... } | ||||
|
投稿日時: 2005-06-23 11:08
ognacです.
邪道ですが, 該当するtextBoxと同じ大きさの透明Formを作成します, TextBoxを所有するFormの子として貼り付ける.(勿論,外枠,タイトルなしのForm) tabstopを Offにする. すると, 入力不可の状態がてきます. どうでしょうか |