c# bürgerkrieg im - Panel bekommt keinen Fokus





3 Answers

Der gleiche Hans Passant-Code in VB.NET

Imports System
Imports System.Drawing
Imports System.Windows.Forms

Public Class SelectablePanel
    Inherits Panel

    Public Sub SelectablePanel()
        Me.SetStyle(ControlStyles.Selectable, True)
        Me.TabStop = True
    End Sub

    Protected Overrides Sub OnMouseDown(ByVal e As MouseEventArgs)
        Me.Focus()
        MyBase.OnMouseDown(e)
    End Sub

    Protected Overrides Function IsInputKey(ByVal keydata As Keys) As Boolean
        If (keydata = Keys.Up OrElse keydata = Keys.Down) Then Return True
        If (keydata = Keys.Left OrElse keydata = Keys.Right) Then Return True
        Return MyBase.IsInputKey(keydata)
    End Function

    Protected Overrides Sub OnEnter(ByVal e As EventArgs)
        Me.Invalidate()
        MyBase.OnEnter(e)
    End Sub

    Protected Overrides Sub OnLeave(ByVal e As EventArgs)
        Me.Invalidate()
        MyBase.OnLeave(e)
    End Sub

    Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
        MyBase.OnPaint(pe)
        If (Me.Focused) Then
            Dim rc As Rectangle = Me.ClientRectangle
            rc.Inflate(-2, -2)
            ControlPaint.DrawFocusRectangle(pe.Graphics, rc)
        End If
    End Sub

End Class
jemen militärintervention seit

Ich werde weiterhin eine Art Tastaturnavigation in meinem einfachen Grafikprogramm (mit C #) programmieren. Und ich geriet erneut in Schwierigkeiten.

Mein Problem ist, dass ich die Tastatureingabe verarbeiten möchte, um eine Ebene zu verschieben. Das Verschieben der Ebene mit der Maus funktioniert bereits ganz gut, aber das Steuerelement erhält den Fokus nicht ( weder KeyUp / KeyDown / KeyPress noch GotFocus / LostFocus wird für dieses Steuerelement ausgelöst ). Da meine Klasse von Panel abgeleitet ist (und ein paar Ereignisse überschreibt), habe ich auch die oben erwähnten Ereignisse überschrieben, aber ich kann diese Ereignisse nicht auslösen.

Ich denke, ich könnte es schaffen, die Tastaturantwort zu implementieren, indem ich etwas wie Keyboard.GetState () oder ProcessCmdWnd oder so etwas verwende. Allerdings: Ich muss noch sagen können, wann die Kontrolle den Fokus hat.

Gibt es eine mehr oder weniger elegante Möglichkeit, diese Fähigkeit einer Benutzersteuerung hinzuzufügen (die auf Panel basiert)?

Ich habe viele Threads hier überprüft und ich könnte diesen Ansatz für die Tastatureingabe verwenden. Das Fokusproblem bleibt jedoch bestehen.

Vielen Dank für Informationen im Voraus!

Igor.

ps: Ich programmiere in C # .NET v3.5 mit VS2008. Es ist eine Windows.Forms-Anwendung, nicht WPF .




Um den Fokus zu erhalten, überprüfen Sie das MouseEnter-Ereignis im Eigenschaftenfenster.

Schreiben Sie den folgenden Code:

private void mainPanel_MouseEnter(object sender, EventArgs e)
{
    mainPanel.Focus();
}



Die Panels erhalten keinen Fokus. Sie müssen das Panel auswählen, wenn Sie die Abwesenheitszeit verfolgen und Ereignisse eingeben möchten

Rufen Sie panel1.Select() in MouseClick Event auf




Related