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>
Kod ini meningkatkan kelas Panel asas:
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!