winforms
Visar ett formulär
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()
.