Windows フォームのパネルベースのユーザー コントロールのフォーカスの問題を解決する
Windows フォーム アプリケーションでは、パネル ベースのユーザー コントロールはデフォルトでキーボード フォーカスを受け取ることができないため、キーボード ナビゲーションの相互作用に影響します。この問題を解決するには、開発者はパネルベースのユーザー コントロールがフォーカスを取得できるようにする洗練されたソリューションを見つける必要があります。
最善のアプローチは、Panel クラスを拡張し、特定のイベントを慎重に実装することです。次のコード スニペットはその方法を示しています。
<code class="language-csharp">using System; using System.Drawing; using System.Windows.Forms; class SelectablePanel : Panel { public SelectablePanel() { this.SetStyle(ControlStyles.Selectable, true); this.TabStop = true; } protected override void OnMouseDown(MouseEventArgs e) { this.Focus(); base.OnMouseDown(e); } protected override bool IsInputKey(Keys keyData) { if (keyData == Keys.Up || keyData == Keys.Down) return true; if (keyData == Keys.Left || keyData == Keys.Right) return true; return base.IsInputKey(keyData); } protected override void OnEnter(EventArgs e) { this.Invalidate(); base.OnEnter(e); } protected override void OnLeave(EventArgs e) { this.Invalidate(); base.OnLeave(e); } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); if (this.Focused) { var rc = this.ClientRectangle; rc.Inflate(-2, -2); ControlPaint.DrawFocusRectangle(pe.Graphics, rc); } } }</code>
このコードは、基本的なPanelクラスを拡張します:
これらのオーバーライドにより、SelectablePanel ユーザー コントロールは、Panel から継承しているにもかかわらず、フォーカスを取得し、期待どおりにキーボード入力を処理できるようになりました。このソリューションは、パネルベースのユーザー コントロールに関するフォーカスの問題を解決する洗練された効率的な方法を提供します。
以上がWindows フォームのパネルベースのユーザー コントロールがキーボード フォーカスを受け取るようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。