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 :

Où mettre le Refresh() ? [Débutant]


Sujet :

Windows Forms

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Où mettre le Refresh() ?
    Bonjour,

    J'ai un menu dans la fenetre1 qui permet d'ouvrir la fenetre2 pour faire une saisie.
    Sur quel événement dois-je mettre un Refresh() pour que la Fenetre 1 se mette à jour lorsque je ferme la fenetre2 ?
    J'ai essayé l'évenement FormClosed de la Fenetre2, mais çà ne marche pas.

    D'avance merci !

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    2 cas :

    • Cas 1 : si des traitements sont en cours suite à la fermeture de la fenêtre 2, la fenêtre 1 ne se mettra à jour qu'à la fin de ces traitements.
    • Cas 2 : pas de traitements, alors le Refresh() est inutile.


    Dans le cas 1, utiliser un BackGroundWorker pour effectuer le traitement.

    Dans le cas 2, vérifier sous debug que l'on exécute bien les instructions modifiant les Controls de la fenêtre 1.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup ! Je suis dans le cas 2, les infos saisies dans la fenêtre2 permettent juste de redessiner le dessin dans la fenêtre1. Pourtant, à la fermeture de la fenêtre2, la fenêtre1 ne se met pas à jour. J'ai rajouté un bouton dans la fenetre1 qui lance une fonction avec juste l'instruction "refresh()", et là les modifications sont bien prises en compte.
    Mais je voudrais que çà se fasse tout seul, sans que l'utilisateur ne doive à chaque fois actualiser la fenetre1.

    Merci d'avance pour votre aide !

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Essaye un Application.DoEvents() une fois le dessin effectué.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  5. #5
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci, mais çà ne change rien... Je vais essayer le backgroundworker pour voir...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Points : 230
    Points
    230
    Par défaut
    Bonjour,

    Il faut rajouter un événement dans la fenêtre 2, que la fenêtre 2 créera quand elle se fermera (dans le OnClosed()). Et la fenêtre 1 récupère cet évènement et fait un refresh();

    Ou mieux, à chaque modification sur la fenêtre 2, tu peux créer cet évènement et le refresh() se fera à chaque modification et non plus juste à la fermeture de la fenêtre 2.
    Tox

  7. #7
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Je ne suis pas sûr de bien comprendre...
    Là j'ai créé un gestionnaire d'évenement sur le FormClosed de ma Fenetre2, ce qui me génère la méthode suivante, dans laquelle j'ai rajouté le this.refresh() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void FermetureSaisieHoraires(object sender, FormClosedEventArgs e)
            {
                this.Refresh();
     
            }
    Pour l'instant, çà ne fonctionne pas. Mais il doit falloir abonner ma fenetre1 à cet événement, non ? Et çà je ne sais pas faire.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Points : 230
    Points
    230
    Par défaut
    Oui c'est ça. L'objet de la fenêtre 2 qui se trouve dans la fenêtre 1 doit s'abonner à l'évènement. Un truc du genre :

    dans la fenetre 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaForm form2 = new MaFrom();
    form2.MyRefreshEvent += new System.EventHandler(this.MaCallBack_Refresh);
    form2.show();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void MaCallBack_Refresh(object sender, EventArgs e)
    {
       // tu fais ton refresh
    }
    dans la fenetre 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public event EventHandler MyRefreshEvent;
     
    this.MyRefreshEvent(this, new EventArgs());
    Inspire toi de ça
    Tox

  9. #9
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Pourrais tu me preciser à quoi sert la toute dernière ligne ? Et comment se fait le lien avec l'évenement formClosed de la Fenetre2 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.MyRefreshEvent(this, new EventArgs());
    Pour le reste, je comprends.
    Merci !

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Points : 230
    Points
    230
    Par défaut
    Re,

    Je crois que j'ai répondu un peu vite. Il y a plus simple.
    Regarde le ZIP que je te mets en copie, et vois si ça te suffit.
    Tu t'abonnes à l’événement FormClosed et c'est finit normalement...
    Fichiers attachés Fichiers attachés
    Tox

  11. #11
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup, c'est vraiment sympa ! Alors en fait, çà marche et çà marche pas. Je m'explique : Dans ma fenetre1, le code qui est dans le paint dessine une sorte de toile d'araignée et colorie certaines cellules. Il y a aussi quelques label qui sont mis à jour.
    Si je mets en commentaire la partie du code qui trace la toile d'araignée, les labels sont effectivement bien mis à jour, donc çà marche. Par contre, si je laisse le tracé de la toile d'araignée, çà ne marche plus.
    Du coup, je me dis que mon pb pourrait peut-être se résoudre en utilisant le BackgroundWorker évoqué plus haut. J'avais laissé tombé, je m'y remettrai demain. J'ai essayé un timer aussi, mais la toile d'araignée se met à clignoter, c'est pas top, même si je dois pouvoir gérer l'activation du timer.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Points : 230
    Points
    230
    Par défaut
    Après je ne sais pas si et auront le même comportement sur ta form. Tu peux tester ça.
    Tox

  13. #13
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    si tu as ajouté dans Form2 :
    private void FermetureSaisieHoraires(object sender, FormClosedEventArgs e)
    {
    this.Refresh();

    }
    "this" correspond à l'instance de Form2 et non pas à celle de Form1.
    Pour activer le refresh de Form1, il faut par exemple créer dans form2 une fonction SetForm1 à appeler avant le show depuis Form1:

    Dans Form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TheForm2.SetForm1(this) ;
    TheForm2.Show() ;
    Dans Form2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    private Form1 TheForm1 ;
    private void SetForm1(Form1 f) { TheForm1 = f ; }
    private void FermetureSaisieHoraires(object sender, FormClosedEventArgs e) { TheForm1.Refresh(); }
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  14. #14
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur Biomédical
    Inscrit en
    Octobre 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur Biomédical
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup à vous deux, je viens de tester avec Invalidate, çà marche ! Et je garde précieusement la méthode de Graffito !

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

Discussions similaires

  1. [VB6] mettre en commentaires...
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/04/2004, 15h15
  2. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  3. [VB6] - Mettre un morceau de ligne en commentaire
    Par inotna2099 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 11h03
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. [langage] Problème de taille de fichier à mettre dans
    Par And_the_problem_is dans le forum Langage
    Réponses: 10
    Dernier message: 13/08/2002, 09h41

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