Gérer mon bouton zoom

Résolu
Navas8 Messages postés 19 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 15 juin 2015 - 13 mai 2015 à 15:40
Navas8 Messages postés 19 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 15 juin 2015 - 18 mai 2015 à 12:25
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; }
}

3 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
13 mai 2015 à 15:51
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
1
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
Modifié par Whismeril le 13/05/2015 à 16:06
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
13 mai 2015 à 16:05
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.
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
13 mai 2015 à 17:28
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à.
1
Navas8 Messages postés 19 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 15 juin 2015
Modifié par Whismeril le 13/05/2015 à 18:19
t'avais raison j'ai modifié avec ca
courbe.ChartAreas[3].AxisX.ScaleView.SmallScrollMinSize = .01;
courbe.ChartAreas[3].AxisX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Minutes;
courbe.ChartAreas[3].AxisX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Minutes;


Mais il n y a toujours pas de barre en X c'est à dire une barre qui me permet de circuler sur l'axe des X
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
13 mai 2015 à 19:55
            Axis axeX = chart1.ChartAreas[0].AxisX;
            axeX.IntervalAutoMode = IntervalAutoMode.FixedCount;
            axeX.ScaleView.Zoom(2, 4,DateTimeIntervalType.Seconds);//zoom l'axe Y entre deux et 10
            axeX.ScaleView.SmallScrollMinSize = .01;
            axeX.ScaleView.SmallScrollMinSizeType = DateTimeIntervalType.Minutes;
            axeX.ScaleView.SmallScrollSizeType = DateTimeIntervalType.Minutes;


Avec ce code, j'ai l'ascenceur
0
Navas8 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024
Modifié par Whismeril le 18/05/2015 à 09:38
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;

           
        }
0
Navas8 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024
Modifié par Navas8 le 18/05/2015 à 10:31
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
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656 > Navas8
18 mai 2015 à 09:42
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.
0
Navas8 Messages postés 19 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 15 juin 2015
Modifié par Navas8 le 13/05/2015 à 16:52
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
0
Rejoignez-nous