2009-03-23 7 views
3

Denken Sie darüber nach für einen Info-Dialog, aber ich bin mir sicher, dass es auch an anderen Stellen anwendbar ist.Wie machen Sie einen nicht-modalen obersten Dialog, der in Bezug auf das übergeordnete Formular in WinForms nur das oberste ist?

Sorry, wenn das ein Dupe ist, aber ich konnte das nicht finden oder wie man den letzten Teil artikuliert darüber nur auf dem Elternteil sein. Wie erstellt man ein Formular, das immer über dem übergeordneten Formular steht, aber nicht modal ist, aber andere Apps nicht verdeckt?

Antwort

9

Versuchen Sie dies Ihren Dialog zu öffnen:

FindDialog fd = new FindDialog(); 
fd.Show(this); 

Der Schlüssel ist Dialog Besitzer zuweisen.

+0

Kannte es musste etwas einfaches sein, danke! – Davy8

0

Nicht sicher, was Sie genau meinen; Form.ShowDialog ist nur in Bezug auf das übergeordnete Element modal, nicht die Anwendung, es sei denn, die Anwendung ist single-threaded.

Zum Beispiel habe ich eine App dies zu testen, die wie die folgende organisiert wurde:

Hauptform: 2 Tasten, von denen jeder einen Faden beginnt, die eine frmDialog1 erzeugt und ruft Showdialog

frmDialog1: einzelne Schaltfläche, die ein frmDialog2 erstellt und ShowDialog darauf aufruft.

frmDialog2: (. Dh leer) tut nichts

, wenn sie alle liefen I/Drag Main zugreifen konnte. Ich könnte das selbe mit frmDialog1 (beide Versionen) auch nur tun, wenn ich die Schaltfläche nicht geklickt hatte, die Dialog 2 zeigt.

+0

"Form.ShowDialog ist nur modal in Bezug auf das übergeordnete, nicht die Anwendung, es sei denn, die Anwendung ist single-threaded." Richtig, aber ich möchte es nicht modal in Bezug auf die Eltern, aber ich wollte es immer noch oben auf dem Elternteil. – Davy8

+0

Sie haben auch Recht, dass ich einen neuen Thread starten konnte, um den Dialog anzuzeigen, um die Hauptbenutzeroberfläche nicht zu blockieren, aber ich versuche, manuelles Threading zu vermeiden, wenn ich ihm helfen kann. Ich brauche das Ergebnis des Dialogs nicht, es ist nur ein Info-Dialog, also scheint ein Thread zu überladen. – Davy8

+0

Da es Ihre App ist, werde ich auf Ihre Weisheit verzichten; aber ein 2 Liner Thread was auch immer = new Thread (Methodenname); was auch immer.Start(); ist kaum übertrieben. –