Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membuat Kawalan Pengguna Berasaskan Panel dalam Borang Windows Menerima Fokus Papan Kekunci?

Bagaimanakah Saya Boleh Membuat Kawalan Pengguna Berasaskan Panel dalam Borang Windows Menerima Fokus Papan Kekunci?

Barbara Streisand
Lepaskan: 2025-01-21 00:22:09
asal
886 orang telah melayarinya

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

Menyelesaikan masalah fokus kawalan pengguna berasaskan Panel dalam Borang Windows

Dalam aplikasi Windows Forms, kawalan pengguna berasaskan Panel tidak boleh menerima fokus papan kekunci secara lalai, yang menjejaskan interaksi navigasi papan kekunci. Untuk menyelesaikan masalah ini, pembangun perlu mencari penyelesaian yang elegan untuk membolehkan kawalan pengguna berasaskan Panel mendapat fokus.

Pendekatan terbaik ialah melanjutkan kelas Panel dan melaksanakan acara tertentu dengan berhati-hati. Coretan kod berikut menunjukkan cara:

<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>
Salin selepas log masuk

Kod ini meningkatkan kelas Panel asas:

  1. Timpa kaedah IsInputKey: Pastikan acara papan kekunci dikendalikan oleh kawalan dan tangkapan menekan kekunci kursor.
  2. Timpa kaedah OnMouseDown: Tetapkan fokus apabila kawalan diklik untuk mendayakan interaksi papan kekunci seterusnya.
  3. Timpa kaedah OnEnter dan OnLeave: Batalkan permukaan lukisan kawalan supaya segi empat tepat fokus dilukis semula apabila kawalan memperoleh atau kehilangan fokus.
  4. Timpa kaedah OnPaint: Lukis segi empat tepat fokus apabila kawalan mendapat fokus.

Dengan penggantian ini, kawalan pengguna SelectablePanel kini dapat memperoleh fokus dan mengendalikan input papan kekunci seperti yang diharapkan, walaupun ia diwarisi daripada Panel. Penyelesaian ini menyediakan cara yang elegan dan cekap untuk menyelesaikan isu fokus dengan kawalan pengguna berasaskan Panel.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Kawalan Pengguna Berasaskan Panel dalam Borang Windows Menerima Fokus Papan Kekunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan