IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

fermeture de form avec validation


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut fermeture de form avec validation
    bonjour a tous, voila j'ai un form mdi parent, un menu avec 2 boutons (pour faire court, en fait y en a plus) et je voudrais que si j'ouvre un form mdi enfant A ou B alors qu'il y en a deja un d'ouvert, une boite de dialogue s'affiche pour choisir si oui ou non je veux fermer le form mdi enfant 1(deja ouvert) pour passer au mdi enfant 2 ou bien de rester sur le form 1 ...

    je sais pas si c'est clair, mais pour abreger ma prof d'info m'a donné un code qui compte le nombre de form ouvert et qui ferme le form en trop, c'est a dire que le form principal reste, le form 1 se ferme et le form 2 prend la place du form 1 ...

    je vous met le code ici au cas où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    private void fermerOption()
            {
                C = new CancelEventArgs();
                if (Application.OpenForms.Count > 1)
                {
                    // propriétés pour la messagebox-----------------------------------
                    string message = "La fenetre va se fermer, continuer ?";
                    string caption = "Fermeture auto  ";
                    MessageBoxButtons buttons = MessageBoxButtons.YesNo;
                    DialogResult result;
                    //-----------------------------------------------------------------
     
                    // Affiche la messagebox-------------------------------------------
     
                    result = MessageBox.Show(this, message, caption, buttons,
                             MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                    //-----------------------------------------------------------------
     
                    if (result == DialogResult.Yes)
                    {
                        Application.OpenForms[1].Close(); // fermeture du formulaire deja affiché et ouverture du formulaire selectionné
                    }
                    else
                    {
                        C.Cancel = true; // a modifier car ne marche pas
                    }
                }
            }
    attention je pécise que ce code a été modifié par moi et qu'il reste a modifier ...

    le code original de ma prof est celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void fermerOption()
            {
     
                while (Application.OpenForms.Count > 1)
                Application.OpenForms[1].Close();
            }
    merci d'avance pour votre aide et a bientot

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Salut,

    Plusieurs choses me chiffonnent dans ton histoire...
    - l'intérêt des forms MDI est justement d'en avoir plusieurs (Multiple Document Interface), donc c'est un peu bizarre d'interdire d'en avoir plusieurs... mais bon, admettons que ce soit juste dans un but pédagogique
    - Plutôt que Application.OpenForms (qui contient toutes les fenêtres ouvertes, MDI ou non, y compris la fenêtre principale), il vaut mieux utiliser this.MdiChildren, qui ne contient que les forms MDI.
    - Ca ne sert à rien de créer un CancelEventArgs et de mettre Cancel à true, puisque ce CancelEventArgs n'est pas traité par la suite... Un CancelEventArgs n'est utile que dans le code d'un évènement

    En fait, pour ne pas fermer la form, il suffit de ne rien faire... donc tu peux supprimer le bloc "else". Par contre, je ne comprends pas trop quand tu dit que ça ne marche pas... ce que tu fais dans le "else" est exactement équivalent à ne rien faire.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut
    d'abord merci pour ta reponse, ensuite pour commencer, ce que je veux interdire c'est qu'il y ait des doublons de form et/ou 2 form differents a la fois ce qui dans mon cas ne m'est pas utile ...

    pour ta modif avec le this.mdichildren, j'ai essayé mais j'arrive pas a avoir le .Close() pour fermer

    et pour terminer, quand je clique sur non dans le messageboxbutton, soit ca me repete le messagebox idefiniement (quand je laisse la boucle en while), soit ca me garde la fenetre deja affichée derriere et ca me rajoute la nouvelle fenetre par dessus (quand je remplace le while par un if)

    donc voila je sais pas quoi faire , si quelqu'un peut m'aider c'est cool merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    pour ta modif avec le this.mdichildren, j'ai essayé mais j'arrive pas a avoir le .Close() pour fermer
    Comment ça tu n'y arrives pas ? c'est exactement la même chose (sauf que l'index est 0 et non 1, puisque la form principale n'est pas dans MdiChildren).
    quand je clique sur non dans le messageboxbutton, soit ca me repete le messagebox idefiniement (quand je laisse la boucle en while)
    Normal... si tu cliques sur non, ça ferme pas la fenêtre, donc this.MdiChildren.Count ne diminue pas, donc la boucle continue (la condition reste vraie). A la place du while, il vaut mieux faire un foreach :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach(Form f in this.MdiChildren)
    {
        ...
        if (result == DialogResult.Yes)
                    {
                        f.Close(); // fermeture du formulaire deja affiché et ouverture du formulaire selectionné
                    }
     
    }
    soit ca me garde la fenetre deja affichée derriere et ca me rajoute la nouvelle fenetre par dessus (quand je remplace le while par un if)
    Ben si tu cliques sur non c'est que tu ne veux pas la fermer... mais dans ce cas il ne faut pas afficher la nouvelle form mdi (enfin ça dépend de ce que tu veux exactement...)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2008
    Messages : 31
    Par défaut
    désolé mais ca fait la meme la chose sauf que ca le fait dès que j'ouvre un form (quand y a aucun form ouvert et que j'en ouvre un ben ca me met le messagebox et quand je met non quand y a deja un form ben ca fait comme avant, celle de derriere reste et la nouvelle s'affiche quand meme)

    Ben si tu cliques sur non c'est que tu ne veux pas la fermer... mais dans ce cas il ne faut pas afficher la nouvelle form mdi (enfin ça dépend de ce que tu veux exactement...)
    ce que je veux c'est juste annuler ou arreter la boucle pour ne pas afficher de nouvelle fenetre par dessus la premiere, et quand tu dis de ne pas afficher de nouvelle fenetre ben c'est ca mais je sais pas comment empecher l'ouverture en fait

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Oulà, je sais pas ce que tu as fait mais à mon avis la logique de ton code est complètement bancale...

    je sais pas comment empecher l'ouverture en fait
    Ben la form elle s'ouvre pas toute seule comme par magie... tu dois avoir un bout de code quelque part qui ouvre cette form. Il suffit de ne pas l'appeler si l'utilisateur a cliqué sur non. Je suppose que la méthode fermerOption est appelée à partir du code qui ouvre la nouvelle form ? Dans ce cas il faut que ce code connaisse le résultat de la MessageBox. Pour ça, je te suggère de modifier fermerOption pour qu'elle renvoie un bool (vrai ou faux), de cette manière le code qui appelle fermerOption saura si l'utilisateur a cliqué sur oui ou non et pourra décider d'afficher ou non la nouvelle form.

Discussions similaires

  1. Fermeture d'une Form avec la croix
    Par arbtec dans le forum C#
    Réponses: 2
    Dernier message: 14/10/2008, 09h25
  2. Synchroniser la fermeture d'un form avec la fin d'un thread
    Par Jitou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/02/2008, 00h46
  3. Réponses: 2
    Dernier message: 01/10/2007, 10h27
  4. fermeture d' une forme avec AnimateWindow
    Par nopnop dans le forum Delphi
    Réponses: 6
    Dernier message: 05/06/2006, 11h32
  5. [VB.net][VS2005] Validation d'une form avec errorProvider
    Par WriteLN dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/05/2006, 13h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo