- - PR -
XPスタイル時のTextBoxコントロールのBackColorについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-08 11:13
いつも参考にさせていただいております。
VS.NET2003でC#にて開発を行っています。(XP Pro SP2) XPスタイルを使用し、TextBoxにフォーカスがあたっいた際、BackColorをYellowに変更し、フォーカス喪失時に元の色に戻す処理を行っています。 このとき、TextBoxから他のコントロールへ移動するのにマウス操作(他のコントロールをクリック)で移動すると、TextBoxの内側に黄色の線が残ります。 (残った状態でマウスカーソルを当てると消えます) TabキーやSelectNextControlメソッドでフォーカス移動したときは綺麗にもとの色に戻ります。 この現象の回避方法をご存知の方がいらっしゃいましたら、お教え願えないでしょうか。 サンプルソースは以下のとおりです。 TextBoxを1つと他のフォーカス移動できるコントロールを1つ配置して テストしました。 static void Main() { Application.EnableVisualStyles(); Application.Run(new Form1()); } Color BackColor; private void textBox1_Enter(object sender, System.EventArgs e) { Color BackColor = textBox1.BackColor; textBox1.BackColor = Color.Yellow; } private void textBox1_Leave(object sender, System.EventArgs e) { textBox1.BackColor = BackColor; } private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { //メソッドによるフォーカス移動テスト this.SelectNextControl((Control)sender, true,true,true,true); } | ||||||||||||
|
投稿日時: 2006-11-08 12:42
ここが、ちょっと誤っています。 フォーカス アウトさせた方法がマウスかどうかは関係ありません。 むしろ、フォーカス インさせた方法がマウスかどうかが問題なのです。 今回の例で言いますと、textBox1 をマウスで選択してしまった場合は、 その後、どの方法でフォーカス アウトしても当現象が発生します。 Tab キーなどでフォーカス インした時に、Border の内側を見てください。 おそらく、Border の内側は白いままになっているかと思います。 しかし、マウスによって、フォーカス インした場合は、時間差で黄色の枠が描画されます。 根本的には、この動作の差異が原因になっています。
Form 自体を強制的に再描画すれば、解決するでしょう。 (TextBox の単独描画では、ダメだったと記憶しています) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-11-08 14:51
じゃんぬねっとさん、いつもお世話になっております。
(ホームページも大変参考にさせていただいております)
確かにそうでした。 マウスでフォーカスインしたあと、マウスが外れる際に内側が設定したバックカラーで 色づけされてます。
Formの再描画で解決しました。(TextBox再描画は駄目でした・・・) ただ、コントロールが多いフォームを再描画した場合に、ちらつくのではないかと心配ですが、とりあえず、そのときに考えたいと思います。 ありがとうございました。 | ||||||||||||
|
投稿日時: 2006-11-08 15:16
もしかして、Form.Refresh メソッドを使われていますか? Refresh メソッドは、Invalidate(true) と Update() の組み合わせに過ぎません。 Invalidate([System.Drawing.Rectangle], true) のオーバーロードを使用しましょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2007-01-10 17:27
追加のご回答ありがとうございました。 御礼が遅くなり、申し訳ございませんでした。 これからも、よろしくお願い致します。 |
1