如何删除TeeChart的一部分开始,结束

时间:2013-02-22 08:41:36

标签: c# winforms teechart

我正在使用c#中的windows表单应用程序。我已经安装了TeeChart for .NET v3的许可版本。我试图删除一些不需要的TeeChart部分 感谢stackoverflow网站用户,他们帮我在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(比例结束)”中删除图表。
单击“收件人”用于删除图表的起始部分,然后单击“从”用于删除图表的结尾部分 我试过这样但是我无法得到我想要的东西。

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 我得到如上图所示,但想要显示鼠标右键单击的等效时间。我得到了一些值这个变量“dtFromTo”,如41322.9876587965“,但我无法将该值转换为时间。请帮助我。

1 个答案:

答案 0 :(得分:2)

已知要“剪切”的值从/到,您只需设置底轴最小和最大属性。

  

当我点击“To 7.6 cc”时,图表应从“0到7.6”中删除   比例和剩余部分应该在那里

这将是:

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

同样适用于“From 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;
    } 

我还建议您在ContextMenumainTChart_MouseDown事件中创建mainTChart_MouseUp,因为在mainTChart_MouseUp事件中创建它已太晚了,显示的ContextMenu赢了没有显示更新版本。

修改

对于DateTime 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;
    }