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 :

dispose et destructeur


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut dispose et destructeur
    Bonjour,

    J'ai créé un usercontrol.
    Dans un formulaire, j'ajoute de 0 à n instances de ce contrôle à un ScrollableControl.

    Quand je veux vider le scrollablecontrol, je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (RemarksContainer.Controls.Count > 0)
        RemarksContainer.Controls[0].Dispose();
    Dans le code de mon usercontrol, j'ai écris un destructeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ~ucRemark()
    {
        MessageBox.Show("Hello");
    }
    Je ne passe jamais dans ce code. C'est normal ça ?



    Papy !

  2. #2
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Je ne sais pas si c'est ce que tu veux mais tu peux faire pareil au code generé par Vs


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Je suis d'accord pour ce code. Donc tu peux le garder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (RemarksContainer.Controls.Count > 0)
        RemarksContainer.Controls[0].Dispose();

    Le code çi-dessous est correct mais il y a plus interressant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ~ucRemark()
    {
        MessageBox.Show("Hello");
    }

    Pour que ton message s'affiche à chaque fois que tu "décharges" un contrôle du contrôle container il faut suivre la procédure suivante :
    1. Ton container a forcement un événement nommé ControlRemoved
    2. Tu te souscris à cet événement qui se déclenchera à chaque qu'un contrôle appartenant au container est enlevé.
    3. L'instruction qui doit affciher le message hello doit donc se trouver dans le corps de ton événement ControlRemoved du container RemarksContainer.


    En résumé ajoute le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void RemarksContainer_ControlRemoved(object sender, ControlEventArgs e)
            {
                MessageBox.Show("Hello");
            }
    Ben ça marche chez moi. Si c'est pas ce que tu veux alors il va falloir que tu sois un peu plus clair sur ce que tu veux

  4. #4
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Merci, ça colle très bien pour mon problème , comme la surcharge du dispose.

    Question subsidiaire quand même : Pourquoi mon destructeur ~ n'est jamais appelé quand je fais un dispose ? Peut-être qu'il faut appeler le GC pour forcer ça ?

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    car un dispose bien ecrit (selon le pattern consacré) supprime l'appel au finalizer pour eviter la survie des objets. Tout ce qui herite de pres ou de loin des classes standards du framework suit le meme principe.

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Cette suppression d'appel est marqué par l'appel de la méthode statique GC.SupressFinalize à titre indicatif .

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/06/2010, 16h57
  2. destructeur et vector
    Par diefo dans le forum SL & STL
    Réponses: 14
    Dernier message: 02/03/2005, 12h15
  3. [Outils][BootStrapper] Où peut-on disposer des sources ?
    Par Didier69 dans le forum Contribuez
    Réponses: 3
    Dernier message: 28/09/2004, 15h32
  4. [.NET] Pourquoi redéfinir la méthode dispose() d'une forme?
    Par Polyptyx dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/09/2004, 12h10
  5. [RaveReport] Comment disposer des DataBand cote à cote ?
    Par stepschn dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/06/2004, 09h45

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