2009-11-28 4 views
9

Lorsque l'utilisateur entre un nombre dans une zone de texte, j'aimerais qu'il puisse appuyer sur Entrée et simuler en appuyant sur un bouton Mettre à jour ailleurs sur le formulaire. J'ai regardé ceci plusieurs endroits en ligne, et ceci semble être le code que je veux, mais cela ne fonctionne pas. Lorsque les données ont été placées dans la zone de texte et que vous appuyez sur Entrée, tout ce que vous obtenez est un ding. Qu'est-ce que je fais mal? (Visual Studio 2008)Impossible de capturer la touche Entrée dans la zone de texte WinForms

private void tbxMod_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     btnMod.PerformClick(); 
    } 
} 
+1

Essayez cette solution ... il fonctionne .... private void (object sender, EventArgs e) {button1_Click de MessageBox.Show ("bouton est pressé"); } textBox1_KeyPress private void (object sender, KeyPressEventArgs e) {if (e.KeyChar == '\ r') { button1.PerformClick(); } } Voici le code qui vous permettra d'appuyer sur le bouton lorsque vous appuyez sur Entrée dans la zone de texte .... vérifiez-le .... –

Répondre

5

Quelques réflexions:

  • ne forme que accept bouton (ensemble sur la Form) qui pourraient être en train de voler ret
  • fait la zone de texte ont validation activée et échouée? essayez de désactiver cela
  • Est-ce que quelque chose a l'aperçu de la clé activé?
+0

a) Non b) Je valide une entrée dans la fonction _Click en utilisant int32.tryparse, mais seulement après l'événement Click. J'ai essayé de commenter toute la fonction et de simplement mettre un MessageBox et cela n'a toujours pas fonctionné. 3) Regardé sur le contrôle de formulaire - l'aperçu des touches est désactivé. J'ai également passé les quatre prochaines réponses ci-dessous. Rien ne semble faire l'affaire jusqu'à présent. –

0

propriétés du formulaire> set KeyPreview true

1

Set e.Handled à true immédiatement après la ligne btnMod.PerformClick();.

Espérons que cela aide. Etes-vous sûr que le clic sur le bouton n'est pas effectué?

9

Je viens de faire un test, ça fonctionne bien pour moi. Et voici le moyen d'empêcher le son "ding":

private void tbxMod_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     btnMod.PerformClick(); 
     e.SuppressKeyPress = true; 
    } 
} 
2

Sous "Propriétés" du formulaire. Category (Misc) a les options suivantes:

AccepterBouton, AnnulerButton, KeyPreview, & ToolTip.

Si vous appuyez sur la touche Enter, le bouton AcceptButton doit être activé sur le bouton que vous voulez cliquer.

0

Le code simple ci-dessous fonctionne très bien (appuyer sur la touche Entrée alors que dans textBoxPlatypusNumber affiche "UpdatePlatypusGrid()"); le KeyPreview du formulaire est mis à false:

private void textBoxPlatypusNumber_KeyDown(object sender, KeyEventArgs e) { 
    if (e.KeyCode == Keys.Enter) 
    { 
     UpdatePlatypusGrid(); 
    } 
} 

private void UpdatePlatypusGrid() 
{ 
    MessageBox.Show("UpdatePlatypusGrid() entered"); 
} 
1

J'ai dû combiner la réponse de Thomas et celle de Marc. J'ai eu un AcceptButton ensemble sur la forme, donc je devais faire tout cela:

private void tbxMod_Enter(object sender, EventArgs e) 
    { 
     AcceptButton = null; 
    } 

    private void tbxMod_Leave(object sender, EventArgs e) 
    { 
     AcceptButton = buttonOK; 
    } 

    private void tbxMod_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      // Click your button here or whatever 
      e.Handled = true; 
     } 
    } 

J'utilisé e.Handled de t0mm13b, bien que e.SuppressKeyPress Thomas semble fonctionner aussi bien. Je ne suis pas sûr de ce que la différence pourrait être.

Questions connexes