Control.PreviewKeyDown Control.PreviewKeyDown Control.PreviewKeyDown Control.PreviewKeyDown Event

Definizione

Si verifica prima dell'evento KeyDown quando viene premuto un tasto mentre il controllo ha lo stato attivo.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 

Esempi

Nell'esempio di codice riportato di Button seguito viene illustrato ContextMenuStripun oggetto che include un oggetto.The following code example demonstrates a Button that includes a ContextMenuStrip. Quando ha lo stato attivo e si preme il tasto freccia su o freccia giù ContextMenuStrip , viene visualizzato. ButtonWhen the Button has the focus and you press the UP ARROW or DOWN ARROW keys, the ContextMenuStrip appears. Il PreviewKeyDown gestore eventi rileva quando vengono premuti i tasti freccia su o freccia giù e imposta IsInputKey la proprietà truesu.The PreviewKeyDown event handler detects when the UP ARROW or DOWN ARROW keys are pressed and sets the IsInputKey property to true. Viene generato l' KeyDown evento in modo che sia possibile ContextMenuStripvisualizzare.This raises the KeyDown event so that you can display the ContextMenuStrip. Non è consigliabile inserire alcuna logica nel PreviewKeyDown gestore eventi, tranne che per impostare la IsInputKey proprietà.You should not put any logic in the PreviewKeyDown event handler, other than to set the IsInputKey property. È invece necessario inserire la logica nel KeyDown gestore eventi.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

Commenti

Alcune pressioni chiave, ad esempio i tasti TAB, RETURN, ESC e Arrow, vengono in genere ignorate da alcuni controlli perché non sono considerate pressioni del tasto di input.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. Per impostazione predefinita, ad esempio, Button un controllo Ignora i tasti di direzione.For example, by default, a Button control ignores the arrow keys. Quando si preme il tasto freccia, lo stato attivo viene spostato sul controllo precedente o successivo.Pressing the arrow keys typically causes the focus to move to the previous or next control. I tasti di direzione sono considerati tasti di navigazione e la pressione di questi tasti in KeyDown genere non genera Buttonl'evento per un oggetto.The arrow keys are considered navigation keys and pressing these keys typically do not raise the KeyDown event for a Button. Tuttavia, se si preme il tasto freccia Button per un oggetto PreviewKeyDown , viene generato l'evento.However, pressing the arrow keys for a Button does raise the PreviewKeyDown event. Gestendo l' PreviewKeyDown evento per un Button oggetto e impostando la true IsInputKey proprietà su, è possibile KeyDown generare l'evento quando vengono premuti i tasti di direzione.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. Tuttavia, se si gestiscono i tasti di direzione, lo stato attivo non verrà più spostato sul controllo precedente o successivo.However, if you handle the arrow keys, the focus will no longer move to the previous or next control.

Per ulteriori informazioni sulla gestione degli eventi, consultare gestione e generazione di eventi.For more information about handling events, see Handling and Raising Events.

Si applica a