2012-11-27 13 views

risposta

20

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!

+0

Questo ha funzionato alla perfezione per me. Grazie! – crocboy

+0

Questo non funziona per me. L'evento Mousewheel di Chart non si attiva. –

+2

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) –

Problemi correlati