DOBON.NET DOBON.NETプログラミング掲示板過去ログ

フォーカス四角形の描画タイミングについて

環境/言語:[WindowsXP、Visual C# 2005、NET Framework2.0]
分類:[.NET]

お世話になります。

TrackBarとラベルを使用したユーザコントールを作成しております。
このユーザコントールにフォーカスが移ると、TrackBar部にフォーカス四角形が
描画されます。
このフォーカス四角形をユーザコントール全体に描画したいのですが、
TrackBar部のフォーカス四角形が消えません。

<試したこと>
 ・TrackBarの派生クラスを作成し、コンストラクタ内で
   this.SetStyle(ControlStyles.Selectable, false);
 ・派生クラスでOnEnterをオーバーライドし、なにもしない
 ・派生クラスでOnPaintをオーバーライドし、なにもしない
 上記のことを実施しても、依然フォーカス四角形が描画されます。

<わからないこと>
 フォーカス四角形はどのタイミングで描画されているのでしょうか?
 また、消す為にはどのようにすれば良いでしょうか?


以上、よろしくお願い致します。
TrackBar を派生させ、ShowFocusCues プロパティをオーバーライドしてください。
■No21075に返信(Hongliangさんの記事)
> TrackBar を派生させ、ShowFocusCues プロパティをオーバーライドしてください。


Hongliangさん、回答ありがとう御座います。

TrackBarを派生しShowFocusCuesをオーバーライドしましたが、
フォーカス四角形は消えませんでした。

試しにButtonとCheckBoxで同様のことをしたところ、
フォーカス四角形が消えました。

この事からTrackBarは何か特別な処理をしていると思います。

<試したソース>
 public class TrackBarEx : TrackBar
 {
   protected override bool ShowFocusCues
   {
     get { return false; }
   }
 }

 public class ButtonEx : Button
 {
   protected override bool ShowFocusCues
   {
     get { return false; }
   }
 }

 public class CheckBoxEx : CheckBox
 {
   protected override bool ShowFocusCues
   {
     get { return false; }
   }
 }


Reflector.NETでTrackBarの中を見たら、「private void RedrawControl()」を発見しました
再描画用のメソッドっぽいので、非常にアヤシイです。
どこから呼び出しているか探します。

以上、よろしくお願い致します。
自己解決しました。

TrackBarを派生させ、WndProcをオーバーライドし、
WM_SETFOCUSメッセージの処理を無効にしたら、フォーカス四角形が描画されなくなりました。

いろいろ弊害があると思いますが、とりあえず解決しました。

以上、よろしくお願い致します。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板