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

C# Discussion :

comment obtenir l'exécution d'un évènement _paint avant


Sujet :

C#

  1. #1
    Membre régulier

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Points : 120
    Points
    120
    Billets dans le blog
    1
    Par défaut comment obtenir l'exécution d'un évènement _paint avant
    Bonjour,

    J'ai posé cette question sur le forum Windows Form mais je n'ai pas de réponse, alors je tente ma chance sur le forum C# qui, je pense, est plus adapté

    J'affiche 2 graphiques, l'un grâce à un Chart, l'autre "manuellement" en dessinant dans un panel.
    Or je dois aligner les axes X des deux graphiques.
    Il faut donc que je connaisse les coordonnées de l'axe des X du Chart pour dessiner le second graphique.
    Les coordonnées du chart ne sont accessibles que dans l'évènement _Paint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chartAreaXAxis.X = (int)neutronsChart.AxisX.ValueToPixelPosition(neutronsChart.AxisX.Minimum);
    Malheureusement, l'évènement est appelé trop tard et donc les dimensions du graphique sont mesurées trop tard. Comment obtenir ces données à temps, en d'autres termes, comment forcer l'exécution de la fonction avant de dessiner le deuxième graphique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            private void Experiment_Load(object sender, EventArgs e)
            {   
                reactor = new Reactor(criticalityVariations, precursors);
                UpdateDataGridViewPrecursors(precursors);
                chartPopulation.Paint += new PaintEventHandler(this.chartPopulation_Paint);
                Display(); // je dessine ici mon premier graphique
                criticalityPanel1.LoadCriticality(criticalityVariations, chartAreaXAxis); //je dessine ici mon deuxième graphique
                                                                                                              //en espérant avoir récupéré les dimensions du premier graphique ...
                criticalityPanel1.OnCriticalityChange += criticalityPanel1_OnCriticalityChange;
           }
     
            void chartPopulation_Paint(object sender, PaintEventArgs e) // je mesure ici les dimensions de mon premier graphique
                          //comment forcer l'exécution de cette fonction ?
            {
                ChartArea neutronsChart = chartPopulation.ChartAreas[0];
                chartAreaXAxis.X = (int)neutronsChart.AxisX.ValueToPixelPosition(neutronsChart.AxisX.Minimum);
                chartAreaXAxis.Y = (int)neutronsChart.AxisX.ValueToPixelPosition(neutronsChart.AxisX.Maximum);
     
            }
            private void Display() //J'affiche mon premier graphique
            {
                foreach (DataPoint dp in reactor.populationAtEveryStep)
                    chartPopulation.Series[0].Points.Add(dp);
            }
    J'ai fait plusieurs tentatives, toutes infructueuses :

    - appeler la fonction en créant un PaintEventArgs
    - appeler chartPopulation.Invalidate();
    - appeler splitContainer3.panel2.Refresh(); qui contient la chartPopulation
    - appeler la méthode refresh de la form : this.refresh();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    private void Experiment_Load(object sender, EventArgs e)
            {   
                reactor = new Reactor(criticalityVariations, precursors);
                UpdateDataGridViewPrecursors(precursors);
                chartPopulation.Paint += new PaintEventHandler(this.chartPopulation_Paint);
                Display();
     
                //Graphics g = chartPopulation.CreateGraphics();
                //Rectangle r = new Rectangle();
                //PaintEventArgs ev = new PaintEventArgs(g,r);
                //chartPopulation_Paint(this,ev);
     
                //chartPopulation.Invalidate();
                splitContainer3.Panel2.Refresh();
                this.Refresh();
                criticalityPanel1.LoadCriticality(criticalityVariations, chartAreaXAxis);
                criticalityPanel1.OnCriticalityChange += criticalityPanel1_OnCriticalityChange;
           }
    Merci d'avance
    jdd deschamps
    RPL - VB6 - C# - Wordpress - Python3 - Xamarin

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pas très clair

    dans le 1er paint, tu enregistres le x dans une variable privée puis tu appelles .invalidate sur l'autre (ce qui appelera son paint et il pourra lire la variable privée), non ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier

    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Janvier 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2010
    Messages : 120
    Points : 120
    Points
    120
    Billets dans le blog
    1
    Par défaut J'ai fini par trouver
    Oui, il faut effectivement appeler l'affichage du deuxième dans l'évènement _Paint du premier :

    http://www.developpez.net/forums/d15...nement-_paint/
    jdd deschamps
    RPL - VB6 - C# - Wordpress - Python3 - Xamarin

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

Discussions similaires

  1. forcer l'exécution d'un évènement _Paint
    Par jdddeschamps dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/06/2015, 09h21
  2. Comment obtenir un exécutable ?
    Par maroua_mm dans le forum Qt
    Réponses: 11
    Dernier message: 10/08/2009, 09h35
  3. Comment obtenir simplement un exécutable ?
    Par fd_caramba dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/12/2008, 19h39
  4. Réponses: 4
    Dernier message: 30/10/2008, 11h50
  5. Réponses: 1
    Dernier message: 25/06/2005, 09h40

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