Zoeken…


Invoering

In dit onderwerp wordt uitgelegd hoe de WinForms-engine werkt om formulieren weer te geven en hoe u hun levensduur bepaalt.

Toon een modeless of een modale vorm

Na het definiëren van de structuur van uw formulier met de WinForms-ontwerper kunt u uw formulieren in code op twee verschillende manieren weergeven.

  • Methode - Een vormloze vorm

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • Methode - Een modaal dialoogvenster

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

De twee methoden hebben een zeer belangrijk onderscheid. De eerste methode (de modelloze) toont uw formulier en keert vervolgens onmiddellijk terug zonder te wachten op het sluiten van het zojuist geopende formulier. Uw code gaat dus verder met alles wat volgt op de Show-oproep. De tweede methode (de modale) opent het formulier en blokkeert elke activiteit in de hele toepassing totdat u het formulier sluit via de knop Sluiten of met enkele knoppen die correct zijn geconfigureerd om het formulier te sluiten

Een modeless-formulier sluiten

Een modeless-formulier wordt (meestal) gebruikt wanneer u iets permanent naast het hoofdscherm van uw toepassing moet weergeven (denk aan een legende of een weergave van een stroom gegevens die asynchroon afkomstig is van een apparaat of een MDI Child-venster).
Maar een modelloze vorm vormt een unieke uitdaging wanneer u deze wilt sluiten. Hoe de instantie op te halen en de methode Sluiten in die instantie aan te roepen?

U kunt een globale variabele behouden die verwijst naar de instantie die u wilt sluiten.

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

Maar we kunnen er ook voor kiezen om de Application.OpenForms-collectie te gebruiken, waarin de formulierengine alle gemaakte en nog open formulierinstanties opslaat.

U kunt dat specifieke exemplaar uit deze verzameling ophalen en de methode Sluiten aanroepen

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

Een modale vorm sluiten

Wanneer een formulier wordt weergegeven met de methode ShowDialog , is het noodzakelijk om de DialogResult eigenschap van het formulier in te stellen op het formulier. Deze eigenschap kan worden ingesteld met behulp van het getal dat ook DialogResult wordt genoemd .

Om een formulier te sluiten, hoeft u alleen maar de DialogResult eigenschap van het formulier in te DialogResult (op elke waarde door DialogResult.None ) in een gebeurtenishandler. Wanneer uw code de gebeurtenishandler verlaat, verbergt de WinForm-engine het formulier en blijft de code die volgt op de eerste methode-aanroep van ShowDialog .

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

De oproepcode kan de retourwaarde van ShowDialog vastleggen om te bepalen op welke knop de gebruiker in het formulier heeft geklikt. Als getoond door middel ShowDialog() , de vorm niet automatisch verwijderd (aangezien het eenvoudig is verborgen en niet gesloten), dus is het belangrijk om een gebruik using blok te zorgen voor de vorm is aangebracht.

Hieronder ziet u een voorbeeld van het controleren van het resultaat van het gebruik van de ingebouwde OpenFileDialog , het controleren van het resultaat en het openen van een eigenschap in het dialoogvenster voordat u het weggooit.

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

U kunt ook de eigenschap DialogResult op een knop instellen. Als u op die knop klikt, wordt de eigenschap DialogResult op het formulier ingesteld op de waarde die aan de knop is gekoppeld. Hiermee kunt u het formulier sluiten zonder een gebeurtenishandler toe te voegen om DialogResult in de code in te stellen.

Als u bijvoorbeeld een knop OK aan uw formulier toevoegt en de eigenschap ervan DialogResult.OK op DialogResult.OK wordt het formulier automatisch gesloten wanneer u op die knop drukt en ontvangt de DialogResult.OK een DialogResult.OK in ruil voor de methode-aanroep ShowDialog() .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow