Sök…


Introduktion

Detta ämne förklarar hur WinForms-motorn fungerar för att visa former och hur du styr deras livstid.

Visa en modell eller en modal form

När du har definierat strukturen på din form med WinForms-designer kan du visa dina formulär i kod med två olika metoder.

  • Metod - En modlös form

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • Metod - En modal dialog

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

De två metoderna har en mycket viktig åtskillnad. Den första metoden (modellinnehavet) visar ditt formulär och återgår sedan omedelbart utan att vänta på att det just öppnade formuläret har avslutats. Så din kod fortsätter med det som följer Show-samtalet. Den andra metoden istället (den modala) öppnar formuläret och blockerar alla aktiviteter i hela applikationen tills du stänger formuläret via stängningsknappen eller med några knappar som är korrekt konfigurerade för att stänga formuläret

Stänga en modellinnehåll

En modellformulär används (vanligtvis) när du behöver visa något permanent längs applikationsens huvudskärm (tänk på en legend eller en vy på en ström av data som kommer asynkront från en enhet eller ett MDI Child Window).
Men en modellinnehåll utgör en unik utmaning när du vill stänga den. Hur hämtar jag instansen och anropar stängmetoden i det fallet?

Du kan behålla en global variabel som refererar till instansen du vill stänga.

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

Men vi kan också välja att använda Application.OpenForms-kollektionen där formulärmotorn lagrar alla forminstanser som skapats och fortfarande är öppna.

Du kan hämta den speciella instansen från denna samling och ringa metoden Stäng

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

Stänger en modal form

När ett formulär visas med ShowDialog metoden är det nödvändigt att ställa in formulärets DialogResult egenskap så att den ligger nära formen. Den här egenskapen kan ställas in med enum som även kallas DialogResult .

För att stänga ett formulär behöver du bara ställa in formulärets DialogResult egenskap (till valfritt värde av DialogResult.None ) i någon händelsehanterare. När din kod kommer från händelseshanteraren kommer WinForm-motorn att dölja formuläret och koden som följer det första ShowDialog metoden fortsätter körningen.

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

Ringkoden kan fånga returvärdet från ShowDialog för att bestämma vilken knapp användaren klickade på i formuläret. När det visas med ShowDialog() bortskaffas inte formuläret automatiskt (eftersom det helt enkelt doldes och inte stängdes), så det är viktigt att använda ett using att säkerställa att formuläret kastas.

Nedan är ett exempel på att kontrollera resultatet av att använda den inbyggda OpenFileDialog , kontrollera resultatet och komma åt en egenskap från dialogrutan innan du kasserar den.

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

Du kan också ställa in DialogResult egenskapen på en knapp. Om du klickar på den knappen ställs DialogResult egenskapen i formuläret till det värde som är associerat med knappen. Detta låter dig stänga formuläret utan att lägga till en händelsehanterare för att ställa in DialogResult i koden.

Om du till exempel lägger till en OK-knapp i formuläret och ställer in dess egendom till DialogResult.OK stängs formuläret automatiskt när du trycker på den knappen och DialogResult.OK får ett DialogResult.OK i retur från ShowDialog() .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow