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:
Optionalität aktivieren:
<code class="language-csharp"> SetStyle(ControlStyles.Selectable, true); TabStop = true;</code>
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>
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>
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>
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>
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!