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
Libérer: 2025-01-21 00:11:09
original
921 Les gens l'ont consulté

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>
    Copier après la connexion
  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>
    Copier après la connexion
  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>
    Copier après la connexion
  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>
    Copier après la connexion
  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>
    Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal