Partage via


Control.PreviewKeyDown Événement

Définition

Se produit avant l'événement KeyDown quand l'utilisateur appuie sur une touche pendant que le focus est sur ce contrôle.

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 

Type d'événement

Exemples

L’exemple de code suivant illustre un Button qui inclut un ContextMenuStrip. Lorsque le Button a le focus et que vous appuyez sur la flèche haut ou vers le bas, le ContextMenuStrip apparaît. Le PreviewKeyDown gestionnaire d’événements détecte quand les touches flèche vers le haut ou flèche bas sont enfoncées et affecte à la propriété la IsInputKey valeur true. Cela déclenche l’événement KeyDown afin que vous puissiez afficher le ContextMenuStrip. Vous ne devez placer aucune logique dans le PreviewKeyDown gestionnaire d’événements, autre que pour définir la IsInputKey propriété . Au lieu de cela, vous devez placer votre logique dans le gestionnaire d’événements 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

Remarques

Certaines touches, telles que tabulation, RETOUR, ÉCHAP et flèche, sont généralement ignorées par certains contrôles, car elles ne sont pas considérées comme des touches d’entrée. Par exemple, par défaut, un Button contrôle ignore les touches de direction. Le fait d’appuyer sur les touches de direction entraîne généralement le déplacement du focus vers le contrôle précédent ou suivant. Les touches de direction sont considérées comme des touches de navigation et l’appui sur ces touches ne déclenche généralement pas l’événement KeyDown pour un Button. Toutefois, le fait d’appuyer sur les touches de direction d’un Button déclenche l’événement PreviewKeyDown . En gérant l’événement PreviewKeyDown pour un Button et en affectant à truela propriété la IsInputKey valeur , vous pouvez déclencher l’événement KeyDown lorsque vous appuyez sur les touches de direction. Toutefois, si vous gérez les touches de direction, le focus ne passe plus au contrôle précédent ou suivant.

Pour plus d'informations sur la gestion des événements, voir gestion et déclenchement d’événements.

S’applique à