Penyelesaian kepada masalah fokus papan kekunci Panel dalam C#
Dalam pengaturcaraan GUI, kawalan selalunya diperlukan untuk mendapatkan fokus untuk memudahkan interaksi papan kekunci. Walau bagaimanapun, kelas Panel dalam aplikasi C# Windows.Forms cenderung mengalihkan fokus kepada kawalan anaknya, yang menjadikannya mencabar untuk mengendalikan input papan kekunci terus ke panel itu sendiri.
Masalah: Panel tidak dapat fokus
Seorang pembangun menghadapi isu di mana kawalan tersuai yang diperoleh daripada Panel tidak dapat menerima fokus papan kekunci. Untuk kawalan ini, acara seperti KeyUp/KeyDown/KeyPress dan GotFocus/LostFocus masih tidak menyala.
Penyelesaian: Tukar Panel kepada kawalan pengguna yang boleh difokuskan
Untuk menyelesaikan masalah ini, pembangun ini menghasilkan penyelesaian elegan yang memanjangkan fungsi 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>
Kod ini telah melakukan beberapa pengubahsuaian utama:
Faedah menggunakan SelectablePanel
Dengan menggunakan kod ini, pembangun mempertingkat kawalan terbitan Panel tersuainya dengan pemerolehan fokus papan kekunci yang lancar dan navigasi. Ia bijak menyelesaikan masalah Panel tidak dapat memperoleh fokus, membolehkan program grafiknya berinteraksi dengan papan kekunci dengan cekap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Kawalan Panel C# Menerima Fokus Papan Kekunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!