2011-09-22 160 views
2

我已經使用此鏈接Adding a scroll bar to MS Chart control C#將滾動條添加到我的mschart控件的x軸,並且按預期工作。但現在我的要求是,我需要縮放這兩個軸。但是因爲我刪除了X軸的縮放重置按鈕,我已經使用以下方法通過強制來重置它。MS-Chart使用c中的滾動條縮放X軸#

private void chart1_AxisScrollBarClicked(object sender, ScrollBarEventArgs e) 
{ 
    // Handle zoom reset button 
    if(e.ButtonType == ScrollBarButtonType.ZoomReset)   
    { 
     // Event is handled, no more processing required 
     e.IsHandled = true; 

     // Reset zoom on X and Y axis 
     chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(); 
     chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(); 
    } 
    } 

但它工作不正常。請幫助我在C#中修復此問題。

+0

「工作不正常」太模糊......它怎麼不起作用? – digEmAll

+0

我需要縮放這兩個軸。所以我嘗試在「chart1_AxisScrollBarClicked(object sender,ScrollBarEventArgs e)」事件(因爲x軸縮放復位已被禁用)中單擊y軸縮放復位時重置了兩個軸。現在Y軸工作正常,但X軸不會重置回初始視圖。 – NewBie

+0

我試圖給你一個答案...讓我知道如果你仍然有問題 – digEmAll

回答

3

首先想到的是,您的問題與多個縮放有關。如您所注意到的,默認情況下,縮放重置按鈕(與ZoomReset方法完全相同)不會完全重置縮放,但會恢復之前的視圖狀態,即如果縮放了多次,只返回到先前的縮放視圖。

完全復位變焦,您可以使用此代碼:

while (chart1.ChartAreas[0].AxisX.ScaleView.IsZoomed) 
    chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(); 

while (chart1.ChartAreas[0].AxisY.ScaleView.IsZoomed) 
    chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(); 

相反,如果你喜歡默認的變焦復位行爲,你應該有兩個軸的兩個按鈕,因爲它可能有不同的不同軸的view-statex的數量。

另一種可能性,就是你在變焦輔助軸,像AxisX2AxisY2(不知道,但我認爲這取決於圖表類型),所以你應該重置這些(或者,爲了安全起見,剛剛復位所有軸...)。

+0

感謝您立即作出反應。Y軸應重置爲默認視圖,但X軸應重置爲初始視圖ie.chartArea .AxisX.ScaleView.Zoom(0,10);但是,如果我使用您的建議代碼,X軸將重置爲不帶滾動條的視圖。 – NewBie

0

今天我試着用下面的代碼,它似乎工作正常。這裏for循環用滾動處理X軸,下一個if處理普通的X軸。你可以看看它,讓我知道你的看法嗎?

private void chart1_AxisScrollBarClicked(object sender, ScrollBarEventArgs e) 
{ 
    Boolean blnIsXaxisReset = false; 
    try 
    { 
    // Handle zoom reset button 
    if(e.ButtonType == ScrollBarButtonType.ZoomReset)   
    { 
     // Event is handled, no more processing required 
     e.IsHandled = true; 

     // Reset zoom on Y axis 
     while (chart1.ChartAreas[0].AxisY.ScaleView.IsZoomed) 
     chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(); 

     //Handles Zoom reset on X axis with scroll bar 
     foreach (Series series in chart1.Series) 
     { 
     if (series.YAxisType == AxisType.Secondary) 
     { 
      chart1.ChartAreas[0].AxisX.ScaleView.Zoom(-10, 10); 
      blnIsXaxisReset = true; 
      break; 
     } 
     } 

     //Handles Zoom reset on ordinary X axis 
     if (blnIsXaxisReset == false) 
     { 
     while (chart1.ChartAreas[0].AxisX.ScaleView.IsZoomed) 
      chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(); 
     } 
    } 
    } 
    catch (Exception ex) 
    { 
    BuildException buildException = new BuildException(); 
    buildException.SystemException = ex; 
    buildException.CustomMessage = "Error in zooming the Chart"; 
    ExceptionHandler.HandleException(buildException); 
    } 
} 

感謝您的努力!

3

嘗試使用ZoomReset(0)

private void zeroZoom_Click(object sender, EventArgs e) 
{ 
    chart1.ChartAreas[0].AxisX.ScaleView.ZoomReset(0); 
    chart1.ChartAreas[0].AxisY.ScaleView.ZoomReset(0); 
}