Diificulté d'affichage d'un control personnalisé

z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007 - 7 mars 2007 à 13:41
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007 - 8 mars 2007 à 22:28
bonjour

voilà j'ai un ptit soucis avec un controle que je crée en ce moment, le controle et un graph qui affiche de chronogrammes en tps réel, j'ai déssiné dans une picture box mes ligne et la graduation en utilisant la méthode avec pen et graphics.

Quand je glisse mon controle sur une feuille pour l'y insérer je ne vois pas les lignes dessinée, je ne les vois que si je bouge un control sur ma feuille ou si je bouge le controle lui même, j'ai bien mis tout mes tracés dans la fonction onPaint de mon Control mais la j'avoue etre un peu perdu merci de m'aider

Z.

13 réponses

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
7 mars 2007 à 14:05
Salut,
Sans aucune ligne de code, ça va être assez difficile de t'aider

<hr />
-Blog-
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 mars 2007 à 14:53
tu peux toujours essayé de faire un this.Refresh() dans le Load de ton control.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
7 mars 2007 à 15:11
voilà le constructeur et OnPaint

public Essai()
        {
            InitializeComponent();
            Pen pen = new Pen(Color.Black);
            Graphics graphics = picGraph.CreateGraphics();

            //lignes
            graphics.DrawLine(pen, 0, 30, 600, 30);     //CPC
            graphics.DrawLine(pen, 0, 60, 600, 60);     //RPC
            graphics.DrawLine(pen, 0, 90, 600, 90);     //RVP
            graphics.DrawLine(pen, 0, 120, 600, 120);   //CFP
            graphics.DrawLine(pen, 0, 150, 600, 150);   //RCFP
            graphics.DrawLine(pen, 0, 180, 600, 180);   //CJC
            graphics.DrawLine(pen, 0, 210, 600, 210);   //RJC
            graphics.DrawLine(pen, 0, 240, 600, 240);   //RDT
            graphics.DrawLine(pen, 0, 270, 600, 270);   //REP1
            graphics.DrawLine(pen, 0, 300, 600, 300);   //REP2
            graphics.DrawLine(pen, 0, 330, 600, 330);   //REP3
            graphics.DrawLine(pen, 0, 360, 600, 360);   //CVE

            //Graduations
            graphics.DrawLine(pen, 20, 0, 20, 2);
            graphics.DrawLine(pen, 40, 0, 40, 2);
            graphics.DrawLine(pen, 60, 0, 60, 2);
            graphics.DrawLine(pen, 80, 0, 80, 2);
            graphics.DrawLine(pen, 100, 0, 100, 5);

            graphics.DrawLine(pen, 120, 0, 120, 2);
            graphics.DrawLine(pen, 140, 0, 140, 2);
            graphics.DrawLine(pen, 160, 0, 160, 2);
            graphics.DrawLine(pen, 180, 0, 180, 2);
            graphics.DrawLine(pen, 200, 0, 200, 5);

            graphics.DrawLine(pen, 220, 0, 220, 2);
            graphics.DrawLine(pen, 240, 0, 240, 2);
            graphics.DrawLine(pen, 260, 0, 260, 2);
            graphics.DrawLine(pen, 280, 0, 280, 2);
            graphics.DrawLine(pen, 300, 0, 300, 5);

            graphics.DrawLine(pen, 320, 0, 320, 2);
            graphics.DrawLine(pen, 340, 0, 340, 2);
            graphics.DrawLine(pen, 360, 0, 360, 2);
            graphics.DrawLine(pen, 380, 0, 380, 2);
            graphics.DrawLine(pen, 400, 0, 400, 5);

            graphics.DrawLine(pen, 420, 0, 420, 2);
            graphics.DrawLine(pen, 440, 0, 440, 2);
            graphics.DrawLine(pen, 460, 0, 460, 2);
            graphics.DrawLine(pen, 480, 0, 480, 2);
            graphics.DrawLine(pen, 500, 0, 500, 5);

            graphics.DrawLine(pen, 520, 0, 520, 2);
            graphics.DrawLine(pen, 540, 0, 540, 2);
            graphics.DrawLine(pen, 560, 0, 560, 2);
            graphics.DrawLine(pen, 580, 0, 580, 2);

        }

        private void Essai_Paint(object sender, PaintEventArgs e)
        {
            Pen pen = new Pen(Color.Black);
            Graphics graphics = picGraph.CreateGraphics();

            //lignes
            graphics.DrawLine(pen, 0, 30, 600, 30);     //CPC
            graphics.DrawLine(pen, 0, 60, 600, 60);     //RPC
            graphics.DrawLine(pen, 0, 90, 600, 90);     //RVP
            graphics.DrawLine(pen, 0, 120, 600, 120);   //CFP
            graphics.DrawLine(pen, 0, 150, 600, 150);   //RCFP
            graphics.DrawLine(pen, 0, 180, 600, 180);   //CJC
            graphics.DrawLine(pen, 0, 210, 600, 210);   //RJC
            graphics.DrawLine(pen, 0, 240, 600, 240);   //RDT
            graphics.DrawLine(pen, 0, 270, 600, 270);   //REP1
            graphics.DrawLine(pen, 0, 300, 600, 300);   //REP2
            graphics.DrawLine(pen, 0, 330, 600, 330);   //REP3
            graphics.DrawLine(pen, 0, 360, 600, 360);   //CVE

            //Graduations
            graphics.DrawLine(pen, 20, 0, 20, 2);
            graphics.DrawLine(pen, 40, 0, 40, 2);
            graphics.DrawLine(pen, 60, 0, 60, 2);
            graphics.DrawLine(pen, 80, 0, 80, 2);
            graphics.DrawLine(pen, 100, 0, 100, 5);

            graphics.DrawLine(pen, 120, 0, 120, 2);
            graphics.DrawLine(pen, 140, 0, 140, 2);
            graphics.DrawLine(pen, 160, 0, 160, 2);
            graphics.DrawLine(pen, 180, 0, 180, 2);
            graphics.DrawLine(pen, 200, 0, 200, 5);

            graphics.DrawLine(pen, 220, 0, 220, 2);
            graphics.DrawLine(pen, 240, 0, 240, 2);
            graphics.DrawLine(pen, 260, 0, 260, 2);
            graphics.DrawLine(pen, 280, 0, 280, 2);
            graphics.DrawLine(pen, 300, 0, 300, 5);

            graphics.DrawLine(pen, 320, 0, 320, 2);
            graphics.DrawLine(pen, 340, 0, 340, 2);
            graphics.DrawLine(pen, 360, 0, 360, 2);
            graphics.DrawLine(pen, 380, 0, 380, 2);
            graphics.DrawLine(pen, 400, 0, 400, 5);

            graphics.DrawLine(pen, 420, 0, 420, 2);
            graphics.DrawLine(pen, 440, 0, 440, 2);
            graphics.DrawLine(pen, 460, 0, 460, 2);
            graphics.DrawLine(pen, 480, 0, 480, 2);
            graphics.DrawLine(pen, 500, 0, 500, 5);

            graphics.DrawLine(pen, 520, 0, 520, 2);
            graphics.DrawLine(pen, 540, 0, 540, 2);
            graphics.DrawLine(pen, 560, 0, 560, 2);
            graphics.DrawLine(pen, 580, 0, 580, 2);
        }
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 mars 2007 à 15:17
ca ne sert à rien de dessiner dans le constructeur...

il vaut mieux faire un Refresh() au premier affichage du controle.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
7 mars 2007 à 15:25
sur la form ou je l'insert ?
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
7 mars 2007 à 15:29
dans le code de ton controle

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
8 mars 2007 à 09:43
Un update a été plus approprié en fouillant un peu plus, le refresh me causait des problème de réaffichage.

Je me posais la question comment faire défiler un graphe sur ces lignes en fonctions d'une base de temps, je m'explique ce controle devra afficher un chronogramme d'échange entre une supervision et un automate, la partie système fonctionne, dans le cahier des charges, on doit pouvoir mettre en pause le chronograme, faire des zooms avant et arrière.

Merci
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 mars 2007 à 15:45
Ouaip c'est clair qu'il ne faut pas dupliquer le code comme ça.. Un DrawLines
ameliorait les perfs. ; )
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 mars 2007 à 15:49
C'est bizarre également, ( même si c'est valide  ) d'appeler CreateGraphics dans une methode OnPaint, autant dessiner dans le bon évènement Paint.. Et appele Dispose après avec CreateGraphics.
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
8 mars 2007 à 16:22
pour drawline j'ai modifier et ça marche par contre ce que tu m'expliques avec la fonction Paint tu peux développer.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 mars 2007 à 17:02
Tu crées l'objet Graphics ( sans le disposer en plus ) d'un contôle dans la fonction Paint de ta forme, alors que tu devrais utiliser l'objet Graphics contenu dans le PaintEventArgs de la methode OnPaint ou de l' évènement Paint du contrôle concené.

picGraph.Paint += delegate( object sender, PaintEventArgs args )
{
   Graphics g = args.Graphics;
   g.DrawLines( .. );
};
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 mars 2007 à 17:06
Euh non c'est pas ta forme, c'est le contrôle . Ce que je veux dire c'est que tu dois utiliser l'objet Graphics contenu dans PaintEventEventArgs et ne pas appeller CreateGraphics dans l'évènement Paint.
0
z_san Messages postés 80 Date d'inscription jeudi 2 février 2006 Statut Membre Dernière intervention 24 mai 2007
8 mars 2007 à 22:28
ah vi j'ai vu ça sur un exemple merci
0
Rejoignez-nous