2013-11-26 48 views
2

我有以下的WinForms代碼:ZOOM Out功能

void chart1_MouseWheel(object sender, MouseEventArgs e) 
     { 
      double xMin = chart1.ChartAreas[0].AxisX.ScaleView.ViewMinimum; 
      double xMax = chart1.ChartAreas[0].AxisX.ScaleView.ViewMaximum; 
      if (e.Delta < 0) 
      { //chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(); 
       //chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(); 
      } 

      if (e.Delta > 0) 
      { 
       double posXStart = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin)/2 ; 
       double posXFinish = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin)/2; 
       chart1.ChartAreas[0].AxisX.ScaleView.Zoom(posXStart, posXFinish); 
      } 
     } 

的放大功能正在工作,但是當e.Delta < 0,我需要縮小功能基於上面的代碼。

回答

3

嘗試

chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(1); 
chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(1); 

如果您的saveState和設置爲true,當你放大時,ZoomReset(1)將回到過去的縮放狀態。或者,如果將saveState設置爲false,則ZoomReset(1)將縮小至最後。這裏是我的代碼,我做我的,用鼠標點擊,但我敢肯定,你可以把它帶滾輪的工作:

private void chart1_SelectionRangeChanged(object sender, CursorEventArgs e) 
    { 
     double startX, endX, startY, endY; 

     if (chart1.ChartAreas[0].CursorX.SelectionStart > chart1.ChartAreas[0].CursorX.SelectionEnd) 
     { 
      startX = chart1.ChartAreas[0].CursorX.SelectionEnd; 
      endX = chart1.ChartAreas[0].CursorX.SelectionStart; 
     } 
     else 
     { 
      startX = chart1.ChartAreas[0].CursorX.SelectionStart; 
      endX = chart1.ChartAreas[0].CursorX.SelectionEnd; 
     } 
     if (chart1.ChartAreas[0].CursorY.SelectionStart > chart1.ChartAreas[0].CursorY.SelectionEnd) 
     { 
      endY = chart1.ChartAreas[0].CursorY.SelectionStart; 
      startY = chart1.ChartAreas[0].CursorY.SelectionEnd; 
     } 
     else 
     { 
      startY = chart1.ChartAreas[0].CursorY.SelectionStart; 
      endY = chart1.ChartAreas[0].CursorY.SelectionEnd; 
     } 

     if (startX == endX && startY == endY) 
     { 
      return; 
     } 

     chart1.ChartAreas[0].AxisX.ScaleView.Zoom(startX, (endX - startX), DateTimeIntervalType.Auto, true); 
     chart1.ChartAreas[0].AxisY.ScaleView.Zoom(startY, (endY - startY), DateTimeIntervalType.Auto, true); 
    } 
0

正如Baddack points out可以使用ZoomReset(1)方法去變焦退一萬步歷史。但是,如果您使用ZoomReset(0),則可以重置所有縮放操作,而不必關閉歷史保存。

+1

舊職,但回到變焦的第一級,花費可能是tremenduous的時間,所以,做盡可能快,就像這樣: 而(chart1.ChartAreas [0] .AxisX.ScaleView .IsZoomed) { chart1.ChartAreas [0] .AxisX.ScaleView.ZoomReset(100); } 並且不要忘記爲您使用的所有軸做 – GnRSlashSP

+1

無需爲此使用循環。根據[ZoomReset文檔](https://msdn.microsoft.com/en-us/library/dd467869.aspx),使用ZoomReset(0)將重置所有縮放操作。 –

+0

感謝@NarcísCalvet - 我已經用你的建議更新了我的答案。 – Ben