Control.PreviewKeyDown Ereignis

Definition

Tritt vor dem KeyDown-Ereignis ein, wenn eine Taste gedrückt wird, während dieses Steuerelement den Fokus besitzt.

public:
 event System::Windows::Forms::PreviewKeyDownEventHandler ^ PreviewKeyDown;
public event System.Windows.Forms.PreviewKeyDownEventHandler PreviewKeyDown;
public event System.Windows.Forms.PreviewKeyDownEventHandler? PreviewKeyDown;
member this.PreviewKeyDown : System.Windows.Forms.PreviewKeyDownEventHandler 
Public Custom Event PreviewKeyDown As PreviewKeyDownEventHandler 

Ereignistyp

Beispiele

Im folgenden Codebeispiel wird ein Button veranschaulicht, das ein ContextMenuStripenthält. Wenn der Button den Fokus hat und Sie die NACH-OBEN- oder NACH-UNTEN-TASTE drücken, wird angezeigt ContextMenuStrip . Der PreviewKeyDown Ereignishandler erkennt, wenn die NACH-OBEN- oder NACH-UNTEN-TASTE gedrückt wird, und legt die IsInputKey -Eigenschaft auf fest true. Dadurch wird das KeyDown -Ereignis ausgelöst, sodass Sie anzeigen ContextMenuStripkönnen. Sie sollten keine Logik in den PreviewKeyDown Ereignishandler einfügen, außer die IsInputKey Eigenschaft festzulegen. Stattdessen sollten Sie Ihre Logik in den KeyDown Ereignishandler einfügen.

public Form1()
{
    InitializeComponent();

    // Form that has a button on it
    button1.PreviewKeyDown +=new PreviewKeyDownEventHandler(button1_PreviewKeyDown);
    button1.KeyDown += new KeyEventHandler(button1_KeyDown);
    button1.ContextMenuStrip = new ContextMenuStrip();
    // Add items to ContextMenuStrip
    button1.ContextMenuStrip.Items.Add("One");
    button1.ContextMenuStrip.Items.Add("Two");
    button1.ContextMenuStrip.Items.Add("Three");
}

// By default, KeyDown does not fire for the ARROW keys
void button1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Down:
        case Keys.Up:
            if (button1.ContextMenuStrip != null)
            {
                button1.ContextMenuStrip.Show(button1,
                    new Point(0, button1.Height), ToolStripDropDownDirection.BelowRight);
            }
            break;
    }
}

// PreviewKeyDown is where you preview the key.
// Do not put any logic here, instead use the
// KeyDown event after setting IsInputKey to true.
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Down:
        case Keys.Up:
            e.IsInputKey = true;
            break;
    }
}
Public Class Form1

    Public Sub New()
        InitializeComponent()
        ' Form that has a button on it
        AddHandler Button1.PreviewKeyDown, AddressOf Me.button1_PreviewKeyDown
        AddHandler Button1.KeyDown, AddressOf Me.button1_KeyDown
        Button1.ContextMenuStrip = New ContextMenuStrip
        ' Add items to ContextMenuStrip
        Button1.ContextMenuStrip.Items.Add("One")
        Button1.ContextMenuStrip.Items.Add("Two")
        Button1.ContextMenuStrip.Items.Add("Three")
    End Sub

    ' By default, KeyDown does not fire for the ARROW keys
    Private Sub button1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
        Select Case (e.KeyCode)
            Case Keys.Down, Keys.Up
                If (Not (Button1.ContextMenuStrip) Is Nothing) Then
                    Button1.ContextMenuStrip.Show(Button1, _
                        New Point(0, Button1.Height), ToolStripDropDownDirection.BelowRight)
                End If
        End Select
    End Sub

    ' PreviewKeyDown is where you preview the key.
    ' Do not put any logic here, instead use the
    ' KeyDown event after setting IsInputKey to true.
    Private Sub button1_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs)
        Select Case (e.KeyCode)
            Case Keys.Down, Keys.Up
                e.IsInputKey = True
        End Select
    End Sub

End Class

Hinweise

Einige Tastendrücke, z. B. die TAB-, RETURN-, ESC- und Pfeiltasten, werden von einigen Steuerelementen in der Regel ignoriert, da sie nicht als Eingabetastendrücke gelten. Beispielsweise ignoriert ein Button Steuerelement standardmäßig die Pfeiltasten. Durch Drücken der Pfeiltasten wird der Fokus in der Regel zum vorherigen oder nächsten Steuerelement verschoben. Die Pfeiltasten gelten als Navigationsschlüssel, und das Drücken dieser Tasten löst in der Regel nicht das KeyDown Ereignis für ein aus Button. Durch Drücken der Pfeiltasten für ein Button wird das PreviewKeyDown Ereignis jedoch ausgelöst. Wenn Sie das PreviewKeyDown Ereignis für ein Button behandeln und die IsInputKey -Eigenschaft auf truefestlegen, können Sie das KeyDown Ereignis auslösen, wenn die Pfeiltasten gedrückt werden. Wenn Sie jedoch die Pfeiltasten behandeln, wird der Fokus nicht mehr zum vorherigen oder nächsten Steuerelement verschoben.

Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.

Gilt für: