Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Membuat Panel C# Menerima Input Papan Kekunci dan Memaparkan Segiempat Fokus?

Bagaimanakah Saya Boleh Membuat Panel C# Menerima Input Papan Kekunci dan Memaparkan Segiempat Fokus?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-21 00:11:09934semak imbas

How Can I Make a C# Panel Receive Keyboard Input and Display a Focus Rectangle?

Tingkatkan kawalan pengguna Panel C#: selesaikan masalah fokus

Dalam program grafik menggunakan C#, Panel yang memerlukan input papan kekunci sering menghadapi beberapa masalah. Masalah biasa ialah Panel tidak boleh mendapatkan fokus, mengakibatkan kegagalan untuk mencetuskan peristiwa KeyUp/KeyDown/KeyPress dan GotFocus/LostFocus.

Untuk meningkatkan kefungsian Panel, penyelesaian yang lebih elegan ialah mengubah suai kelas asas Panel seperti berikut:

  1. Dayakan pilihan:

    <code class="language-csharp"> SetStyle(ControlStyles.Selectable, true);
     TabStop = true;</code>
  2. Klik tetikus untuk memaksa fokus:

    <code class="language-csharp"> protected override void OnMouseDown(MouseEventArgs e) {
         this.Focus();
         base.OnMouseDown(e);
     }</code>
  3. Tulis semula pemprosesan kunci input:

    <code class="language-csharp"> 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);
     }</code>
  4. Kesan visual fokus tersuai:

    <code class="language-csharp"> protected override void OnEnter(EventArgs e) {
         this.Invalidate();
         base.OnEnter(e);
     }
     protected override void OnLeave(EventArgs e) {
         this.Invalidate();
         base.OnLeave(e);
     }</code>
  5. Tunjukkan segi empat tepat fokus:

    <code class="language-csharp"> 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>

Dengan pengubahsuaian ini, Panel boleh dipilih dan menerima input papan kekunci. Kod yang disediakan memastikan bahawa Panel mendapat fokus apabila diklik dan bertindak balas kepada kekunci anak panah atas, bawah, kiri dan kanan. Selain itu, apabila Panel memperoleh fokus, ia memaparkan segi empat tepat fokus di sekelilingnya, dengan itu meningkatkan pengalaman pengguna.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Panel C# Menerima Input Papan Kekunci dan Memaparkan Segiempat Fokus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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