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

C# Discussion :

WinForm qui ne veut pas se fermer [Débutant]


Sujet :

C#

  1. #1
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut WinForm qui ne veut pas se fermer
    Bonjour,

    J'ai un problème que je n'arrive pas à résoudre pour l'instant, je fais un petit programme en WinForm assez basique avec VS2015 Community, quand je le lance (avec F5) il fonctionne correctement sauf que si je clique sur la croix, ou que j'utilise 'alt+F4', rien ne se passe!
    Il refuse de se fermer!

    Pourtant j'ai regardé dans la FAQ et mon 'program.cs' est ainsi:
    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
    29
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
     
    namespace MEF_PSA
    {
        static class Program
        {
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.ApplicationExit += new EventHandler(Application_Exit);
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MEF_PSA());
            }
     
            private static void Application_Exit(object sender,System.EventArgs e)
            {
                MessageBox.Show("Fin du programme...");
            }
        }
    }
    Je me rappelle avoir eu le problème en vb.net et j'avais résolu ça en enlevant tous les contrôles système et en mettant mon propre bouton "quitter". Mais là j'aimerais bien faire ça propre!!

    Je suis ouvert à toute suggestion...
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    De quel type de base est le MEF_PSA de Il doit être du type de base Form, et normalement pas de soucis ...

    D'ailleurs j'aurais géré l'event FormClosing de la Form MEF_PSA pour afficher un message à l'utilisateur plutôt que le Application.ApplicationExit...

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  3. #3
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Oui "MEF_PSA" est bien du type Form voici sa déclaration (auto-générée):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public partial class MEF_PSA : Form
    et j'ai aussi un FormClosing:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void MEF_PSA_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (accesBDD.maConnection.State==ConnectionState.Open)
                {
                    accesBDD.maConnection.Close();
                }
     
                //e.Cancel = false;
                //this.Close();
     
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
    les parties en commentaires ont été essayées et ne marchent pas...

    l'utilisation du Application.Exit vient de ce que j'ai lu dans la FAQ
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  4. #4
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    J'ai fais quelques tests supplémentaires, je reviens pour préciser un peu plus...

    Voici mon (magnifique ) Form:
    Nom : Capture.JPG
Affichages : 189
Taille : 39,8 Ko

    En fait, tant que je n'ai pas sélectionné les fichiers ET que je n'ai pas cliqué sur "Extraction", rien ne se passe, mais une fois que j'ai fais tout ça, si je clique sur la croix, il veut bien se fermer...

    Pourtant les boutons sous tous sur des évènements "click", je ne vois pas en quoi ce serait bloquant??
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    oulla bizarre tout ça

    et si tu mets un point d'arret dans le formClosing et que tu clique sur la croix rouge de ta form ? Est ce que tu passe dans le formClosing et continue en mode pas à pas pour voir si les lignes concernant le garbage collector te rendent la main.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Citation Envoyé par J@ckHerror Voir le message
    oulla bizarre tout ça

    et si tu mets un point d'arret dans le formClosing et que tu clique sur la croix rouge de ta form ? Est ce que tu passe dans le formClosing et continue en mode pas à pas pour voir si les lignes concernant le garbage collector te rendent la main.

    J@ck.
    Bonne idée ça! Je viens de le faire, donc à chaque clic sur la croix, je tombe bien dans l'évènement FormClosing, par contre c'est mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (accesBDD.maConnection.State==ConnectionState.Open)
    qui bloque!

    Tant que la BDD n'a pas été ouverte, il ne peut pas la fermer et me renvois dans le Form, mais c'est bizarre, vu mon test si elle n'est pas ouverte, il devrait continuer...
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Et donc c'est résolut ?

    Je capte pas pourquoi la ligne que tu donnes bloque ! D'ailleurs qu'entends tu par 'bloque' ? elle ne te rend pas la main ou si tu as une jolie exception ?

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  8. #8
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Citation Envoyé par J@ckHerror Voir le message
    Et donc c'est résolut ?

    Je capte pas pourquoi la ligne que tu donnes bloque ! D'ailleurs qu'entends tu par 'bloque' ? elle ne te rend pas la main ou si tu as une jolie exception ?

    J@ck.
    Si si, elle me rend la main, mais je retourne illico dans le Form quand je fais F10 (ou F11) pour continuer en pas à pas, le point d'arrêt est sur cette ligne de test.
    Je n'ai pas d'exception, ou alors il ne me l'indique pas...

    Et tant que la BDD n'a pas été ouverte, l'évènement FormClosing ne va pas au bout, si je vire ce test le programme s'arrête correctement! Mais du coup, je ne suis pas sûr que ma BDD est bien fermée...
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Ok donc une solution version rustine serait de suivre si ta connexion est ouvert ou pas par un booléen par exemple.

    Une version plus propre serait d'ouvrir ta connexion uniquement quand tu en as besoin et de la fermer immédiatement après, et en utilisant un using par exemple.

    Jack.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Il doit y avoir une exception lors du test de la connection dans le FormClosing.
    Essaye de mettre un try catch et d'afficher dans le catch l'éventuel message de l'exception.

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2010
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Août 2010
    Messages : 479
    Points : 762
    Points
    762
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Bonjour,

    Il doit y avoir une exception lors du test de la connection dans le FormClosing.
    Essaye de mettre un try catch et d'afficher dans le catch l'éventuel message de l'exception.
    un genre de "FirstChanceException" qui crashe pas ton code; il doit être visible dans la Console normalement...

  12. #12
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Citation Envoyé par ebastien Voir le message
    Bonjour,

    Il doit y avoir une exception lors du test de la connection dans le FormClosing.
    Essaye de mettre un try catch et d'afficher dans le catch l'éventuel message de l'exception.
    J'ai mis un try/catch et le message est le suivant: "La référence d'objet n'est pas définie à une instance d'un objet."

    @J@ckHerror:
    J'ai entendu parlé de using pour les BDD, mais je ne sais pas comment ça fonctionne...

    EDIT: donc plutôt que d'utiliser un try/catch pour ne pas tenir compte de l'exception, j'ai modifié mon accès à la BDD et j'utilise maintenant un Using! Et si j'ai bien tout suivi, avec ça ma BDD ne peut pas rester ouverte.

    Du coup, ça fonctionne!! Merci beaucoup à tous!
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Ok donc si tu as un nullReferenceException tu peux vérifier quel est l'objet à null lors du debug (avec un espion par exemple ou simplement en passant ta sourie sur les variables) mais fort à parier que accesBDD.maConnection vaut null.

    Pour te donner un bon exemple d'encapsulation de ta connexion dans un using il faudrait que tu nous donne la ligne de code où tu ouvre la connexion.

    Par exemple pour une connexion à un sql server =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using (SqlConnection con = new SqlConnection(ConnexionString))
    {
         con.Open();
         ..../* ici je requete le server */ 
         con.Close();
    }
    Le principe est que l'objet créé dans le using, ici 'con' sera disposé dès la sortie du bloc using, t'assurant que les ressources sont libérées.
    Les blocs peuvent d'ailleurs être imbriqué et chaque fois que tu utilise une ressource 'extérieure' (fichier, accès serveur ...) tu devrais te dire "il faut que je fasse ça dans un using " ..

    Bon code,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  14. #14
    Membre expérimenté Avatar de shkyo
    Homme Profil pro
    Développeur Robotique - Administrateur systèmes
    Inscrit en
    Juin 2003
    Messages
    841
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Robotique - Administrateur systèmes

    Informations forums :
    Inscription : Juin 2003
    Messages : 841
    Points : 1 474
    Points
    1 474
    Par défaut
    Oups! Tu as répondu avant mon Edit!

    Effectivement, j'ai fais comme ça pour mon accès BDD, mais je note quand même ton conseil pour les accès aux ressources extérieures avec Using! Merci!
    L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius -

    Ma (petite...) chaine Youtube : https://www.youtube.com/channel/UCy-...P2tH5UwOtLaYKw
    Si vous avez quelques minutes, passez donc voir mon site http://www.photospicsandco.fr/
    Envie de tee-shirts (et goodies!) originaux et sympa ? Visitez mon site... http://www.zazzle.com/shkyo30

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JScrollPane] qui ne veut pas se mettre en haut a gauche
    Par Cyber@l dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/11/2006, 10h41
  2. [VB.NET]un formulaire qui ne veut pas se fermer
    Par josyde2006 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/08/2006, 08h29
  3. JOptionPane qui ne veut pas se fermer!
    Par benthebest dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 29/12/2005, 22h05
  4. Un form ne veut pas se fermer
    Par Oluha dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2005, 11h16
  5. un fichier qui ne veut pas être supprimé!!!!
    Par en_stage dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 22/10/2005, 01h08

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