我详尽地使用了搜索,但未能找到令人满意的解决方案。
我使用图表(datavisualization.charting.chart)编程了数据可视化。此图表显示稳定变化,因为它显示了某种模拟结果。 我想在图表上绘制一条线(取决于鼠标位置),以显示上下文敏感信息。
因此,我尝试了两个实现,两者都没有完全按照我的意愿工作:
在MouseMove-事件
上调用plotLinegGraph是使用底层图形创建的:chartCreateGraphics();
protected void plotLine(object sender, System.EventArgs e)
{
if (this.chart.Series.Count > 0) //ensure that the chart shows data
{
plotChart(); // this plots the underlying chart
penGraph = new Pen(Color.Black);
Point point1 = new Point(Form1.MousePosition.X - chart.Location.X, 0);
Point point2 = new Point(Form1.MousePosition.X - chart.Location.X,
chart.Location.Y + chart.Size.Height);
gGraph.DrawLine(penGraph, point1, point2);
penGraph.Dispose();
}
}
此处,线条在每次绘制后立即消失,但只要不移动鼠标就会保留。
protected void plotLine(object sender, System.EventArgs e)
{
penGraph = new Pen(Color.Black);
Point point1 = new Point(Form1.MousePosition.X - chart.Location.X, 0);
Point point2 = new Point(Form1.MousePosition.X - chart.Location.X,
chart.Location.Y + chart.Size.Height);
gGraph.DrawLine(penGraph, point1, point2);
penGraph.Dispose();
}
此处,只要图表未按新图绘制,所有绘制的线条都会保留在图形表面中。 (仅保留最后一行以指示鼠标位置)
有人能帮助我吗?
答案 0 :(得分:1)
您应该在OnPaint事件中绘图。您正在规避更新模型,并且正在看到这样做的影响。当然,你在MouseMove中做了一些绘图,但是当Paint事件触发时,它将被简单地删除。
首先将代码放在OnPaint中。在鼠标移动时,只需记录您需要的任何数据(即鼠标位置),然后在图表上调用Invalidate()。当你这样做时,将调用Paint事件并触发你的绘图代码。
经验法则;除了Paint事件之外,永远不会从任何地方画画。