Mdi : exemple de gestion de la fermeture suivant qu'elle est demandée sur l'enfant ou le conteneur

Description

(Suite à question sur le forum : http://www.csharpfr.com/forum.v2.aspx?ID=612923)

En MDI, si vous demandez la fermeture de l'application, l'évènement Closing des formulaires enfants est levé avant celui de la fenêtre conteneur (MDIParent).
Si vous affichez des demandes de confirmation de fermeture sur les enfants, celà peut s'avèrer génant.
Une astuce pour palier à ce "problème" est de surcharger la méthode WndProc du formulaire conteneur et de filtrer le message WM_CLOSE afin d'être avertis en premier de la notification de fermeture.
Le code fournis donne un exemple d'utilisation.

Source / Exemple :


// VOIR LE ZIP POUR LE RESTE...
protected override void WndProc(ref Message m)
{
    // si le message est une demande de fermeture.
    if ( m.Msg == WM_CLOSE)
    {
        // demande de confirmation
        DialogResult ret = MessageBox.Show(this, "Etes-vous sûr de vouloir fermer cette appli ?", "MDIClosingSample", MessageBoxButtons.YesNo);
        if ( ret == DialogResult.Yes )
        {
            // MAJ de la valeur indiquant que le formulaire conteneur est en cours de fermeture.
            this._isClosing = true;
            base.WndProc (ref m);
        }
    }
    else
    {
        base.WndProc (ref m);
    }
}

Conclusion :


WM_CLOSE : http://msdn.microsoft.com/en-us/library/ms632617.aspx

WndProc : http://msdn.microsoft.com/fr-fr/library/system.windows.forms.form.wndproc.aspx

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.