Heim > Backend-Entwicklung > C++ > Wie kann ich dafür sorgen, dass ein C#-Panel Tastatureingaben empfängt und ein Fokusrechteck anzeigt?

Wie kann ich dafür sorgen, dass ein C#-Panel Tastatureingaben empfängt und ein Fokusrechteck anzeigt?

Mary-Kate Olsen
Freigeben: 2025-01-21 00:11:09
Original
931 Leute haben es durchsucht

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

Benutzersteuerung im C#-Panel verbessern: Fokusproblem lösen

In Grafikprogrammen mit C# treten bei Panels, die Tastatureingaben erfordern, häufig Probleme auf. Ein häufiges Problem besteht darin, dass das Panel den Fokus nicht erhalten kann, was dazu führt, dass die Ereignisse KeyUp/KeyDown/KeyPress und GotFocus/LostFocus nicht ausgelöst werden.

Um die Funktionalität von Panel zu verbessern, besteht eine elegantere Lösung darin, die Panel-Basisklasse wie folgt zu ändern:

  1. Optionalität aktivieren:

    <code class="language-csharp"> SetStyle(ControlStyles.Selectable, true);
     TabStop = true;</code>
    Nach dem Login kopieren
  2. Klicken Sie mit der Maus, um den Fokus zu erzwingen:

    <code class="language-csharp"> protected override void OnMouseDown(MouseEventArgs e) {
         this.Focus();
         base.OnMouseDown(e);
     }</code>
    Nach dem Login kopieren
  3. Eingabetastenverarbeitung neu schreiben:

    <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>
    Nach dem Login kopieren
  4. Visuelle Effekte mit individuellem Fokus:

    <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>
    Nach dem Login kopieren
  5. Fokusrechteck anzeigen:

    <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>
    Nach dem Login kopieren

Mit diesen Modifikationen kann das Panel sowohl ausgewählt werden als auch Tastatureingaben empfangen. Der bereitgestellte Code stellt sicher, dass das Panel beim Klicken den Fokus erhält und auf die Pfeiltasten nach oben, unten, links und rechts reagiert. Wenn ein Panel den Fokus erhält, wird außerdem ein Fokusrechteck um es herum angezeigt, wodurch das Benutzererlebnis verbessert wird.

Das obige ist der detaillierte Inhalt vonWie kann ich dafür sorgen, dass ein C#-Panel Tastatureingaben empfängt und ein Fokusrechteck anzeigt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage