Compartilhar via


Control.PreviewKeyDown Evento

Definição

Ocorre antes do evento KeyDown quando uma chave é pressionada enquanto o foco está neste controle.

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 

Tipo de evento

Exemplos

O exemplo de código a seguir demonstra um Button que inclui um ContextMenuStrip. Quando o Button tem o foco e você pressiona as teclas seta para cima ou seta para baixo, o ContextMenuStrip é exibido. O PreviewKeyDown manipulador de eventos detecta quando as teclas seta para cima ou seta para baixo são pressionadas e define a IsInputKey propriedade como true. Isso gera o KeyDown evento para que você possa exibir o ContextMenuStrip. Você não deve colocar nenhuma lógica no PreviewKeyDown manipulador de eventos, além de definir a IsInputKey propriedade . Em vez disso, você deve colocar sua lógica no KeyDown manipulador de eventos.

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

Comentários

Algumas teclas pressionadas, como TAB, RETURN, ESC e teclas de seta, normalmente são ignoradas por alguns controles porque não são consideradas pressionamentos de tecla de entrada. Por exemplo, por padrão, um Button controle ignora as teclas de direção. Pressionar as teclas de direção normalmente faz com que o foco se mova para o controle anterior ou próximo. As teclas de direção são consideradas teclas de navegação e pressionar essas teclas normalmente não geram o KeyDown evento para um Button. No entanto, pressionar as teclas de direção para um Button aciona o PreviewKeyDown evento. Manipulando o PreviewKeyDown evento para um Button e definindo a IsInputKey propriedade como true, você pode acionar o KeyDown evento quando as teclas de direção são pressionadas. No entanto, se você manipular as teclas de direção, o foco não será mais movido para o controle anterior ou próximo.

Para obter mais informações sobre como lidar com eventos, consulte Manipulando e gerando eventos.

Aplica-se a