我正在使用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”的功能。
当我点击“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()));
我是这样的 我得到如上图所示,但想要显示鼠标右键单击的等效时间。我得到了一些值这个变量“dtFromTo”,如41322.9876587965“,但我无法将该值转换为时间。请帮助我。
答案 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;
}
我还建议您在ContextMenu
内mainTChart_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;
}