web-dev-qa-db-fra.com

La détermination de la touche Entrée est enfoncée dans une zone de texte

Considérez un XAML TextBox dans Win Phone 7.

  <TextBox x:Name="UserNumber"   />

Le but ici est que lorsque l'utilisateur appuie sur le bouton Enter du clavier à l'écran, cela déclenche une logique pour actualiser le contenu à l'écran.

J'aimerais qu'un événement soit déclenché spécifiquement pour Enter. Est-ce possible?

  • L'événement est-il spécifique à la TextBox ou s'agit-il d'un événement de clavier système?
  • Faut-il vérifier le Enter sur chaque pression de touche? c'est-à-dire un analogue de ASCII 13?
  • Quelle est la meilleure façon de coder cette exigence?

alt text

40
p.campbell

Une approche simple pour cela dans une zone de texte est

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        Debug.WriteLine("Enter");
    }
}
71
Mick N

Vous chercherez à implémenter l'événement KeyDown spécifique à cette zone de texte et à vérifier KeyEventArgs pour la touche réelle enfoncée (et si elle correspond à Key.Enter, faites quelque chose)

<TextBox Name="Box" InputScope="Text" KeyDown="Box_KeyDown"></TextBox>

private void Box_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key.Equals(Key.Enter))
    {
        //Do something
    }
}

Juste une note que dans la version bêta de l'émulateur WP7, bien que l'utilisation du clavier logiciel détecte correctement la touche Entrée, si vous utilisez le clavier matériel (activé en appuyant sur Pause/Pause), la touche Entrée semble venir à travers comme Key.Unknown - ou du moins, il le faisait sur mon ordinateur ...

13
Henry C

Si vous utilisez l'émulateur, vous pouvez également faire quelque chose comme ça pour détecter la touche Entrée de votre clavier physique.

    private void textBox1_KeyUp(object sender, KeyEventArgs e) {
        var isEnterKey =
            e.Key == System.Windows.Input.Key.Enter ||
            e.PlatformKeyCode == 10;

        if (isEnterKey) {
            // ...
        }
    }
6
SandRock

Désactiver le clavier

A été confronté au même problème; les exemples ci-dessus ne donnent que des détails sur la façon de piéger l'événement de pression du clavier (qui répond à la question), mais pour désactiver le clavier, cliquer ou entrer, j'ai juste le focus défini sur un autre contrôle.

Ce qui entraînera la désactivation du clavier.

private void txtCodeText_KeyDown(object sender, KeyEventArgs e)
{
    if(e.Key.Equals(Key.Enter))
    {
        //setting the focus to different control
        btnTransmit.Focus();
    }
}
5
Saikrishnan