Gérer mon bouton zoom [Résolu]

Navas8 19 Messages postés mercredi 6 mai 2015Date d'inscription 15 juin 2015 Dernière intervention - 13 mai 2015 à 15:40 - Dernière réponse : Navas8 19 Messages postés mercredi 6 mai 2015Date d'inscription 15 juin 2015 Dernière intervention
- 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; }
}
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 13 mai 2015 à 15:51
1
Merci
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

Merci Whismeril 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 13 mai 2015 à 15:52
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
Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 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.
Commenter la réponse de Whismeril
Meilleure réponse
Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 13 mai 2015 à 17:28
1
Merci
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à.

Merci Whismeril 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Navas8 > Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 18 mai 2015 à 09:36
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;

           
        }
Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention > 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.
Navas8 > Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention - 18 mai 2015 à 09:39
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
Whismeril 11624 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 juin 2018 Dernière intervention > Navas8 - 18 mai 2015 à 11:05
Nouveau problème => nouveau sujet, avec des détails de ton besoin (5 graphiques, tous sur le même chart ou pas, etc...).
Navas8 19 Messages postés mercredi 6 mai 2015Date d'inscription 15 juin 2015 Dernière intervention - 18 mai 2015 à 12:25
d'accord un nouveau sujet. c'est intitulé "sélectionner un Chart"
Commenter la réponse de Whismeril
Navas8 19 Messages postés mercredi 6 mai 2015Date d'inscription 15 juin 2015 Dernière intervention - Modifié par Navas8 le 13/05/2015 à 16:52
0
Merci
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
Commenter la réponse de Navas8

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.