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. Когда фокус переместится и вы нажмете клавишу Стрелка вверх или стрелка вниз ContextMenuStrip , отображается. ButtonWhen the Button has the focus and you press the UP ARROW or DOWN ARROW keys, the ContextMenuStrip appears. Обработчик событий обнаруживает нажатие клавиш со стрелками вверх или вниз и IsInputKey устанавливает свойство в trueзначение. PreviewKeyDownThe 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 иприсвоенииKeyDown свойству значения ,событиеможновызватьпринажатииклавишсострелками.trueBy 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.

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