Maison >développement back-end >C++ >Comment puis-je faire en sorte qu'un panneau C# reçoive une entrée clavier et affiche un rectangle de focus ?

Comment puis-je faire en sorte qu'un panneau C# reçoive une entrée clavier et affiche un rectangle de focus ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-21 00:11:09967parcourir

How Can I Make a C# Panel Receive Keyboard Input and Display a Focus Rectangle?

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 :

  1. Activer l'option :

    <code class="language-csharp"> SetStyle(ControlStyles.Selectable, true);
     TabStop = true;</code>
  2. 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>
  3. 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>
  4. 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>
  5. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn