Suche…


Einführung

In diesem Thema wird erläutert, wie die WinForms-Engine zum Anzeigen von Formularen funktioniert und wie Sie deren Lebensdauer steuern.

Zeigen Sie ein Modell oder ein modales Formular

Nachdem Sie die Struktur Ihres Formulars mit dem WinForms-Designer definiert haben, können Sie Ihre Formulare mit zwei verschiedenen Methoden im Code anzeigen.

  • Methode - Ein Modeless-Formular

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • Methode - Ein modaler Dialog

     Form2 aForm2Instance = new Form2(); 
     aForm2Instance.ShowDialog();
    

Die beiden Methoden unterscheiden sich sehr. Die erste Methode (die modelllose Methode) zeigt Ihr Formular und kehrt sofort zurück, ohne das Schließen des gerade geöffneten Formulars abzuwarten. Ihr Code fährt also mit dem fort, was auf den Show-Aufruf folgt. Die zweite Methode (die modale Methode) öffnet stattdessen das Formular und blockiert alle Aktivitäten in der gesamten Anwendung, bis Sie das Formular über die Schaltfläche "Schließen" oder mit den entsprechenden Schaltflächen zum Schließen des Formulars schließen

Schließen eines modelllosen Formulars

Ein modellloses Formular wird (in der Regel) verwendet, wenn Sie etwas permanent neben Ihrem Anwendungshauptbildschirm anzeigen müssen (denken Sie an eine Legende oder eine Ansicht in einem Datenstrom, der asynchron von einem Gerät oder einem MDI-Unterfenster kommt).
Eine modelllose Form stellt jedoch eine einzigartige Herausforderung dar, wenn Sie sie schließen möchten. Wie kann ich die Instanz abrufen und in dieser Instanz die Close-Methode aufrufen?

Sie können eine globale Variable beibehalten, die auf die Instanz verweist, die Sie schließen möchten.

theGlobalInstance.Close();
theGlobalInstance.Dispose();
theGlobalInstance = null;

Wir können jedoch auch die Application.OpenForms-Auflistung verwenden, in der die Formular-Engine alle erstellten und noch offenen Formularinstanzen speichert.

Sie können diese bestimmte Instanz aus dieser Auflistung abrufen und die Close-Methode aufrufen

Form2 toClose = Application.OpenForms.OfType<Form2>().FirstOrDefault();
if(toClose != null)
{
    toClose.Close();
    toClose.Dispose();
}

Ein modales Formular schließen

Wenn ein Formular mit der ShowDialog Methode ShowDialog wird, müssen Sie die DialogResult Eigenschaft des Formulars so DialogResult , dass es sich dem Formular DialogResult . Diese Eigenschaft kann mithilfe der Enumeration festgelegt werden, die auch als DialogResult bezeichnet wird .

Um ein Formular zu schließen, müssen Sie lediglich die DialogResult Eigenschaft des DialogResult (in einem beliebigen Wert von DialogResult.None ) in einem Ereignishandler DialogResult.None . Wenn Ihr Code den Ereignishandler verlässt, blendet das WinForm-Modul das Formular aus, und der Code, der auf den ersten Aufruf der ShowDialog Methode folgt, setzt die Ausführung fort.

private cmdClose_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
}

Der aufrufende Code kann den Rückgabewert von ShowDialog erfassen, um festzustellen, auf welche Schaltfläche der Benutzer in das Formular geklickt hat. Bei der Anzeige mit ShowDialog() wird das Formular nicht automatisch ShowDialog() da es einfach ausgeblendet und nicht geschlossen wurde). ShowDialog() ist es wichtig, einen using Block zu verwenden, um sicherzustellen, dass das Formular entsorgt wird.

Im Folgenden finden Sie ein Beispiel für die Überprüfung des Ergebnisses der Verwendung des integrierten OpenFileDialog , das Überprüfen des Ergebnisses und den Zugriff auf eine Eigenschaft über das Dialogfeld, bevor Sie es bereitstellen.

using (var form = new OpenFileDialog())
{
    DialogResult result = form.ShowDialog();
    if (result == DialogResult.OK)
    {
        MessageBox.Show("Selected file is: " + form.FileName);
    }
}

Sie können die DialogResult Eigenschaft auch für eine Schaltfläche DialogResult . Durch Klicken auf diese Schaltfläche wird die DialogResult Eigenschaft im Formular auf den mit der Schaltfläche verknüpften Wert festgelegt. Dadurch können Sie das Formular schließen, ohne einen Ereignishandler hinzuzufügen, um DialogResult im Code DialogResult .

Wenn Sie beispielsweise Ihrem Formular einen OK-Button hinzufügen und dessen Eigenschaft auf DialogResult.OK wird das Formular automatisch geschlossen, wenn Sie auf diese Schaltfläche DialogResult.OK , und der aufrufende Code erhält ein DialogResult.OK vom ShowDialog() .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow