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?
Donnez un coup de feu ...
private void input_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyData == Keys.Enter)
{
MessageBox.Show("Pressed enter.");
}
}
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.");
}
}
Vous pouvez en fait juste dire
private void input_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
MessageBox.Show("Pressed enter.");
}
}
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.
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)
}
}
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);
}
}