2013-02-22 56 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

相关问题