Поделиться через


Control.PreviewKeyDown Событие

Определение

Возникает перед событием KeyDown при нажатии клавиши во время фокуса на этом элементе управления.

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 

Тип события

Примеры

В следующем примере кода демонстрируется, Button включающее объект ContextMenuStrip. Button Если фокус имеется, и вы нажимаете клавиши СТРЕЛКА ВВЕРХ или СТРЕЛКА ВНИЗ, ContextMenuStrip появится. Обработчик PreviewKeyDown событий определяет, когда нажимаются клавиши СТРЕЛКА ВВЕРХ или СТРЕЛКА ВНИЗ и присваивают свойству IsInputKey значение true. Это вызывает KeyDown событие, чтобы отобразить его ContextMenuStrip. Логику PreviewKeyDown в обработчике событий не следует помещать, кроме того, чтобы задать IsInputKey свойство. Вместо этого следует поместить логику KeyDown в обработчик событий.

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 и клавиши со стрелками, обычно игнорируются некоторыми элементами управления, так как они не считаются клавишами ввода. Например, по умолчанию Button элемент управления игнорирует клавиши со стрелками. Нажатие клавиш со стрелками обычно приводит к переходу фокуса к предыдущему или следующему элементу управления. Клавиши со стрелками считаются клавишами навигации и нажатием этих клавиш обычно не вызывают KeyDown событие для Button. Однако нажатие клавиш со стрелками для Button события вызывает PreviewKeyDown событие. Обрабатывая PreviewKeyDown событие для Button свойства и задав IsInputKey его trueзначение, можно вызвать KeyDown событие при нажатии клавиш со стрелками. Однако если вы обрабатываете клавиши со стрелками, фокус больше не перейдет к предыдущему или следующему элементу управления.

Дополнительные сведения об обработке событий см. в разделе "Обработка и создание событий".

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