Vorrete utilizzare l'evento MouseWheel. Assicurati di rendere il tuo grafico zoomabile. Per esempio:
chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
Poi accedere all'evento MouseWheel:
private void chData_MouseWheel(object sender, MouseEventArgs e)
{
try
{
if (e.Delta < 0)
{
chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset();
chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset();
}
if (e.Delta > 0)
{
double xMin = chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum;
double xMax = chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum;
double yMin = chart1.ChartAreas[0].AxisY.ScaleView.ViewMinimum;
double yMax = chart1.ChartAreas[0].AxisY.ScaleView.ViewMaximum;
double posXStart = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin)/4;
double posXFinish = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin)/4;
double posYStart = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin)/4;
double posYFinish = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin)/4;
chart1.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish);
chart1.ChartAreas[0].AxisY.ScaleView.Zoom(posYStart, posYFinish);
}
}
catch { }
}
C'è probabilmente un modo più pulito di fare questo, ma è così. la proprietà e.Delta
ti dice quanti "rotoli" di ruote hai fatto e può essere utile. Usando questo codice se si esegue lo scrolling del tutto, si ritornerà alle dimensioni originali del grafico.
Spero che questo aiuti!
Questo ha funzionato alla perfezione per me. Grazie! – crocboy
Questo non funziona per me. L'evento Mousewheel di Chart non si attiva. –
Apparentemente, devi farlo prima di farlo funzionare 'void friendChart_MouseLeave (oggetto mittente, EventArgs e) { if (friendChart.Focused) friendChart.Parent.Focus(); } void friendChart_MouseEnter (oggetto mittente, EventArgs e) { if (! FriendChart.Focused) friendChart.Focus(); } '[L'evento della rotellina del mouse non si attiva] (http://stackoverflow.com/questions/13782763/mousewheel-event-not-firing) –