2013-02-22 62 views
0

我正在使用c#中的Windows窗體應用程序。我已經安裝了TeeChart for.net v3的行貨版本。我正在嘗試刪除TeeChart的一些不需要的部分。
感謝stackoverflow網站的用戶,他們幫助我創建了TeeChart上的鼠標點擊彈出窗口。現在我想爲該彈出式點擊實施一些功能。
使用下面的代碼,我可以創建鼠標右鍵單擊彈出。如何刪除TeeChart的開始,結束部分

double m_dblTempVolFromTo = 0; 
double dtFromTo = 0; 
private void mainTChart_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (!checkBoxIsTime.Checked && e.Button == MouseButtons.Right) 
    { 
     m_dblTempVolFromTo = mainTChart.Series[0].XScreenToValue(e.X); 
     mainTChart.ContextMenu = new ContextMenu(); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + m_dblTempVolFromTo + " cc")); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + m_dblTempVolFromTo + " cc")); 
     mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
     mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 

    } 
    else if (checkBoxIsTime.Checked && e.Button == MouseButtons.Right) 
    { 
     DateTime dt; 
     dtFromTo = mainTChart.Series[0].XScreenToValue(e.X); 
     DateTime.TryParse(dtFromTo.ToString(), out dt); 
     mainTChart.ContextMenu = new ContextMenu(); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + dt.TimeOfDay.ToString())); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + dt.TimeOfDay.ToString())); 
     mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
     mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 
    } 

} 

上面的代碼創建如下所示的彈出窗口。 Image
我想實現「For 7.6 cc」和「To 7.6 cc」的功能。 當我點擊「To 7.6 cc」時,圖表應該從「0到7.6」的比例尺中刪除,其餘部分應該在那裏。同樣適用於「從145 cc」點擊,它必須從「145到150(結束標尺)」中刪除圖表。
點擊「To」正在使用刪除圖表的起始部分,然後點擊「From」正在使用刪除圖表的結束部分。
我已經嘗試過這樣但我不能得到我想要的東西。

void From_Click(object sender, EventArgs e) 
{ 
    if (!checkBoxIsTime.Checked) 
    { 
     var destBitmap = mainTChart.Export.Image.Bitmap.Clone(new Rect(0, 0, 100, 200), sourceBitmap.PixelFormat); 
    } 
} 

void To_Click(object sender, EventArgs e) 
{ 

} 

即使我試圖與該代碼也

void mainTChart_GetLegendRect(object sender, mainTChart.GetLegendRectEventArgs e) 
{ 
    Rectangle cropRect = e.Rectangle; 
    Bitmap legendImg = new Bitmap(cropRect.Width, cropRect.Height); 

    using (Graphics g = Graphics.FromImage(legendImg)) 
    { 
     g.DrawImage(chartBmp, new Rectangle(0, 0, mainTChart.Width, mainTChart.Height), 
       cropRect, 
       GraphicsUnit.Pixel); 
    } 
} 

沒有什麼工作對我來說。任何人都可以幫助我完成這項任務。

在此先感謝。

編輯 當我有X軸作爲時間,那麼我不能得到顯示時間點擊鼠標。我曾嘗試的代碼如下所示

DateTime dt; 
     dtFromTo = mainTChart.Series[0].XScreenToValue(e.X); 
     DateTime.TryParse(dtFromTo.ToString(), out dt); 
     mainTChart.ContextMenu = new ContextMenu(); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + dt.TimeOfDay.ToString())); 
     mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + dt.TimeOfDay.ToString())); 

我越來越喜歡這個 enter image description here 如在上面的圖片,但要顯示在鼠標等效時間右鍵點擊我得到。我從41322.9876587965這個變量獲得了一些值「dtFromTo」,但我無法將這個值轉換爲時間值,請幫助我。

回答

2

已知要切割的值從/到,您可以設置底軸最小和最大的特性。

當我單擊「到7.6毫升」,則該圖應從「0至7.6」 規模和剩餘部分應該在那裏

這將消除成爲:

mainTChart.Axes.Bottom.AutomaticMinimum = false; 
mainTChart.Axes.Bottom.Minimum = 7.6; 

同樣適用於「從145 cc」點擊,它必須將 圖表從「145到150(結束標尺)」刪除。

這將完成設置最大:

mainTChart.Axes.Bottom.AutomaticMaximum = false; 
mainTChart.Axes.Bottom.Maximum = 145; 

所以我覺得這應該給招:

void From_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMaximum = false; 
     mainTChart.Axes.Bottom.Maximum = m_dblTempVolFromTo; 
    } 

    void To_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMinimum = false; 
     mainTChart.Axes.Bottom.Minimum = m_dblTempVolFromTo; 
    } 

我也建議你創建的mainTChart_MouseDown事件ContextMenu因爲在mainTChart_MouseUp事件中創建它太晚了,顯示的ContextMenu將不會顯示更新的版本。

編輯:

對於日期時間XValues,錯線,這是一個:

DateTime.TryParse(dtFromTo.ToString(), out dt); 

這似乎爲我在這裏做工精細的全碼:

private void InitializeChart() 
    { 
     mainTChart.Aspect.View3D = false; 

     Line line1 = new Line(mainTChart.Chart); 
     line1.XValues.DateTime = true; 
     line1.FillSampleValues(); 
     mainTChart.Axes.Bottom.Labels.DateTimeFormat = "hh:mm"; 

     mainTChart.MouseDown += new MouseEventHandler(mainTChart_MouseDown); 
    } 

    double m_dblTempVolFromTo = 0; 
    double dtFromTo = 0; 

    void mainTChart_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (!mainTChart.Axes.Bottom.IsDateTime && e.Button == MouseButtons.Right) 
     { 
      m_dblTempVolFromTo = mainTChart[0].XScreenToValue(e.X); 
      mainTChart.ContextMenu = new ContextMenu(); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + m_dblTempVolFromTo + " cc")); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + m_dblTempVolFromTo + " cc")); 
      mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
      mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 

     } 
     else if (e.Button == MouseButtons.Right) 
     { 
      dtFromTo = mainTChart[0].XScreenToValue(e.X); 
      String stFromTo = mainTChart.Axes.Bottom.Labels.LabelValue(dtFromTo); 
      mainTChart.ContextMenu = new ContextMenu(); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("From " + stFromTo)); 
      mainTChart.ContextMenu.MenuItems.Add(new MenuItem("To " + stFromTo)); 
      mainTChart.ContextMenu.MenuItems[0].Click += new EventHandler(From_Click); 
      mainTChart.ContextMenu.MenuItems[1].Click += new EventHandler(To_Click); 
     } 
    } 

    void From_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMaximum = false; 
     if (!mainTChart.Axes.Bottom.IsDateTime) 
      mainTChart.Axes.Bottom.Maximum = m_dblTempVolFromTo; 
     else 
      mainTChart.Axes.Bottom.Maximum = dtFromTo; 
    } 

    void To_Click(object sender, EventArgs e) 
    { 
     mainTChart.Axes.Bottom.AutomaticMinimum = false; 
     if (!mainTChart.Axes.Bottom.IsDateTime) 
      mainTChart.Axes.Bottom.Minimum = m_dblTempVolFromTo; 
     else 
      mainTChart.Axes.Bottom.Minimum = dtFromTo; 
    } 
+0

非常感謝您的幫助,它完美的工作,但我有一個更多的小疑問,我添加了一個更多的功能彈出是「重置」。當我點擊「重置」時,它必須執行撤消操作。你能幫我嗎? – reddy 2013-02-22 13:06:28

+0

你可以給一些想法如何實現「重置」功能。 – reddy 2013-02-22 13:47:59

+0

感謝您的回答,現在我已根據您的想法實施了「重置」。非常感謝 – reddy 2013-02-23 14:31:00

相關問題