2010-01-22 4 views
1

J'ai un formulaire avec un bouton qui est défini comme AcceptButton du formulaire. Le formulaire a plusieurs autres contrôles. Maintenant, lorsque j'appuie sur Entrée sur d'autres contrôles, le formulaire se ferme à cause du bouton d'acceptation sur le formulaire. Idem pour CancelButton. Comment puis-je gérer cela. J'ai essayé d'accrocher à l'événement keydown keypress du formulaire et des contrôles. Aucun ne fonctionne. Un travail pour ça?C#: problème avec Form.AcceptButton

Merci une tonne, Datte

Répondre

1

pas exactement sur la façon dont vous vous attendez votre formulaire à la fonction, mais vous pouvez faire quelque chose comme ce qui suit pour avoir un peu plus de contrôle sur les choses:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Enter) 
     { 
      // do something 
     } 
     if (keyData == Keys.Escape) 
     { 
      // do something else 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
4

Voilà comment les œuvres AcceptButton de propriété. Il spécifie le bouton qui est automatiquement cliqué chaque fois que vous appuyez sur <Enter>.

Si vous ne voulez pas ce comportement, ne le définissez pas comme AcceptButton. Il n'y a pas d'autre raison de le faire.

1

Vous pouvez supprimer AcceptButton de formulaire et définissez les KeyPreview propriété sur le formulaire qui va gérer son événement KeyDown. Là, vous pouvez vérifier la touche Entrée et prendre l'action en conséquence.

0

Ceci est l'une des caractéristiques de la forme-à-dire

si le bouton n'a pas le focus si vous voulez toujours le code désiré à exécuter lorsque l'utilisateur cliquez sur Enter ...

Définissez la propriété de AcceptButton un formulaire pour permettre aux utilisateurs de cliquer sur un bouton en appuyant sur la touche ENTER même si le bouton n'a pas le focus.

Cordialement.

-2

Try This One In VB> net

If CType(Me.ActiveControl, Button).Name = Button1.Name Then 

     End If 
+0

Ce code est incorrect (en plus d'être le code VB.NET au lieu du code C# - voir les balises question). Vous ne pouvez pas spécifier le type de cible en tant que chaîne lors de la conversion de type. Une autre façon d'écrire cela serait 'Object.ReferenceEquals (Me.ActiveControl(), btnSubmit)'. – stakx

+0

vérifiez-le? j'ai édité. –

+0

@stakx: ... pour être honnête, je préférerais '==' –