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 :

Supprimer les controles d'un Panel


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Par défaut Supprimer les controles d'un Panel
    Bonjour.
    Dans une application j'ai une méthode qui dessine, à partir d'un schéma de données, une représentation graphique.

    Celle ci est simplement effectuée via l'ajout de bouton à un panel.

    Dans le début de cette méthode AfficherRepresentationGraphique() qui est appellée très souvent (car mon schéma de donnéeschange souvent) par mon application je fait un :
    this.panel_Fond.Controls.Clear();

    pour effacer tous les controles de mon panel avant de le reconstruire.

    Ma question est la suivante :
    Ne serait-il pas plus sage de faire un dispose() de tous les controles de mon panel plutôt que ce simple clear ?

    Pour faire ce dispose() doit-je absolument faire une boucle de suppression de tous les objets Control de la collection this.panel_Fond.Controls ?

    Si je fait un this.panel_Fond.Dispose() cela m'évite de faire une boucle mais cela supprime également mon panel ...

    Que feriez-vous ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    bonjour

    Je ne pense pas qu'un dispose soit plus sage...

    Mais je pense qu'il n'est pas non plus "sage" de faire un dessin qui te détruit
    tous les controles (en faisant clear) car je suppose qu'apres, tu dois faire des controls.Add(xxx);

    et personnellement, en terme de performance, cela est assez "catastrophique"...

    En regle general, l'ajout de composant dynamique dans un control ou un panel en particulier n'est pas adapté à un usage "intensif".. j'entends par la que cette possibilité d'ajouter des controls à un élément est plus là pour etre fait 1 fois (en fonction de ta configuration logiciel, des besoins etc...) mais pas pour gérer dynamiquement et de façon très fréquente ce genre d'ajout.

    Si les elements de ton panel correspondent à une représentation "graphique",il est peut-etre plus "sage" d'avoir ou de créer un composant graphique qui saura effectuer le rendu...

    Enfin, si tu en dis plus sur la nature et la quantité de controle que tu ajoutes et enleves à ton panel, je pourrais peut-etre te donner plus d'informations ? ainsi que la frequence du clear du panel ?

    The Monz, Toulouse

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    bonjour

    Je ne pense pas qu'un dispose soit plus sage...

    Mais je pense qu'il n'est pas non plus "sage" de faire un dessin qui te détruit
    tous les controles (en faisant clear) car je suppose qu'apres, tu dois faire des controls.Add(xxx);

    et personnellement, en terme de performance, cela est assez "catastrophique"...

    En regle general, l'ajout de composant dynamique dans un control ou un panel en particulier n'est pas adapté à un usage "intensif".. j'entends par la que cette possibilité d'ajouter des controls à un élément est plus là pour etre fait 1 fois (en fonction de ta configuration logiciel, des besoins etc...) mais pas pour gérer dynamiquement et de façon très fréquente ce genre d'ajout.

    Si les elements de ton panel correspondent à une représentation "graphique",il est peut-etre plus "sage" d'avoir ou de créer un composant graphique qui saura effectuer le rendu...

    Enfin, si tu en dis plus sur la nature et la quantité de controle que tu ajoutes et enleves à ton panel, je pourrais peut-etre te donner plus d'informations ? ainsi que la frequence du clear du panel ?

    The Monz, Toulouse
    Merci pour la réponse.

    Je n'ai qu'une dizaine de controles (que j'ajoute effectivement via des Add()).
    Ma fréquence est un raffraichissement à peu près toutes les 5 minutes.
    Ce n'est pas donc une appli temps réel critique ...

    Ma question en fait était surtout sur la gestion mémoire set la nécessité de faire des dispose.

    Je pense qu'il ne faut pas que je fasse un dispose du panel sinon cela m'oblige à le recréer.

    A mon avis le clear() que je fait actuellement suffit mais j'hésite à faire des dispose.

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    à priori, quand tu vas faire un clear de ton panel, tous les controles qu'il contient vont etre eligibles par le Garbage collector (GC) pour etre nettoyer de la mémoire (sauf si bien sur, ils sont reférencés par ailleurs).. si ils ne le sont pas en dehors du panel, le fait d'appeler un clear va simplement les mettre à "disposition" du GC et donc, la mémoire sera rendu proprement (à condition que les controles utilisés ne soient pas des controles spécifiques à toi qui contiennent de l'interop... si il s'agit de controle de base (button, textbox, etc...) en théorie, le GC fera son boulot et donc , tu n'auras pas à te soucier plus que cela de leur nettoyage par le GC

    Enfin, je me trompe peut-etre mais je pense etre dans le bon chemin

    The Monz, Toulouse

  5. #5
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Ok avec theMonz31

    Mais autant verifier avec le CLR Profiler

    Profile ton appli pendant 5 min en effacant ton panel, tu verra de visu si la memoire se libere ou pas apres les collections

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 92
    Par défaut
    Ok, merci beaucoup pour vos réponses.

    Un truc étonnant que j'ai vu dans ce style :

    Quand on créée une collection d'objets (qui contient par exemple 4 objets) et qu'ensuite on fait un dispose sur l'un des objets si on interroge la propriété count de la collection on obtient la valeur 3.

    C'est à dire que .net a automatiquement supprimé de la collection la référence associée. C'est chouette comme automatisme. C'est quelque chose qui est propre aux collections ou d'autres objets fonctionnent comme cela ? (array, ...)

Discussions similaires

  1. [XL-2010] Supprimer les controles de formulaires
    Par grisan29 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/05/2013, 19h39
  2. [XL-2003] Supprimer tous les controls d'une userforms
    Par redstoff dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/09/2011, 15h23
  3. [C#]Redéfinir la zone contenant les controles d'un Panel
    Par FraktaL dans le forum Développement Windows
    Réponses: 0
    Dernier message: 28/02/2011, 16h35
  4. [C#] Peupler une listBox avec les controls d'un panel ?
    Par clinic dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/07/2007, 20h41
  5. Supprimer Tous les controles d'un état
    Par Dafbau dans le forum IHM
    Réponses: 10
    Dernier message: 18/12/2006, 16h38

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