2011-01-25 10 views
3

私は、子コントロールを持つことができるUserControlを持っています。C#:フォーカスを最初の子コントロールに与えるUserControlを抑制する方法?

ユーザーコントロールのスタイルがあります。私は、ユーザーコントロール(ない子コントロール)をクリックすると今

this.SetStyle(
      ControlStyles.AllPaintingInWmPaint | 
      ControlStyles.OptimizedDoubleBuffer | 
      ControlStyles.Selectable | 
      ControlStyles.SupportsTransparentBackColor | 
      ControlStyles.UserPaint, 
      true);

を、私は、ユーザーコントロールにフォーカスを維持したいが、フォーカスは自動的に最初のチャイルドに行きますコントロール。 私はタブキーを使うと同じことが起こります。

すでにOnGotFocusを無効にしようとしました。

+0

TabStopが有効になっていますか? –

+0

'@LexRema:'はい – Wowa

答えて

3

これはUserControlクラス内のハードコーディングされた動作で、WM_SETFOCUSメッセージをトラップし、フォーカスを子コントロールに渡します。私はこれをオーバーライドする方法がわからず、WndProc()をトラップしてもそれを処理するUC基本クラスを得る良い方法がないので動作しません。

ベストなアプローチは、バトルを避け、ドッキングされたPanelコントロールを使用して、UCで処理するイベントを集中させるためのスタンドを用意することです。これにはハッキングも必要ですが、Panelはコンテナコントロールでもありますが、これはバイパスできます。フォーカス可能なパネルについては、my answer hereをご覧ください。

関連する問題