ホームページ > バックエンド開発 > C++ > C# パネル コントロールがキーボード フォーカスを受け取るようにするにはどうすればよいですか?

C# パネル コントロールがキーボード フォーカスを受け取るようにするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-21 00:08:09
オリジナル
917 人が閲覧しました

How Can I Make a C# Panel Control Receive Keyboard Focus?

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>
ログイン後にコピー

このコードにはいくつかの重要な変更が加えられています:

  • ControlStyles.Selectable: このスタイルは、パネルのキーボード フォーカスを有効にします。
  • TabStop: このプロパティを true に設定すると、パネルがタブ キーのフォーカスを受け取ることができるようになります。
  • OnMouseDown: パネル内でマウスをクリックすると、パネルに強制的にフォーカスが移動し、パネルがアクティブな入力レシーバーになります。
  • IsInputKey: このオーバーライドにより、パネルが特定のキー (上、下、左、右) を入力キーとして解釈できるようになり、キーボード ナビゲーション機能が有効になります。
  • OnEnter/OnLeave: これらのイベントは、更新コントロールの外観をオーバーライドして、いつフォーカスを取得または失うかを示します。
  • OnPaint: これは、パネルにフォーカスがあるときにフォーカス四角形が表示されるようにコントロールを再描画します。

SelectablePanel を使用する利点

このコードを適用することで、開発者はシームレスなキーボード フォーカスの取得とナビゲーションを備えたカスタムのパネル派生コントロールを強化しました。これは、Panel がフォーカスを取得できないという問題を巧みに解決し、グラフィックス プログラムが効率的にキーボードと対話できるようにします。

以上がC# パネル コントロールがキーボード フォーカスを受け取るようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート