Control.PreviewKeyDown Ereignis

Definition

Tritt vor dem KeyDown-Ereignis ein, wenn eine Taste gedrückt wird, während dieses Steuerelement den Fokus besitzt.Occurs before the KeyDown event when a key is pressed while focus is on this control.

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 

Beispiele

Im folgenden Codebeispiel wird eine Button veranschaulicht, die eine ContextMenuStripenthält.The following code example demonstrates a Button that includes a ContextMenuStrip. Wenn das Button den Fokus besitzt und Sie die nach-oben-oder nach-unten-Taste drücken, wird der ContextMenuStrip angezeigt.When the Button has the focus and you press the UP ARROW or DOWN ARROW keys, the ContextMenuStrip appears. Der PreviewKeyDown Ereignishandler erkennt, wenn die nach-oben-oder nach-unten-Taste gedrückt wird, und legt die IsInputKey-Eigenschaft auf truefest.The PreviewKeyDown event handler detects when the UP ARROW or DOWN ARROW keys are pressed and sets the IsInputKey property to true. Dadurch wird das KeyDown Ereignis ausgelöst, sodass Sie die ContextMenuStripanzeigen können.This raises the KeyDown event so that you can display the ContextMenuStrip. Sie sollten keine Logik in den PreviewKeyDown-Ereignishandler einfügen, außer um die IsInputKey-Eigenschaft festzulegen.You should not put any logic in the PreviewKeyDown event handler, other than to set the IsInputKey property. Stattdessen sollten Sie die Logik in den KeyDown-Ereignishandler einfügen.Instead, you should put your logic in the KeyDown event handler.

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 Tastenkombinationen, wie z. b. die Registerkarten-, Rückgabe-, ESC-und Pfeiltasten, werden in der Regel von einigen Steuerelementen ignoriert, da Sie nicht als EINGABETASTE gedrückt werden.Some key presses, such as the TAB, RETURN, ESC, and arrow keys, are typically ignored by some controls because they are not considered input key presses. Beispielsweise werden von einem Button-Steuerelement standardmäßig die Pfeiltasten ignoriert.For example, by default, a Button control ignores the arrow keys. Wenn Sie die Pfeiltasten drücken, wird der Fokus in der Regel auf das vorherige oder das nächste Steuerelement verschoben.Pressing the arrow keys typically causes the focus to move to the previous or next control. Die Pfeiltasten werden als Navigationsschlüssel betrachtet. Wenn Sie diese Tasten drücken, wird das KeyDown-Ereignis für eine Buttonnormalerweise nicht angehoben.The arrow keys are considered navigation keys and pressing these keys typically do not raise the KeyDown event for a Button. Wenn Sie jedoch die Pfeiltasten für eine Button drücken, wird das PreviewKeyDown-Ereignis angehoben.However, pressing the arrow keys for a Button does raise the PreviewKeyDown event. Wenn Sie das PreviewKeyDown-Ereignis für eine Button behandeln und die IsInputKey-Eigenschaft auf truefestlegen, können Sie das KeyDown-Ereignis beim Drücken der Pfeiltasten erhöhen.By handling the PreviewKeyDown event for a Button and setting the IsInputKey property to true, you can raise the KeyDown event when the arrow keys are pressed. Wenn Sie jedoch die Pfeiltasten behandeln, wird der Fokus nicht mehr auf das vorherige oder das nächste Steuerelement verschoben.However, if you handle the arrow keys, the focus will no longer move to the previous or next control.

Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.For more information about handling events, see Handling and Raising Events.

Gilt für: