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 :

[VB.NET 2005]Composants non 'resetés' après un close


Sujet :

Windows Forms

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut [VB.NET 2005]Composants non 'resetés' après un close
    Bonjour à tous,
    Je débutte avec le VB.NET donc il est fort possible que je n'utilise pas la bonne façon de faire et que mon problème provienne de là :
    Imaginons que j'ai créé une fenêtre en mode design qui porte le nom frmMaFenetre.
    Lorsque je veux afficher celle-ci, je ne fais aucun new, ni aucune instanciation, je fais simplement frmMaFenetre.Show() (ou ShowDialog() selon le cas).
    Je pense que sous VS2005 cette façon de faire est correcte.
    Mais voici mon problème, si la fenêtre est fermée (par l'utilisateur en cliquant sur la X ou avec un Close()) et ensuite réaffichée, mes contrôles ont conservé leur contenu d'avant la fermeture, ce qui est plutot embettant car dans la plupart des cas j'aimerai obtenir une fenêtre 'vierge' comme lors de son premier lancement.
    Pour l'instant je remets mes controles 'à 0' lors du Load() de ma fenêtre mais c'est plutot contraignant car je dois le faire à chaque nouveau controle ajouté (même si la collection Controls de ma fenêtre est plutot utile, ce n'est pas toujours possible à utiliser)
    Savez-vous comment je dois m'y prendre pour que ma fenêtre ait l'apparence que je lui avais donné en mode design à chaque lancement?

    Merci d'avance,
    Nicolas

  2. #2
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    je pense que c'est un Unload que tu dois ajouter lors de la fermeture de la 2ème fenêtre! sinon un NoThing mais c'est à toi de vérifier

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Je n'ai pas bien compris de quoi tu parlais, je n'ai aucune instanciation d'objet (enfin elle a été faite pour moi par le compilateur de VS2005 je suppose) donc la solution du Nothing me semble hors sujet.
    Pour l'autre solution, si elle est possible, je dois aussi prendre en compte que la fermeture de la fenêtre se produit aussi lorsque l'utilisateur clique sur la croix pour fermer la fenêtre, donc je ne sais pas très bien ce que tu veux dire par là.

    EDIT : je viens de faire des essais un peu plus complets.
    En fait, d'après mes tests, il n'y a que lorsque je fais un .ShowDialog que mes composants ne sont pas remis à 0 lors de la fermeture de la fenetre. En fait pour être plus précis (mais toujours d'après mes tests), je dirais que lorsqu'on ferme une fenetre après avoir fait un ShowDialog, celle-ci n'est pas fermée mais seulement cachée. Peut-être celà est-ce du au fait que l'on a besoin de connaître la valeur de retour d'une dialog et pas d'une fenêtre 'normale' et que donc, si l'on supprimait les ressources lors d'un close d'une dialog, nous n'aurions plus moyen de connaître sa valeur de retour.
    Mais ça ne règle pas mon problème pour autant.
    Tout au plus, puis-je reformuler ma question :

    Comment peut-on forcer une dialog à libérer ses ressources?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    En fait la réponse se trouve dans l'aide de VisualStudio :
    When a form is displayed as a modal dialog box, clicking the Close button (the button with an X at the upper-right corner of the form) causes the form to be hidden and the DialogResult property to be set to DialogResult.Cancel. Unlike modeless forms, the Close method is not called by the .NET Framework when the user clicks the close form button of a dialog box or sets the value of the DialogResult property. Instead the form is hidden and can be shown again without creating a new instance of the dialog box. Because a form displayed as a dialog box is not closed, you must call the Dispose method of the form when the form is no longer needed by your application.

    This version of the ShowDialog method does not specify a form or control as its owner. When this version is called, the currently active window is made the owner of the dialog box. If you want to specify a specific owner, use the other version of this method.
    Il me 'suffit' donc d'appeler la methode Dispose()...

    Merci à tous

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/10/2008, 09h27
  2. Réponses: 3
    Dernier message: 06/02/2007, 14h46
  3. Réponses: 5
    Dernier message: 16/02/2006, 16h27
  4. [2005] Composants de Delphi 7 non disponibles dans 2005
    Par dacid dans le forum Bases de données
    Réponses: 5
    Dernier message: 04/08/2005, 17h18
  5. Ingres 2.6 et .Net (managé ou non)
    Par moimoi dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 08/03/2004, 08h58

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