Forme.ShowDialog() ou la Forme.ShowDialog(ce)?

J'ai entendu dire que si je l'appelle la forme.ShowDialog() sans indiquer de la propriétaire, il peut y avoir un cas où je ne vais pas voir la boîte de dialogue formulaire sur l'écran (il sera caché avec d'autres fenêtres). Est-il vrai? J'ai utilisé ShowDialog() sans indiquer le propriétaire des centaines de fois et je n'ai jamais eu de problèmes avec ça.

Pouvez-vous nous expliquer dans quelle situation je pourrais obtenir le problème décrit?

Mise à JOUR:

Bien, j'ai fait de nombreuses expériences, et je ne pouvais pas obtenir de réels problèmes inattendus avec l'aide de ShowDialog() (sans spécifier le propriétaire).

Donc je pense que c'est juste des rumeurs qui ShowDialog() peut conduire à des problèmes.
Si vous n'acceptez pas - donnez-moi un exemple de code veuillez qui conduit à un problème.

  • Cela ne semble pas s'appliquer dans les winforms, mais pour la petite histoire, je suis venu ici parce que j'ai eu des problèmes dans WPF. Si je suis passé à une autre application, quand j'ai cliqué à nouveau sur le formulaire parent, l'enfant de dialogue s'est coincé derrière (la poisse que la boîte de dialogue enfant a été configuré pour ne pas afficher dans la barre des tâches). Réglage de la propriétaire de la boîte de dialogue corrigé ce problème.
  • Démarrer un fond travailleur et appel ShowDialog. La fenêtre n'apparaît pas dans l'avant de votre application, mais sur le fond (juste pour nous énerver programmeurs cela n'arrive que de temps en temps).
  • Barfieldmv, j'ai essayé de faire ce que vous avez suggéré et le formulaire s'affiche sur le dessus, pas sur le fond.
  • donnez-moi un exemple de code veuillez qui conduit à un problème de mauvaise approche. Le contrat est MSDN, la mise en œuvre de comportement est l'humeur d'aujourd'hui. Des comportements peuvent être différents sur une autre version de Windows, et peut changer avec la mise à jour Windows, les fonctionnalités de Windows ou d'autres programmes. Une fenêtre modale ne avoir un propriétaire, tout le monde attend de vous que vous spécifiez correcte.
  • Comme par exemple: Form1 avec un bouton qui lance un timer de ~1s. La minuterie Tick événement arrête le chronomètre, et ouvre Form2 avec ShowDialog. Ensemble Form2.ShowInTaskbar=falsede sorte qu'il se comporte comme une fenêtre popup. Démarrer le programme, cliquez sur le bouton, puis sélectionnez un autre programme avant que la minuterie se déclenche. Cliquez sur l'icône de la barre d'apporter votre application au premier plan à nouveau. Sur mon système, j'observe: Les handicapés Form1 obtient le focus d'entrée (au lieu de Form2), et en cliquant sur Form1 ne clignote pas Form2 de la barre de titre.
  • alors pourquoi le contrat avec la boîte de dialogue nous permet de faire la bonne chose et de ne pas le préciser?
  • Je suis n'a pas de conception de la WInforms API, mais de mon expérience: il peut être OK, de temps en temps, ou il semblait être une bonne idée à l'époque.

InformationsquelleAutor nightcoder | 2009-05-03