GDI+ Problème dans mon panel avec scrollbar

Signaler
Messages postés
2
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
17 mai 2007
-
Messages postés
2
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
17 mai 2007
-
Bonjour,
je ne sais pas du tout si c'est la bonne section, mais j'avoue que je ne savais pas où poser la question exactement.

J'ai une fenêtre Graphic_Form qui contient un Panel panel1, et je dessine dans ce panel.
En gros j'ai (là dans la class Graphic_Form donc):
this.panel1.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);

et donc plus loin :

        private void panel1_Paint(object sender, PaintEventArgs pe)
        {
             Graphics g;
             g = pe.Graphics;
             // Suivi de mon graphe...
             g.Dispose();

Jusque là pas de problème, mon graphe se dessine parfaitement et tout et tout.
Le problème vient du fait que lorsque mon graphe est trop grand, je fais apparaitre une scrollbar à l'aide de :
this.panel1.AutoScrollMinSize = new Size(600,600);
Cela juste après le g.Dispose(); , mais j'ai essayé de le déplacer ça ne résoud pas le problème.

Problème qui est : lorsque je veux faire défiler mon graphe vers la droite (où à gauche, où en bas, etc), ça ne fonctionne pas comme ça le devrait, le graphe est effectivement décalé à gauche, mais c'est du blanc qui apparait à droite, le graphe ne devrait-il pas être redéssiné comme lorsque qu'on redimensionne la fenêtre ? (où là il n'y a aucun problème, tout revient dans l'ordre)

Je ne vois pas comment je peux résoudre ce problème en fait, je ne suis pas expert en csharp et c'est la première que je fais un graphe avec. ^^"
Merci d'avance si quelqu'un sait résoudre ce problème.

PS : J'ai pas trouvé de balise code, c'est normal ?

2 réponses

Messages postés
303
Date d'inscription
mardi 11 février 2003
Statut
Membre
Dernière intervention
24 avril 2009
5
essai en faisant .Invalidate() de ton panel au moment du scroll ?

Eric
Messages postés
2
Date d'inscription
dimanche 15 octobre 2006
Statut
Membre
Dernière intervention
17 mai 2007

J'avais oublié un petit quelque chose, ça va un peu mieux mais ça ne résoud pas complètement le problème d'affichage.
        private void panel1_Paint(object sender, PaintEventArgs pe)
        {
             Graphics g;
             g = pe.Graphics;

             g.ScaleTransform(zoom, zoom, MatrixOrder.Append);  // Permet de zoomer sur mon graphe
             g.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y);  // Décalage du graphe

             this.panel1.AutoScrollMinSize = new Size (longueur_graphe, hauteur_graphe) // Le zoom change la taille

             // Suivi de mon graphe...

             g.Dispose();
        }

J'avais oublié le g.TranslateTransform(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y), ça décale le dessin en fonction du scroll et donc ça le dessine à la bonne place.

Mais j'ai toujours un problème, parfois ça ne se dessine toujours pas correctement, mais cette fois-ci il semblerait que ça soit à cause de mon zoom.
Quand j'appuie sur mon bouton zoom il n'y a pas de problème, c'est ensuite à force de scroller un peu dans tout les sens, l'affichage commence à foirer (l'affichage se répète, par exemple les 50 pixels les plus à droite sont reproduit dans les 50 nouveaux pixels qui apparaissent), ça ne le fait pas systématiquement !
Si je zoom puis dezoom effectivement le problème disparait, parceque je fais un panel1.Invalidate(), mais comment faire pareil avec le scrolling ?

Là c'est un autoscrolling de panel1, dans la liste d'évènement il n'y rien comme évènement Scroll ou quelque chose s'en approchant  :/