C# 如何删除图表的开始、结束部分

C# 如何删除图表的开始、结束部分,c#,winforms,teechart,C#,Winforms,Teechart,我正在使用c#中的windows窗体应用程序。我已经安装了TeeChart for.net v3的许可版本。我正在尝试删除TeeChart中不需要的部分。 感谢stackoverflow网站的用户,他们帮助我在TeeChart上创建了一个鼠标点击弹出窗口。现在我想为弹出式单击实现一些功能。 使用下面的代码,我能够创建鼠标右键单击弹出窗口 double m_dblTempVolFromTo = 0; double dtFromTo = 0; private void mainTChart_Mous

我正在使用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);
    }

}
上面的代码正在创建弹出窗口,如下所示。
我正在尝试实现“for 7.6 cc”和“to 7.6 cc”的功能。 当我点击“到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轴作为时间时,我无法通过单击鼠标获得显示时间。我尝试的代码如下所示

我越来越像这样了
我得到的结果如上图所示,但我想在鼠标右键单击时显示等效时间。我正在获取变量“dtFromTo”的一些值,如41322.9876587965,但我无法将该值转换为时间。请帮助我。

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

当我单击“至7.6 cc”时,图表应从“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\u MouseDown
事件中创建
ContextMenu
,而不是
mainTChart\u MouseUp
,因为在
mainTChart\u 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;
    } 

非常感谢你的帮助,它工作得很好,但我还有一个小疑问,我在弹出窗口中添加了一个功能,即“重置”。当我单击“重置”时,它必须执行撤消操作。你能帮我一下吗?你能给我一些如何实现“重置”功能的想法吗?谢谢你的回答,现在我已经实现了“重置”“也是基于你的想法。非常感谢您可以为重置添加第三个
菜单项
(单击重置),并将底部轴
AutomaticMinimum
AutomaticMaximum
属性设置为true。感谢您的回复,我有个小问题,很抱歉再次询问,我不想将此问题作为另一个问题发布。我请求你,请帮我。在上面的代码中,我有X轴,一个是体积,另一个是时间。我使用这行“m_dblTempVolFromTo=mainTChart.Series[0].XScreenToValue(e.X);”获取X轴的值,但当我有时间作为X轴时,我尝试了相同的过程,但时间始终显示为“00:00:00”。我是一些使用上述代码的值,但我不能及时显示该值。对此我有任何想法。
    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;
    }