2009-08-29 8 views
1

Mon problème semble être assez simple, mais cela ne fonctionne pas de manière intuitive.VB.NET: La boîte de dialogue se ferme-t-elle lorsque vous appuyez sur Entrée?

Je suis en train de concevoir une application Windows Forms, et il y a une boîte de dialogue qui NE DOIT PAS quitter lorsque la touche Entrée est enfoncée, mais qui doit d'abord valider les données, ComboBox.

J'ai essayé en lui disant quoi faire sur pression de touche du ComboBox si e est le Entrez clé:

Private Sub ComboBoxSizeChoose_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBoxSizeChoose.KeyPress 
    If e.KeyChar = Convert.ToChar(Keys.Enter) Then 
     Try 
      TamanhoDaNovaFonte = Single.Parse(ComboBoxSizeChoose.Text) 
     Catch ex As Exception 
      Dim Dialogo2 As New Dialog2 
      Dialog2.ShowDialog() 
      ComboBoxSizeChoose.Text = TamanhoDaNovaFonte 
     End Try 
    End If 
End Sub 

Mais sans succès jusqu'à présent. Lorsque la touche Enter est enfoncée, même avec le ComboBox sur le focus, la boîte de dialogue entière est fermée, en revenant au formulaire précédent. La validation est PAS fait du tout, et cela doit être fait avant de quitter. En fait, je ne veux même pas quitter sur le formulaire d'entrée KeyPress, le seul but de la touche d'entrée sur l'ensemble de la boîte de dialogue est de valider la ComboBox (mais seulement en focus, pour une interface utilisateur intuitive).

J'ai également essayé d'ajouter la validation à l'événement KeyPress du formulaire de la boîte de dialogue entière, si la clé est Entrez. SANS SUCCÈS! C'est comme si mon code n'était pas là du tout.

Que dois-je faire?

(Visual Studio 2008, VB.NET)

Répondre

3

Assurez-vous que vous n'avez pas de bouton dans la boîte de dialogue défini sur autre chose que DialogResult.None. Par exemple, si un bouton est défini sur DialogResult.OK, il servira de bouton "par défaut" et fermera votre formulaire.

+0

Cela empêchera la fermeture de la boîte de dialogue, mais le bouton OK ne fonctionne plus comme prévu. – Marc

+0

Vous devez ajouter un gestionnaire d'événements click au bouton OK et définir la propriété DialogResult du formulaire, puis fermez le formulaire. Cela fera en sorte qu'il se comportera comme une boîte de dialogue, mais forcera l'utilisateur à utiliser la souris au lieu d'appuyer sur Entrée pour fermer la boîte de dialogue. –

+0

@Reed, ce que vous décrivez est déjà le comportement par défaut dans les winforms VB .NET. Le bouton OK possède un gestionnaire d'événements click qui définit le résultat du dialogue et le ferme. – Marc

0

Bien que pas votre réponse, je vous recommande de ne pas utiliser des exceptions pour contrôler le flux logique. Cela dit, essayez plutôt Single.TryParse pour rendre votre flux moins ... bien, exceptionnel.

Pour modifier le comportement que vous voyez, modifiez le bouton AcceptButton de la boîte de dialogue à partir du bouton OK. La modification de DialogResult de ce bouton à None n'empêche pas l'événement click de se déclencher, mais seulement de fermer la boîte de dialogue. Bien que le comportement puisse sembler quelque chose que vous désirez, le résultat ne le fait pas.

+0

Merci! mais est-il coûteux d'utiliser try/exceptions? Cela semble plus intuitif de cette façon, car c'est un sous-système privé que l'on utilise parfois. –

Questions connexes