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#

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�

    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
    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

  2. #2
    Expert �minent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 200
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, Puy de D�me (Auvergne)

    Informations professionnelles :
    Activit� : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 200
    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 confirm�

    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
    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/

+ 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