Control.PreviewKeyDown Control.PreviewKeyDown Control.PreviewKeyDown Control.PreviewKeyDown Event

Определение

Генерируется перед событием KeyDown при нажатии клавиши, когда элемент управления имеет фокус.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 

Примеры

В следующем примере кода показано Button , включающий ContextMenuStrip.The following code example demonstrates a Button that includes a ContextMenuStrip. Когда Button имеет фокус и нажатия клавиши со стрелкой вверх или вниз, ContextMenuStrip отображается.When the Button has the focus and you press the UP ARROW or DOWN ARROW keys, the ContextMenuStrip appears. PreviewKeyDown Обработчик событий обнаруживает при нажатии клавиш Стрелка вверх или Стрелка вниз и задает IsInputKey свойства true.The PreviewKeyDown event handler detects when the UP ARROW or DOWN ARROW keys are pressed and sets the IsInputKey property to true. При этом возникают KeyDown событий таким образом, можно отобразить ContextMenuStrip.This raises the KeyDown event so that you can display the ContextMenuStrip. Не следует помещать любую логику PreviewKeyDown обработчик событий, отличный от Чтобы задать IsInputKey свойства.You should not put any logic in the PreviewKeyDown event handler, other than to set the IsInputKey property. Вместо этого следует поместить логику в KeyDown обработчик событий.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

Комментарии

Так как они не считаются входной нажатия клавиш, некоторые клавиши, такие как TAB, RETURN, ESC и клавиш со стрелками, некоторые элементы управления обычно игнорируются.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. Например, по умолчанию Button управления игнорирует клавиш со стрелками.For example, by default, a Button control ignores the arrow keys. Нажатие клавиш со стрелками обычно вызывает переход к предыдущему или следующему элементу управления фокуса.Pressing the arrow keys typically causes the focus to move to the previous or next control. Клавиши со стрелками, считаются клавиши навигации и нажав клавишу, эти ключи обычно не вызывают KeyDown событие для Button.The arrow keys are considered navigation keys and pressing these keys typically do not raise the KeyDown event for a Button. Тем не менее, нажатие клавиши со стрелкой ключи для Button вызывать PreviewKeyDown событий.However, pressing the arrow keys for a Button does raise the PreviewKeyDown event. При обработке PreviewKeyDown событие для Button и параметр IsInputKey свойства true, вы можете отправить KeyDown событие при нажатии клавиш со стрелками.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. Тем не менее если вы обрабатываете клавиш со стрелками, фокус не перейдет к предыдущему или следующему элементу управления.However, if you handle the arrow keys, the focus will no longer move to the previous or next control.

Дополнительные сведения об обработке событий см. в разделе обработка и вызов событий.For more information about handling events, see Handling and Raising Events.

Применяется к