C# 如何删除图表的开始、结束部分
我正在使用c#中的windows窗体应用程序。我已经安装了TeeChart for.net v3的许可版本。我正在尝试删除TeeChart中不需要的部分。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
感谢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;
}