J'utilise un contrôle System.Windows.Forms.DataVisualization.Charting.Chart et les éléments AxisX et Y de ChartArea définissent Zoomable sur true. Lorsque le graphique est zoomé, je vois la barre de défilement, mais je ne peux pas le faire glisser. Est-il possible de faire glisser la barre de défilement et de faire bouger l'affichage du graphique lorsque je fais glisser le bouton de la barre de défilement? Je veux le rendre intuitif et interactif pour l'utilisateur. Merci!Pour agrandir et faire défiler l'objet Diagramme de visualisation de données, faites glisser la barre de défilement.
Répondre
Pour faire un zoom avant et arrière sur le graphique, j'utilise l'événement MouseWheel. La solution que je vais montrer ci-dessous est loin d'être parfaite mais ça marche, au moins pour moi :).
Les valeurs de maxChangeRange et minChangeRange doivent être calculés pour chaque série de données (21 et -1 sont des valeurs que je l'ai utilisé dans mon projet). De plus, il est supposé que les deux axes ont une plage de valeurs similaire au cas où, s'ils sont différents, une sorte d'échelle doit être ajoutée pour l'un d'entre eux. Les positions de souris reçues de MouseEventArgs (e.X et e.Y) sont des positions de souris à l'intérieur du contrôle de graphique et non à l'intérieur du graphique :), donc cette fonction de zoom positionnel est en quelque sorte défectueuse.
Pour le faire fonctionner, vous devez avoir le contrôle graphique avec zone de graphique et axes définis
Si l'axe des étiquettes en forme automatique est activée graphique peut être un peu « Jumpy » pendant le zoom. Je suis débutant du monde des C# et des winforms, donc je pense que ce n'est probablement pas la meilleure solution.
// Actual total zoom value int deltaScrollTotal; private void chart_MouseWheel(object sender, MouseEventArgs e) { int maxChangeRange = 21; int minChangeRange = -1; int deltaScroll = e.Delta/Math.Abs(e.Delta); deltaScrollTotal += deltaScrollTotal + deltaScroll > minChangeRange && deltaScrollTotal + deltaScroll < maxChangeRange ? deltaScroll : 0; // Additional calculation in order to obtain pseudo // "positional zoom" feature double minXScale = (double)e.X/(double)chart.Width; double maxXScale = 1 - minXScale; double minYScale = (double)e.Y/(double)chart.Height; double maxYScale = 1 - minYScale; // Max and min values into which axis need to be scaled/zoomed double maxX = chart.ChartAreas[0].AxisX.Maximum - deltaScrollTotal * maxXScale; double minX = chart.ChartAreas[0].AxisX.Minimum + deltaScrollTotal * minXScale; double maxY = chart.ChartAreas[0].AxisY.Maximum - deltaScrollTotal * minYScale; double minY = chart.ChartAreas[0].AxisY.Minimum + deltaScrollTotal * maxYScale; chart.ChartAreas[0].AxisX.ScaleView.Zoom(minX, maxX); chart.ChartAreas[0].AxisY.ScaleView.Zoom(minY, maxY); }
Cet événement doit être attaché au contrôle de tableau:
chart.MouseWheel += new MouseEventHandler(chart_MouseWheel);
ANSWERED question: http://stackoverflow.com/questions/1212914/enable-scrolling-on-the -microsoft-chart-control-for-windows-forms –