web-dev-qa-db-fra.com

Comment savoir quand la touche Entrée est enfoncée dans une zone de texte?

En gros, je veux pouvoir déclencher un événement lorsque le ENTER la touche est enfoncée. J'ai déjà essayé ceci:

private void input_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Equals("{ENTER}"))
        {
            MessageBox.Show("Pressed enter.");
        }
    }

Mais la MessageBox ne se présente jamais. Comment puis-je faire ceci?

15
Jon

Donnez un coup de feu ...

private void input_KeyDown(object sender, KeyEventArgs e) 
{                        
    if(e.KeyData == Keys.Enter)   
    {  
        MessageBox.Show("Pressed enter.");  
    }             
}
25
Chris Gessler

Pour ajouter à la réponse de @Willy David Jr: vous pouvez également utiliser des codes de clé réels.

private void input_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyChar == 13)
    {
        MessageBox.Show("Pressed enter.");
    }
}
2

Vous pouvez en fait juste dire

private void input_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        MessageBox.Show("Pressed enter.");
    }
}
2
Makusium

Vous pouvez aussi faire ceci:

  private void input_KeyDown(object sender, KeyEventArgs e) 
  {                        
    if(e.KeyCode== Keys.Enter)   
    {  
        //Your business logic here.
    }             
  }

La seule différence avec KeyCode contre KeyData est que KeyCode peut détecter une combinaison de modificateurs avec KeyCode (par exemple, CTRL, Maj + A) dont vous n'avez pas besoin ici.

0
Willy David Jr

Vous pouvez utiliser l'événement Keypress. Si vous recherchez simplement la touche "Entrée", vous ne vous souciez probablement pas des touches de modification (telles que Maj et/ou Ctrl), raison pour laquelle la plupart des utilisateurs utiliseraient KeyDown au lieu de Keypress. Un deuxième avantage est de répondre à la question presque toujours posée après la mise en oeuvre de any des autres réponses: "Lorsque j'utilise le code référencé, pourquoi appuyer sur" Entrée "provoque-t-il un bip? C'est parce que l'événement Keypress doit être géré. En utilisant Keypress, vous résolvez les deux à la fois:

private void input_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Enter)
    {
        // Your logic here....
        e.Handled = true; //Handle the Keypress event (suppress the Beep)
    }
}
0
OldDog

Si AcceptButton est défini dans votre formulaire, vous ne pourrez pas utiliser KeyDown pour capturer l'entrée.

Ce que vous devriez faire est de l'attraper au niveau de la forme. Ajoutez ce code au formulaire:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if ((this.ActiveControl == myTextBox) && (keyData == Keys.Return))
    {
        //do something
        return true;
    }
    else
    {
        return base.ProcessCmdKey(ref msg, keyData);
    }
}
0
AecorSoft