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#] Paint / Repaint : forcer le rafraichissement de la totalité du controle


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut [C#] Paint / Repaint : forcer le rafraichissement de la totalité du controle
    Bonjour,

    Par défaut, lorsqu'une fenêtre B est affichée par dessus une fenêtre A, au moment où la fenêtre B disparait, seule la partie précédemment masquée de A est redessinée par windows.

    Comment annuler cet effet pour que la totalité du contrôle soit redessiné, et pas seulement une partie ?

    En effet, j'ai réalisé un userControl qui dessine un graphique sur un panel. Mais il arrive que seule une partie du graphique soit redessinée au lieu de la totalité (par exemple justement lorsqu'une fenêtre recouvrait une partie de ce graphique). Comment forcer Windows à redessiner la totalité du controle ?

    Merci d'avance...

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par jyl2002
    Bonjour,

    Par défaut, lorsqu'une fenêtre B est affichée par dessus une fenêtre A, au moment où la fenêtre B disparait, seule la partie précédemment masquée de A est redessinée par windows.

    Comment annuler cet effet pour que la totalité du contrôle soit redessiné, et pas seulement une partie ?

    En effet, j'ai réalisé un userControl qui dessine un graphique sur un panel. Mais il arrive que seule une partie du graphique soit redessinée au lieu de la totalité (par exemple justement lorsqu'une fenêtre recouvrait une partie de ce graphique). Comment forcer Windows à redessiner la totalité du controle ?

    Merci d'avance...
    Si ton appli est bien concue à ce niveau là, ce qui a besoin d'être redessiné est uniquement ce qui a été caché par une autre fenêtre... Le fait de ne redessiner que cette partie devrait suffire, car le reste n'a pas changé...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par ®om
    Si ton appli est bien concue à ce niveau là, ce qui a besoin d'être redessiné est uniquement ce qui a été caché par une autre fenêtre... Le fait de ne redessiner que cette partie devrait suffire, car le reste n'a pas changé...
    Hé bien si, justement, le reste a changé: la fonction qui affiche le graph n'est pas idempotente (et c'est une fonctionnalité voulue. Ce n'est pas une erreur liée à la qualité de conception). D'où une incohérence de graph et ma volonté de redessiner la totalité du contrôle.

    Merci d'avance pour vos idées.

  4. #4
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Donc en gros le fonctionnement de ton appli, ton graph est mis à jour uniquement lorsqu'une fenêtre passe dessus? C'est bizarre

    Tu devrais peut-être mettre à jour ton graphe uniquement dans une image bufferisée, et dans ton paint(), tu dessines l'image bufferisée...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 59
    Points : 80
    Points
    80
    Par défaut
    En fait le graph est mis à jour lors de la réception de divers évènements, comme des évènements perso ainsi que d'autres évènements comme les redimensionnement (resize, maximise, etc). Pour ces autres évènements, j'avais trouvé plus simple de tout factoriser en recalculant le graph dans la méthode onPaint... sans penser que le repaint était aussi appeler dans des cas plus gênant comme l'affichage suite à une autre fenêtre suvolant l'appli.

    J'utilisais déjà une image bufferisée... mais effectivement, en changement les conditions du recalcul du buffer, j'évite mon petit désagrément. Le graph n'est plus rafraichit lors du survol, mais est rafraichit lors du redimensionnement, ce qui peut aussi convenir.


    Tu avais raison au départ... Merci de m'avoir mis sur la voie !

    @ +

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

Discussions similaires

  1. forcer un rafraichissement ecran
    Par john123 dans le forum Composants
    Réponses: 1
    Dernier message: 19/07/2007, 15h54
  2. paint, repaint, thread?
    Par rageice dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 16/07/2007, 09h04
  3. [SERVLET] Forcer le rafraichissement d'une servlet
    Par Finrod dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 03/05/2007, 12h03
  4. [MFC] CDialog -> forcer le rafraichissement
    Par Rafoo dans le forum MFC
    Réponses: 3
    Dernier message: 05/09/2006, 17h51
  5. [JPanel] Forcer le rafraichissement d'un sous panel
    Par tomca dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 18/05/2005, 17h49

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