Gérer mon bouton zoom [Résolu]

Signaler
Messages postés
19
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
-
Messages postés
19
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015
-
Bonjour,
Avec Chart j'ai 5 graphiques (dans chaque graphique j'ai 3 courbes avec des abscisses HH:MM), j'aimerai pouvoir zoomer et avoir un sroll bar sur un des graphiques par l'appui d'un bouton zoom.

J'ai du mal à gérer ce qui doit etre dans ce bouton. Mon programme est ci dessous. Merci d'avance

public partial class Form1 : Form
{
private List<Recette> recettes = new List<Recette>();

public Form1()
{
InitializeComponent();
}

private void LoadBtn_Click(object sender, EventArgs e)
{
LoadValues();
DisplayValues();
}

private void DisplayValues()
{
courbe.Series.Clear();
courbe.ChartAreas.Clear();

foreach (Recette rec in recettes)
{
ChartArea area = courbe.ChartAreas.Add(rec.Name);
//area.BackColor = Color.LightBlue;
//area.BackColor = Color.Green;
area.BorderColor = Color.Red;
area.BorderWidth = 4;

foreach (Series s in rec.Series)
{
s.ChartArea = rec.Name;
courbe.Series.Add(s);
}
}
}

private void LoadValues()
{
string path = Application.StartupPath + @"\texttest.txt";
Recette curRecette = null;
Series curSerie = null;
DateTime curTime = DateTime.Now;
int recIndex = 1;
int serIndex = 1;

if (File.Exists(path))
{
TextReader tx = new StreamReader(path);
string ligne = string.Empty;
while ((ligne = tx.ReadLine()) != null)
{
int pos = ligne.IndexOf(":");
string commande = ligne.Substring(0, pos);
string value = ligne.Substring(pos + 1);
switch (commande)
{
case "Custom Name":
if (curRecette != null)
{
recettes.Add(curRecette);
}

curRecette = new Recette();
break;

case "File Name":
curRecette.Name = recIndex.ToString() + " " + value;
recIndex++;
break;

case "Start":
curRecette.Start = DateTime.Parse(value);
break;

case "End":
curRecette.End = DateTime.Parse(value);
break;

case "Curve Name":
if (curSerie != null)
{
curRecette.Series.Add(curSerie);
}
curSerie = new Series();
curSerie.XValueType = ChartValueType.Time;
curSerie.YValueType = ChartValueType.Double;
curSerie.ChartType = SeriesChartType.Line;
curSerie.Name = serIndex.ToString() + " " + value;
serIndex++;
break;
case "Time":
curTime = DateTime.Parse(value);
break;
case "Data":
curSerie.Points.AddXY(curTime, Double.Parse(value));
break;

default:
break;
}
}
}
else
{
MessageBox.Show("Impossible de trouver le fichier de données");
}
}

private void courbe_Click(object sender, EventArgs e)
{

}

// rajout
private void Zoom_Click(object sender, EventArgs e)
{
this.courbe.ChartAreas.FindByName("ChartArea1").RecalculateAxesScale();

this.courbe.ChartAreas.FindByName("ChartArea1").AxisX.ScaleView.ZoomReset();
}
//fin rajout
}


public class Recette
{
private string name;
private DateTime start;
private DateTime end;
private List<Series> series = new List<Series>();

public List<Series> Series
{
get { return series; }
set { series = value; }
}

public DateTime End
{
get { return end; }
set { end = value; }
}

public DateTime Start
{
get { return start; }
set { start = value; }
}

public string Name
{
get { return name; }
set { name = value; }
}
A voir également:

3 réponses

Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Bonjour

pour un chart quelquonque
            
            cht.ChartAreas[0].AxisY.StripLines.Clear();
            Axis axeY = cht.ChartAreas[0].AxisY;
            axeY.IntervalAutoMode = IntervalAutoMode.FixedCount;
            axeY.Interval = 1;//espace entre les valeurs affichées sur l'échelle
            axeY.ScaleView.Zoom(2, 10);//zoom l'axe Y entre deux et 10

et pareil pour l'axe X
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Et si un sujet est résolu, merci de le marquer en utilisant le lien dédié sous le titre de la discussion, et dire merci aussi.
C'est valable pour tes précédentes interventions
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Je voie que tu as adapté ma proposition de class à ta sauce.
Le truc en mettant directement le resultat sous forme de série est qu'il est compliqué ensuite de chercher un min ou un max.
A moins que tu n'en aies plus besoin.

Par contre, je persiste à penser que la lecture du fichier n'a rien à faire dans le formulaire. Le job d'un formulaire c'est l'interarction entre l'utilisateur et les classes métiers.
La lecture du fichier, serait plus a sa place dans la classe recette, dans le constructeur, ou une méthode dédiée.

D'autre part, je t'ai montré comment lire tes données avec une Regex.
En voyant le code complet, je te le repropose, une régex extrait tout l'entête et une autre toutes les données.

moins de lignes de codes => moins de maintenance.
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551
Je ne l'ai jamais fais avec des heures, il faut peut être voir avec l'intervalle, "00:01:00", je n'ai pas de quoi tester là.
>
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021

Merci,
Voila le code au cas ou
{

            // Pour l'axe des Y

            courbe.ChartAreas[0].AxisY.StripLines.Clear();
            Axis axeY = courbe.ChartAreas[3].AxisY;
            axeY.IntervalAutoMode = IntervalAutoMode.FixedCount;
            axeY.Interval = 1;//espace entre les valeurs affichées sur l'échelle
            axeY.ScaleView.Zoom(1, 5);//zoom l'axe Y entre deux et 10

            ////Pour l'axe des X

            Axis axeX = courbe.ChartAreas[3].AxisX;
            axeX.IntervalAutoMode = IntervalAutoMode.FixedCount;
            axeX.ScaleView.Zoom(1, 4, DateTimeIntervalType.Seconds);//zoom l'axe Y entre deux et 10
            axeX.ScaleView.SmallScrollMinSize = .01;
            axeX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Seconds;
            axeX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Seconds;

           
        }
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551 > Navas8
C'est sympa de remettre les codes que je t'ai donnés...
Si ton problème est résolu, merci de marquer le sujet comme tel, avec le lien "Marquer Comme Résolu" sous le titre de la discussion, si tu ne le voies pas, connecte toi.
>
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021

lolll,
Mais y aurai moyen de pouvoir sélectionner un des 5 GRAPHIQUES ( sachant que l'objectif est de l'imprimer par la suite)
T'aurais une idée de comment je pourrais le faire avec un exemple de code si possible. Merci d'avance
Messages postés
16037
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 juin 2021
551 > Navas8
Nouveau problème => nouveau sujet, avec des détails de ton besoin (5 graphiques, tous sur le même chart ou pas, etc...).
Messages postés
19
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015

d'accord un nouveau sujet. c'est intitulé "sélectionner un Chart"
Messages postés
19
Date d'inscription
mercredi 6 mai 2015
Statut
Membre
Dernière intervention
15 juin 2015

Je viens de voir ton deuxième message, évidemment ta raison, je refaire cette partie, essayé d'utiliser regex qui me parait mieux.

Pour l'axe des Y c'est bon, mais pour l'axes des X, j'ai un problème.
C'est a dire qu'il était sous la forme HH:mm:ss et après zoom sur l'axes des X, il n y a plus de coordonnées en X