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 :
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 chartAreaXAxis.X = (int)neutronsChart.AxisX.ValueToPixelPosition(neutronsChart.AxisX.Minimum);
J'ai fait plusieurs tentatives, toutes infructueuses :
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); }
- 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();
Merci d'avance
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; }
Partager