Control.PreviewKeyDown Evento

Definição

Ocorre antes do KeyDown evento, quando uma tecla é pressionada enquanto o foco está neste controlo.

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 seguinte demonstra um Button que inclui um ContextMenuStrip. Quando tem Button o foco e pressionas as teclas SETA PARA CIMA ou SETA PARA BAIXO, aparece.ContextMenuStrip O PreviewKeyDown gestor de eventos deteta quando as teclas SETA PARA CIMA ou SETA PARA BAIXO são pressionadas e define a IsInputKey propriedade para true. Isto eleva o KeyDown evento para que possa mostrar o ContextMenuStrip. Não deve colocar qualquer lógica no PreviewKeyDown gestor de eventos, exceto definir a IsInputKey propriedade. Em vez disso, deves colocar a tua lógica no KeyDown gestor 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

Observações

Alguns pressionamentos de teclas, como as teclas TAB, RETURN, ESC e setas, são normalmente ignorados por alguns controlos porque não são considerados pressionamentos de teclas de entrada. Por exemplo, por defeito, um Button controlo ignora as teclas de seta. Pressionar as setas normalmente faz com que o foco passe para o controlo anterior ou seguinte. As setas são consideradas teclas de navegação e pressionar estas teclas normalmente não aumenta o KeyDown evento para um Button. No entanto, pressionar as setas para um Button aumenta o PreviewKeyDown evento. Ao tratar o PreviewKeyDown evento para a Button e definir a IsInputKey propriedade para true, pode aumentar o KeyDown evento quando as setas são pressionadas. No entanto, se manuseares nas setas, o foco deixa de se mover para o controlo anterior ou próximo.

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

Aplica-se a