3

childcontrolを持つことができるUserControlがあります。

ユーザーコントロールにはスタイルがあります:

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

ユーザーコントロール(子コントロールではない)をクリックすると、ユーザーコントロールにフォーカスを保持させたいのですが、フォーカスは自動的に最初の子コントロールに移動します。タブキーを使用しても同じことが起こります。

私はすでにOnGotFocus成功せずにオーバーライドしようとしました。

何か案が?

4

1 に答える 1

3

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

最善の方法は、戦闘を回避し、ドックされたパネル コントロールを使用して、UC に処理させたいイベントに焦点を当てることです。これにはハッキングも必要です。Panel はコンテナ コントロールでもありますが、バイパスすることができます。フォーカス可能なパネルについては、こちらの回答をご覧ください。

于 2011-01-25T15:44:00.127 に答える