Domanda

sto mostrando finestre di dialogo con form.ShowDialog (). I moduli sono impostati per TopMost. Alcuni calcoli di elaborazione delle immagini vengono eseguiti asynchronly in background. I loro risultati sono resi nella forma principale Invoke. Fin qui tutto bene. cosa strana è che di tanto in tanto la finestra di dialogo modale viene spostato dietro la forma principale. Credo che si verifica quando i messaggi che si accumulano la finestra di dialogo sono in qualche modo "disturbati" di Invoke.

Tutte le idee come risolvere questo problema?

È stato utile?

Soluzione

Come regola generale, evitare TopMost a meno che assolutamente non deve. Se si deve assolutamente no, non hanno mai più di una forma TopMost alla volta. (Dopo tutto, non ci può essere di tre forme più in alto --- qualcuno deve perdere).

Per prima cosa, verificare che si sta impostando correttamente il proprietario quando si chiama Form.ShowDialog(). Questo renderà la nuova forma più probabilità di comparire in un luogo appropriato e tutto intorno migliorare il comportamento dell'applicazione. In secondo luogo, verificare la presenza di una sola finestra in primo piano in qualsiasi momento. Un fallimento combinati per fare queste cose potrebbe sicuramente causare il problema. Per esempio:.

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

Ora, cosa succede? Sia il modulo principale e il form figlio sono più in alto, così uno di loro ha avuto modo di perdere. MainForm era attiva quando ha creato ChildForm come più in alto, ma ChildForm non avere un genitore. Forse di Windows ha deciso di rendere il desktop suo genitore. Ciò potrebbe comportare la principale forma rimanendo sulla del form figlio di recente apertura.

Altri suggerimenti

Forse si potrebbe provare passando il modulo possessore come parametro per ShowDialog, come quella (sintassi VB):

Form.ShowDialog(Me)

Non sono sicuro se sarebbe cambiato nulla, ma vale la pena provare ...

Inoltre, quando si dice "Forme sono impostate per TopMost", vuoi dire la forma principale, o le forme modali? Avete veramente bisogno di impostarlo su Topmost? A volte le forme più in alto hanno un comportamento strano ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top