Améliorer le contrôle utilisateur du panneau C# : résoudre le problème de focus
Dans les programmes graphiques utilisant C#, les panneaux qui nécessitent une saisie au clavier rencontrent souvent des problèmes. Un problème courant est que le panneau ne peut pas obtenir le focus, ce qui entraîne l'échec du déclenchement des événements KeyUp/KeyDown/KeyPress et GotFocus/LostFocus.
Afin d'améliorer les fonctionnalités de Panel, une solution plus élégante consiste à modifier la classe de base Panel comme suit :
Activer l'option :
<code class="language-csharp"> SetStyle(ControlStyles.Selectable, true); TabStop = true;</code>
Cliquez sur la souris pour forcer la mise au point :
<code class="language-csharp"> protected override void OnMouseDown(MouseEventArgs e) { this.Focus(); base.OnMouseDown(e); }</code>
Réécrire le traitement des clés de saisie :
<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>
Effets visuels de mise au point personnalisés :
<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>
Afficher le rectangle de mise au point :
<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>
Avec ces modifications, le panneau peut à la fois être sélectionné et recevoir une saisie au clavier. Le code fourni garantit que le panneau obtient le focus lorsqu'il est cliqué et répond aux touches fléchées haut, bas, gauche et droite. De plus, lorsqu'un panneau obtient le focus, il affiche un rectangle de focus autour de lui, améliorant ainsi l'expérience utilisateur.
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!