Control.PreviewKeyDown Evento

Definição

Ocorre antes do evento KeyDown quando uma chave é pressionada enquanto o foco está neste controle.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 

Tipo de evento

PreviewKeyDownEventHandler

Exemplos

O exemplo de código a seguir demonstra um Button que inclui um ContextMenuStrip .The following code example demonstrates a Button that includes a ContextMenuStrip. Quando o Button tiver o foco e você pressionar as teclas seta para cima ou seta para baixo, ContextMenuStrip aparecerá.When the Button has the focus and you press the UP ARROW or DOWN ARROW keys, the ContextMenuStrip appears. 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 .The PreviewKeyDown event handler detects when the UP ARROW or DOWN ARROW keys are pressed and sets the IsInputKey property to true. Isso gera o KeyDown evento para que você possa exibir o ContextMenuStrip .This raises the KeyDown event so that you can display the ContextMenuStrip. Você não deve colocar nenhuma lógica no PreviewKeyDown manipulador de eventos, a não ser definir a IsInputKey propriedade.You should not put any logic in the PreviewKeyDown event handler, other than to set the IsInputKey property. Em vez disso, você deve colocar sua lógica no KeyDown manipulador de eventos.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

Comentários

Alguns pressionamentos de tecla, como a guia, retornar, ESC e teclas de direção, são normalmente ignorados por alguns controles porque não são considerados pressionamentos de tecla de entrada.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. Por exemplo, por padrão, um Button controle ignora as teclas de direção.For example, by default, a Button control ignores the arrow keys. Pressionar as teclas de direção normalmente faz com que o foco se mova para o controle anterior ou próximo.Pressing the arrow keys typically causes the focus to move to the previous or next control. As teclas de direção são consideradas chaves de navegação e pressionar essas chaves normalmente não gera o KeyDown evento para um Button .The arrow keys are considered navigation keys and pressing these keys typically do not raise the KeyDown event for a Button. No entanto, pressionar as teclas de seta para um Button gera o PreviewKeyDown evento.However, pressing the arrow keys for a Button does raise the PreviewKeyDown event. Ao manipular o PreviewKeyDown evento para um Button e definir a IsInputKey propriedade como true , você pode gerar o KeyDown evento quando as teclas de direção forem pressionadas.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. No entanto, se você manipular as teclas de direção, o foco não será mais movido para o controle anterior ou próximo.However, if you handle the arrow keys, the focus will no longer move to the previous or next control.

Para obter mais informações sobre como manipular eventos, consulte manipulando e gerando eventos.For more information about handling events, see Handling and Raising Events.

Aplica-se a