Résoudre le problème de focus des contrôles utilisateur basés sur Panel dans Windows Forms
Dans les applications Windows Forms, les contrôles utilisateur basés sur le panneau ne peuvent pas recevoir le focus clavier par défaut, ce qui affecte l'interaction de la navigation au clavier. Pour résoudre ce problème, les développeurs doivent trouver une solution élégante pour permettre aux contrôles utilisateur basés sur Panel de se concentrer.
La meilleure approche consiste à étendre la classe Panel et à implémenter soigneusement des événements spécifiques. L'extrait de code suivant montre comment :
<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>
Ce code améliore la classe Panel de base :
Avec ces remplacements, le contrôle utilisateur SelectablePanel est désormais capable de se concentrer et de gérer la saisie au clavier comme prévu, même s'il hérite de Panel. Cette solution offre un moyen élégant et efficace de résoudre les problèmes de focus avec les contrôles utilisateur basés sur Panel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!