Question

Je montre avec Dialogs Form.ShowDialog (). Les formulaires sont mis à TopMost. Certains calculs de traitement d'image sont effectuées asynchronly en arrière-plan. Leurs résultats sont rendus sous la forme principale par Invoke. Jusqu'ici tout va bien. Chose étrange est que chaque maintenant et la boîte de dialogue modale est déplacé derrière la principale forme. Je suppose que cela se produit lorsque les messages qui construisent la boîte de dialogue sont en quelque sorte « perturbés » par Invoke.

Toutes les idées comment résoudre ce problème?

Était-ce utile?

La solution

En règle générale, éviter TopMost à moins que vous devez absolument pas. Si vous devez absolument pas, jamais plus d'une forme TopMost à la fois. (Après tout, il ne peut y avoir trois formes Topmost --- il faut que quelqu'un à perdre).

Tout d'abord, vérifiez que vous configurez correctement le propriétaire lorsque vous appelez Form.ShowDialog(). Cela rendra la nouvelle forme plus susceptible d'apparaître dans un endroit approprié et tout autour d'améliorer le comportement de l'application. Deuxièmement, vérifiez que vous avez une seule fenêtre TopMost à tout moment. Un échec combiné à faire ces choses pourrait certainement causer votre problème. Par exemple:.

// MainForm.cs -- Don't do this
this.TopMost = true;
childForm.TopMost = true;
childForm.ShowDialog(/*no parent spec'd*/);

Maintenant ce qui se passe? Le formulaire principal et la forme de l'enfant sont le plus élevé, si l'un d'eux est à perdre. MainForm était actif quand il a créé ChildForm comme premier niveau, mais ChildForm ne dispose pas d'un parent. Peut-être de Windows a décidé de faire le bureau de son parent. Cela pourrait entraîner la principale forme restant sur la forme de l'enfant nouvellement ouvert.

Autres conseils

Peut-être que vous pourriez essayer passer la forme possédante comme paramètre à ShowDialog, comme celle (syntaxe VB):

Form.ShowDialog(Me)

Je ne sais pas si cela changerait quoi que ce soit, mais la peine d'essayer ...

En outre, quand vous dites « Les formulaires sont mis à TopMost », voulez-vous dire la principale forme ou les formes modales? Avez-vous vraiment besoin de le mettre à Topmost? Parfois, les formes Topmost ont un comportement bizarre ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top