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

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

Barbara Streisand
リリース: 2025-01-21 00:22:09
オリジナル
886 人が閲覧しました

How Can I Make a Panel-Based User Control in Windows Forms Receive Keyboard Focus?

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クラスを拡張します:

  1. IsInputKey メソッドをオーバーライドします。 キーボード イベントがコントロールによって処理され、カーソル キーの押下がキャプチャされるようにします。
  2. OnMouseDown メソッドをオーバーライドします。 コントロールがクリックされたときにフォーカスを設定し、その後のキーボード操作を有効にします。
  3. OnEnter メソッドと OnLeave メソッドをオーバーライドします。 コントロールがフォーカスを取得または失ったときにフォーカス四角形が再描画されるように、コントロールの描画面を無効にします。
  4. OnPaint メソッドをオーバーライドします。 コントロールがフォーカスを取得したときに、フォーカス四角形を描画します。

これらのオーバーライドにより、SelectablePanel ユーザー コントロールは、Panel から継承しているにもかかわらず、フォーカスを取得し、期待どおりにキーボード入力を処理できるようになりました。このソリューションは、パネルベースのユーザー コントロールに関するフォーカスの問題を解決する洗練された効率的な方法を提供します。

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

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