1

Ich arbeite an Winform-Anwendung, wo ich ein Popup anzeigen muss. Ich mache das zur Zeit mit der ShowDialog() Methode. aber wegen der Änderung der Anforderung möchte ich es als Nicht-Dialog zeigen. Also habe ich die show() -Methode anstelle von showDialog() verwendet.Was ist der Unterschied zwischen Show und Showdialog in Bezug auf das Schließen des Formulars in C# .net

Mein Popup-Fenster verwendet Windows WebBrowse-Steuerelement als eines seiner untergeordneten Steuerelement.

Mein Problem ist, wenn ich ShowDialog() -Methode verwenden, alles funktioniert gut. aber wenn ich show() Methode verwende, und schließe das Popup (sobald der Benutzer mit seiner Arbeit fertig ist), zeige method() irgendwie dispose Methode von webBrowse Steuerelement und das hindert mich daran, das gleiche Popup erneut zu starten und mir "Kann nicht Zugriff auf ein Objekt "Fehler".

Ist dieses erwartete Verhalten in Show() - Methode oder WebBrowse-Steuerelement. Wenn ja, wie kann ich es lösen?

Hinweis: Das PopUp-Dialogfeld wird mit DI in den Presenter eingefügt, sodass nach jeder Entsorgung kein Popup eingefügt werden kann.

Vielen Dank im Voraus.

+0

Scheint interessant, können Sie Ihren Code posten? –

+0

show method hat keine Bestimmung, das Steuerelement zu entsorgen, bis und sofern durch explizite Benutzeraktion oder den Code ausgelöst. Fügen Sie weitere Details zum besseren Verständnis hinzu. –

Antwort

1

von Showdialog() verwenden können Sie nicht auf Ihre Eltern Form zurückgehen, indem man einfach zeigen, mit() können Sie zurückgehen, das ist alles

0

Mit Show(), Ihr Code geht zu der Zeile nach der Show-Anweisung. Mit ShowDialog(), tut es nicht.

+0

Dies ist wahrscheinlich der Grund, dass der Code weiter und weiter ausgeführt wird. Sie verfügen über das Steuerelement im Code –

1

Sie könnten versuchen, Hide() anstelle von Close() zu verwenden.

Setzen Sie dieses in den Konstruktor des Dialogfensters (dies ist ein WPF Beispiel)

public Window() 
{ 
    this.Closing += Window_Closing; 
} 

Und dann brechen Sie den schließen Ereignis und verstecken das Fenster statt wie diese

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    e.Cancel = true; 
    this.Hide(); 
} 

Nach dass Sie in der Lage sein sollten, ein geschlossenes Fenster wieder zu öffnen, weil es nicht entsorgt, sondern versteckt ist. Problem hierbei ist, dass Sie den Inhalt des Fensters vor dem erneuten Öffnen manuell löschen müssen, da es sonst den Inhalt der letzten Verwendung enthält.