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 :

[C#] Comment garder des éléments en mémoire lors du Dispose() d'une Form.


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut [C#] Comment garder des éléments en mémoire lors du Dispose() d'une Form.
    Bonjour.

    Dans un programme sur lequel je travaille, je fait appel à une fenêtre avec des éléments de celle-ci partagés entre plusieurs fenêtres. J'aimerai donc que lorsque j'appelle la méthode Dispose() de celle-ci, ces éléments ne soient pas supprimés. Voici le code de l'appel à la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void FenêtreDesErreurs(object sender, EventArgs e)
            {
                    (new Erreurs(erronés, nonSupprimés)).ShowDialog();
            }
    Dans lequel erronés et nonSupprimés sont des ListBox.

    Et celui de la fenêtre elle même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public partial class Erreurs : Form
        {
            public Erreurs(ListBox erronés, ListBox nonSupprimés)
            {
                InitializeComponent();
                Controls.Add(erronés);
                Controls.Add(nonSupprimés);
            }
     
            private void fermer_Click(object sender, EventArgs e)
            {
                Dispose();
            }
        }
    J'ai tenté d'appeller Dispose(false), mais alors la fenêtre principale reste bloquée, car la fenêtre était modale.

    Une autre possibilité serait de passer en paramètre non pas le composant ListBox, mais uiquement la liste contenue dans celui-ci, mais je n'ai pas trouvé comment, ni même si c'est faisable. (Je fonctionnait comme celà en Java, mais je ne sais pas si il y à un équivalent en C#)

    Any idea?

    Merci d'avance.
    Images attachées Images attachées  

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 122
    Points : 124
    Points
    124
    Par défaut
    Salut,

    tu peux essayer de faire un .Clone() de tes ListBox en vérifiant que les données sont bien recopiées.

    ++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    C'est une excellente idée, mais après vérification, le composant ListBox ne dispose pas d'une méthode .Clone().

    Existe t'il une classe système disposant d'une méthode statique pouvant cloner un objet ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 122
    Points : 124
    Points
    124
    Par défaut
    Tu peux utiliser la méthode CopyTo des Items de ta listbox

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Ok, ca marche !

    Merci beaucoup.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Novembre 2002
    Messages : 89
    Points : 108
    Points
    108
    Par défaut
    Je ne suis pas sur que ca soit la façon la plus élégante. En effet Dispose doit être appelé lorsque l'on est sur que l'on ne va pas réutiliser un objet. Là apparemment, la fenetre doit juste etre fermée mais les valeurs de l'objet doivent être conservées. Donc l'objet ne doit pas disparaitre de la mémoire mais ne plus être "actif". C'est ce qu'est censé faire la méthode close()
    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
     
    public partial class Erreurs : Form
        {
            public Erreurs(ListBox erronés, ListBox nonSupprimés)
            {
                InitializeComponent();
                Controls.Add(erronés);
                Controls.Add(nonSupprimés);
            }
     
            private void fermer_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
    Qu'en pensez vous?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Points : 32
    Points
    32
    Par défaut
    Non, je n'ai que rarement besoin d'afficher cette fenêtre, c'est pourquoi je ne désire pas la garder en mémoire alors qu'elle ne reservira peut-être plus. C'est pouquoi j'ai préféré Dispose() à Close().

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/05/2006, 15h40
  2. Réponses: 2
    Dernier message: 16/05/2006, 11h53
  3. Comment afficher des éléments de même nom en 1 seule fois
    Par magic8392 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 27/09/2005, 11h24
  4. Comment aligner des éléments d'un TEdit à droite ?
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 18
    Dernier message: 15/06/2005, 17h46
  5. Réponses: 3
    Dernier message: 26/01/2005, 15h21

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