Affichage de coordonnée d'une point de courbe

hatek Messages postés 5 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 30 avril 2012 - 8 avril 2012 à 21:04
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 10 avril 2012 à 17:59
slt tt le monde
je suis débutant en c# je voudrais afficher coordonnée d'une point dans un zone de texte avec un simple clique de souris si qlq un possède une idée je le remercie d'avance et voila un exemple de code qui marche bien
using System;
using ZedGraph;
using ZedGraph.Web;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Resize(object sender, EventArgs e)
{
SetSize();
}
private void SetSize()
{

// permet de laisser une marge de 10 pixels tout autour du graphique
zedGraphControl1.Location = new Point(10, 10);
zedGraphControl1.Size = new Size(ClientRectangle.Width - 20, ClientRectangle.Height - 20);
}


//ZedGraphControl zg1 = new ZedGraphControl();

private void Form1_Load(object sender, EventArgs e)
{

CreateGraph(zedGraphControl1); // zg1 est le nom du composant ZedGraphControl
timer1.Start();
}

private void zedGraphControl1_Load(object sender, EventArgs e)
{


}

// Build the Chart
private void CreateGraph(ZedGraphControl zgc)
{
// Get a reference to the GraphPane
GraphPane myPane = zedGraphControl1.GraphPane;

// Set the titles
myPane.Title.Text = "My Test Date Graph";
myPane.XAxis.Title.Text = "Date";
myPane.XAxis.Title.Text = "My Y Axis";
// myPane.XAxis.GetCrossAxis;
// Make up some random data points
double x, y;
PointPairList list = new PointPairList();
for ( int i=0; i<36; i++ )
{
x = (double) new XDate( 1995, 5, i+11 );
y = Math.Sin( (double) i * Math.PI / 15.0 );
list.Add( x, y );
}


// Generate a red curve with diamond
// symbols, and "My Curve" in the legend
CurveItem myCurve = myPane.AddCurve( "My Curve",
list, Color.Red, SymbolType.Diamond );

// Set the XAxis to date type
myPane.XAxis.Type = AxisType.Date;

// Tell ZedGraph to refigure the axes since the data
// have changed
zedGraphControl1.AxisChange();



}

4 réponses

Utilisateur anonyme
8 avril 2012 à 23:52
Salut.
Utilise des balises spéciales pour afficher clairement ton code afin que ton post soit plus lisible.
Sinon regarde du côté des listeners qui te permettront de récupérer les clics sur un objet.


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça les a instruit)
1
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
9 avril 2012 à 00:16
Bonsoir,

Si tu l'utilisateur fait un click doit sur le graphique, il peut cocher "Visualiser les valeurs" dans ce cas les coordonnées du point le plus proche de la sourie sont affichées sous forme de Pop Up.

Si tu as les sources de la librairie, regarde du coté de "protected void ZedGraphControl_MouseMove" et de "private Point HandlePointValues"


Whismeril
0
hatek Messages postés 5 Date d'inscription samedi 31 mars 2012 Statut Membre Dernière intervention 30 avril 2012
9 avril 2012 à 21:29
slt et merci pour votre réponse mais je n'ai pas réussi de trouver la solution avec "private Point HandlePointValues" car je suis débutant en c# et je travaille une application vraiment je suis bloque si tu possède un exemple je le remercie une autre fois
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
10 avril 2012 à 17:59
Bonjour

la première solution est simple, mais il faut activer l'affichage des valeurs.

Quand le graphique affiche une valeur, un événement est généré.

En t'abonnant à cet événement tu peux ressortir les corrdonnées du point de courbe le plus proche de ta souris.

La ligne ci dessous est à mettre dans la phase d'initialisation de ton graphique, ou de ton formulaire. (Graph est le nom de mon ZedGraph)
            Graph.PointValueEvent += new ZedGraphControl.PointValueHandler(Graph_PointValueEvent);//on s'abonne à l'événement

Quand tu vas taper += l'environnement Visua Studio va te proposer de taper 2 fois sur tab pour générer la fonction (ça ne marche pas si tu fais un copier coller de la ligne d'exemple). Fais donc deux Tab.

Ca va t'écrire une méthode générant une erreur:
        string Graph_PointValueEvent(ZedGraphControl sender, GraphPane pane, CurveItem curve, int iPt)
        {
            throw new NotImplementedException();//génère l'execption : Méthode non écrite
        }

On constate que cette méthode fournit en paramètres le GrahPane, la Courbe et l'Id du point dans la courbe.

Tu devras modifier le corps de cette méthode pour en faire ce que tu veux:
        string Graph_PointValueEvent(ZedGraphControl sender, GraphPane pane, CurveItem curve, int iPt)
        {
            PointPair point = curve[iPt];//extrait le point numéro [iPt] de la courbe curve

            textBox1.Text = point.ToString(); //ecrit les coordonnées au format par défaut dans textbox1

            return point.ToString(); // comme la méthode est définie comme une string ça doit retourner une string...
        }




Whismeril
0
Rejoignez-nous