Recherche…


Introduction

Cette rubrique explique comment le moteur WinForms fonctionne pour afficher les formulaires et contrôler leur durée de vie.

Montrer une forme modale ou modale

Après avoir défini la structure de votre formulaire avec le concepteur WinForms, vous pouvez afficher vos formulaires en code avec deux méthodes différentes.

  • Method - Un formulaire sans modalité

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • Méthode - Un dialogue modal

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

Les deux méthodes ont une distinction très importante. La première méthode (la non modale) affiche votre formulaire et retourne immédiatement sans attendre la fermeture du formulaire ouvert. Donc, votre code continue avec ce qui suit l'appel Show. La deuxième méthode à la place (la modale) ouvre le formulaire et bloque toute activité sur l’ensemble de l’application jusqu’à ce que vous fermiez le formulaire via le bouton Fermer ou avec certains boutons correctement configurés pour fermer le formulaire.

Fermeture d'un formulaire modeless

Un formulaire non modal est utilisé (généralement) lorsque vous devez afficher quelque chose de permanent à côté de l'écran principal de votre application (pensez à une légende ou à une vue d'un flux de données provenant de manière asynchrone d'un périphérique ou d'une fenêtre enfant MDI).
Mais une forme sans modèle pose un défi unique lorsque vous voulez la fermer. Comment récupérer l'instance et appeler la méthode Close dans cette instance?

Vous pouvez conserver une variable globale faisant référence à l'instance que vous souhaitez fermer.

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

Mais nous pouvons également choisir d'utiliser la collection Application.OpenForms où le moteur de formulaire stocke toutes les instances de formulaire créées et toujours ouvertes.

Vous pouvez extraire cette instance particulière de cette collection et appeler la méthode Close

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

Fermer une fiche modale

Lorsqu'un formulaire est affiché à l'aide de la méthode ShowDialog , il est nécessaire de définir la propriété DialogResult du DialogResult pour fermer le formulaire. Cette propriété peut être définie à l'aide de l' énum appelé DialogResult .

Pour fermer un formulaire, il vous suffit de définir la propriété DialogResult du DialogResult (à une valeur quelconque par DialogResult.None ) dans un gestionnaire d'événement. Lorsque votre code quitte le gestionnaire d'événements, le moteur WinForm masque le formulaire et le code qui suit l'appel de la méthode ShowDialog initiale continue son exécution.

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

Le code appelant peut capturer la valeur de retour de ShowDialog pour déterminer quel bouton l'utilisateur a cliqué dans le formulaire. Lorsqu'il est affiché à l'aide de ShowDialog() , le formulaire n'est pas éliminé automatiquement (puisqu'il était simplement masqué et non fermé), il est donc important d'utiliser un bloc using pour s'assurer que le formulaire est supprimé.

Vous trouverez ci-dessous un exemple de vérification du résultat de l'utilisation d' OpenFileDialog , de la vérification du résultat et de l'accès à une propriété à partir de la boîte de dialogue avant sa suppression.

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

Vous pouvez également définir la propriété DialogResult sur un bouton. En cliquant sur ce bouton, la propriété DialogResult du formulaire sera définie sur la valeur associée au bouton. Cela vous permet de fermer le formulaire sans ajouter de gestionnaire d'événements pour définir le DialogResult dans le code.

Par exemple, si vous ajoutez un bouton OK à votre formulaire et définissez sa propriété sur DialogResult.OK le formulaire se ferme automatiquement lorsque vous appuyez sur ce bouton et le code appelant reçoit un DialogResult.OK en retour de l'appel de méthode ShowDialog() .



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow