8
votes

Définir la boîte de dialogue uniquement après Showdialog () dans WPF

J'ai une fenêtre que j'ai parfois ouverte à l'aide de show () et parfois en utilisant showdialog () . Dans le second cas, le résultat de la boîte de dialogue renvoyé est important pour moi. Mais si je définis le dialogresult après avoir appelé show () i reçoit un invalidOperationException . Existe-t-il un moyen de savoir quelle méthode a été utilisée pour ouvrir la fenêtre et définir ou non la boîte à dialogrutes en conséquence? Ou y a-t-il un autre moyen?

Bien sûr, je sais que je peux attraper et ignorer l'exception, mais je n'aime pas cette solution.


0 commentaires

4 Réponses :


0
votes

Que diriez-vous de définir cela.dialogresult = dialogresult.bla dans l'événement de fermeture de formulaire?


2 commentaires

Comment cela aiderait-t-il? Cela le fixerait toujours même après le spectacle () et provoquerait l'exception. BTW J'utilise WPF (je n'ai pas précisé cela clairement) pour que le dialogresult est bool ?.


avant que je fasse ça.Close (); Dans la fenêtre modale, je définis cela.dialogresult = dialogresult.ok; Et dans la forme principale, c'est exactement ce que je reçois. Merci sgrassie :)



10
votes

Utilisez System.windows.interop.componentDisPatcher .Isthreadmodal à l'intérieur de la fenêtre pour déterminer s'il s'exécute sur un fil modal ou non.


1 commentaires

Ne fonctionne pas toujours, dans notre cas, nous avons dû envelopper le dialogue = x; Appelez dans un essai / capture pour un comportement approprié.



4
votes

Si vous regardez SET_DIALOGRESUTION dans le réflecteur, il vérifie _ShoWowAsdialog pour déterminer si la boîte de dialogue est modale. Malheureusement, c'est un domaine privé.

Construisez-vous toujours une nouvelle instance de la fenêtre avant d'appeler Afficher () / showdialog (). Si tel est le cas, vous pouvez transmettre un argument au constructeur indiquant comment il faut montrer.


0 commentaires

2
votes

Vous pouvez utiliser la propriété formul.modal pour vérifier le type d'utilisation.

dans le cas de l'utilisation de formul.show () Vous devez utiliser une autre façon de laisser connaître l'appelant de tout résultat du formulaire.

est là une raison d'utiliser les deux manières de montrer le formulaire?


1 commentaires

Cette propriété n'existe pas dans WPF