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 :

[Form.Close] System Stack Overflow Exception


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Points : 141
    Points
    141
    Par défaut [Form.Close] System Stack Overflow Exception
    Bonjour,

    A priori, quand on clique sur la croix d'une Form, par défaut elle est Hide(), moi j'aimerai la fermer complétement et libérer les ressources au moment on l'on clique sur la croix.

    J'essaie avec la méthode Close() mais j'ai un problème, qui est d'ailleur indiqué dans MSDN... on conseille d'utiliser Idle que je ne connais pas et que je ne vois pas non plus.

    Ma Form est enfant d'un MDI, mon problème étant que quand je la ferme, puis je l'ouvre une autre fois, tous les contrôles type ComboBox se remplissent en double, puis en triple si je recommence et ainsi de suite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            private void MaForm_FormClosing(object sender, FormClosingEventArgs e)
            {
    this.close()
            }
                //Une exception non gérée du type 'System.StackOverflowException' s'est produite dans System.Windows.Forms.dll
    Avec this.Dispose() j'ai le même problème... comment faire pour régler une bonne fois mon problème ?

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Quand tu appelles close ça n'appelle pas l'évènement Closing aussi ?
    L'overflow pourrait venir de là.

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Skyrunner Voir le message
    Quand tu appelles close ça n'appelle pas l'évènement Closing aussi ?
    L'overflow pourrait venir de là.
    Exactement.

    Sinon pour faire ce que tu veux il vaudrait peut être mieux revoir la méthode que tu utilise pour afficher ta fenêtre et utiliser quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    using(BoiteDeDialog dlg = new BoiteDeDialog())
    {
      dlg.ShowDialog();
    }
    Avec une telle construction, Dispose est automatiquement appellé sur ta fenêtre à sa fermeture et je pense que tu ne sera pas trop perdant en la recréant à la prochaine ouverture requise ... ( la prochaine fois que tu veux l'afficher quoi ... )

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Points : 141
    Points
    141
    Par défaut
    Un formulaire qui n'est pas de niveau supérieur ne peut pas être affiché sous la forme d'une boîte de dialogue modale. Supprimez le formulaire des parents avant d'appeler showDialog.

    La Form qui ouvre est elle-même contenu dans un parent MDI, d'où le problème. Je ne peux pas ouvrir ma fenêtre en mode modale.

    Ce que je veux, c'est que ma fenêtre n'ajoute pas des données en plus des anciennes mais seulement les nouvelles. (la 1ère fois un ComboBox comporte 3 élément, ensuite 6, puis 9, etc...)

  5. #5
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Ticoche Voir le message
    Un formulaire qui n'est pas de niveau supérieur ne peut pas être affiché sous la forme d'une boîte de dialogue modale. Supprimez le formulaire des parents avant d'appeler showDialog.
    Je me demande si c'était du français

    Citation Envoyé par Ticoche Voir le message
    Ce que je veux, c'est que ma fenêtre n'ajoute pas des données en plus des anciennes mais seulement les nouvelles. (la 1ère fois un ComboBox comporte 3 élément, ensuite 6, puis 9, etc...)
    Dans ce cas il faut que tu crées une fonction de "netoyage" qui remet les ComboBox à 0, d'ailleurs, tout simplement avant de remplir les données tu fait par exemple TonComboBox.Items.Clear(); d'ailleurs, je doute que faire Dispose puisse résoudre ton problème car apparament tu utilises toujours la même instance de la form, mais si tu la dispose comment pourra tu après y accéder ?

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    359
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 359
    Points : 141
    Points
    141
    Par défaut
    Citation Envoyé par smyley Voir le message
    Je me demande si c'était du français


    Dans ce cas il faut que tu crées une fonction de "netoyage" qui remet les ComboBox à 0, d'ailleurs, tout simplement avant de remplir les données tu fait par exemple TonComboBox.Items.Clear(); d'ailleurs, je doute que faire Dispose puisse résoudre ton problème car apparament tu utilises toujours la même instance de la form, mais si tu la dispose comment pourra tu après y accéder ?

    Quand je disais un ComboBox, c'était pour simplifier, en fait toute mes listes étaient rempli plusieurs fois (y compris les ComboBox des DataGridView).
    J'ai fais un Clear() sur une liste pour testé... et aucun changement => Très interressante comme remarque je me suis dit que le problème était ailleur, et en effet... toute mes listes sont alimenté par un DataSet qui n'était pas vidé...

    Maintenant je vide mon DataSet quand je ferme la fenetre (pour l'instant, après il faudrait quand même mettre les mise à jour en base avant de le vider) et mon problème est résolu.

    Merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par Ticoche Voir le message
    Ce que je veux, c'est que ma fenêtre n'ajoute pas des données en plus des anciennes mais seulement les nouvelles. (la 1ère fois un ComboBox comporte 3 élément, ensuite 6, puis 9, etc...)
    Salut,

    comment sont ajouté les elements dans ta Form ? Essaie de les ajouter sur l'event Shown, comme ca ils ne seront ajouté qu'une seule fois.

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

Discussions similaires

  1. exception: Stack overflow
    Par ame_12 dans le forum C++
    Réponses: 6
    Dernier message: 01/09/2013, 18h43
  2. Exception de première chance : stack overflow
    Par Far_Away dans le forum C++
    Réponses: 9
    Dernier message: 02/02/2011, 20h22
  3. pourquoi ai-je une exception stack overflow ?
    Par AsmCode dans le forum VB.NET
    Réponses: 1
    Dernier message: 20/06/2010, 12h44
  4. exception stack overflow
    Par farid0031 dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/05/2009, 00h46
  5. Stack overflow
    Par portu dans le forum Langage
    Réponses: 3
    Dernier message: 26/11/2003, 15h16

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