C# でのパネル キーボード フォーカスの問題の解決策
GUI プログラミングでは、キーボード操作を容易にするためにコントロールにフォーカスを取得することが必要になることがよくあります。ただし、C# Windows.Forms アプリケーションのPanel クラスは、その子コントロールにフォーカスを移す傾向があるため、パネル自体へのキーボード入力を直接処理することが困難になります。
問題: パネルがフォーカスを取得できません
開発者は、Panel から派生したカスタム コントロールがキーボード フォーカスを受け取ることができないという問題に遭遇しました。このコントロールでは、KeyUp/KeyDown/KeyPress や GotFocus/LostFocus などのイベントはまだ発生しません。
解決策: パネルをフォーカス可能なユーザー コントロールに変換します
この問題を解決するために、この開発者は、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>
このコードにはいくつかの重要な変更が加えられています:
SelectablePanel を使用する利点
このコードを適用することで、開発者はシームレスなキーボード フォーカスの取得とナビゲーションを備えたカスタムのパネル派生コントロールを強化しました。これは、Panel がフォーカスを取得できないという問題を巧みに解決し、グラフィックス プログラムが効率的にキーボードと対話できるようにします。
以上がC# パネル コントロールがキーボード フォーカスを受け取るようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。