Solution au problème de focus du clavier du panneau en C#
Dans la programmation GUI, il est souvent nécessaire qu'un contrôle soit mis au point pour faciliter l'interaction avec le clavier. Cependant, la classe Panel dans une application Windows.Forms C# a tendance à déplacer le focus vers ses contrôles enfants, ce qui rend difficile la gestion de la saisie au clavier directement dans le panneau lui-même.
Problème : Le panneau ne parvient pas à obtenir le focus
Un développeur a rencontré un problème où les contrôles personnalisés dérivés du Panel ne parvenaient pas à recevoir le focus clavier. Pour ce contrôle, les événements tels que KeyUp/KeyDown/KeyPress et GotFocus/LostFocus ne se déclenchent toujours pas.
Solution : Convertir le panneau en un contrôle utilisateur pouvant être focalisé
Pour résoudre ce problème, ce développeur a proposé une solution élégante qui étend les fonctionnalités de 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>
Ce code a quelques modifications clés effectuées :
Avantages de l'utilisation de SelectablePanel
En appliquant ce code, le développeur a amélioré son contrôle personnalisé dérivé du panneau avec une acquisition et une navigation transparentes du focus clavier. Il résout intelligemment le problème de l'incapacité de Panel à obtenir la mise au point, permettant à ses programmes graphiques d'interagir efficacement avec le clavier.
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!