1

有什么办法可以让这项工作更快?

这是我在 vb.net 中的示例代码。这会在鼠标位置的图表上添加一个点,但速度很慢。

    Private Sub Chart2_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart2.MouseMove
    Dim coord() As Double = GetAxisValuesFromMouse(e.X, e.Y)

    Dim test As Series
    Try
        Chart2.Series.RemoveAt(1)
    Catch ex As Exception
    End Try

    Dim pt As New DataPoint
    pt.XValue = coord(0)
    pt.YValues(0) = coord(1)

    test = New Series
    Chart2.Series.Add(test)
    Chart2.Series(test.Name).ChartType = SeriesChartType.Point
    Chart2.Series(test.Name).Points.Add(pt)

End Sub

函数返回鼠标位置 x 和 y 轴的坐标。

Private Function GetAxisValuesFromMouse(x As Integer, y As Integer) As Double()
    Dim coord(1) As Double
    Dim chartArea = Chart2.ChartAreas(0)
    coord(0) = chartArea.AxisX.PixelPositionToValue(x)
    coord(1) = chartArea.AxisY.PixelPositionToValue(y)
    Return coord
End Function

结果:

在此处输入图像描述

4

2 回答 2

1

在您的Chart2窗口中,必须有一种方法可以Invalidate使用剪切矩形执行。

我使用的另一种方法不是直接绘制到窗口,而是绘制到内存位图,然后我将其 BLT 到可见窗口。这实际上可以更快,因为在绘制位图时,它不必放慢速度来进行剪切。这也给人一种(假的)速度印象,因为我看不到正在重绘的绿线(即使它们是)。

还有一种方法是,在绘制鼠标所在的点时,将其异或到屏幕上。然后当我移动它时,在旧位置对它进行异或(以擦除它),然后在新位置对它进行异或。这样,我就不会重新绘制所有那些没有移动的小绿线。

还有一种方法是:如果图中有数千条小线,其中一些必须是长度为零的像素。即使它们对图像没有任何贡献,它们也需要时间来绘制,因此可以省略它们。

于 2013-08-25T00:54:07.630 回答
-1

使用Flexcell 网格控件 它是极好的控件,它提供了 datagrid 控件提供的所有功能,而且 FlexCell 是一个灵活且易于使用的网格控件。...它提供了全面的功能,例如打印、打印预览、图表,... 使用 FlexCell Grid Control,您可以在您的应用程序中创建专业的用户界面和报表。...您使用 Visual Basic、Visual FoxPro、Visual C++、VB.net、C# 等编写的应用程序。

于 2014-01-23T09:57:49.140 回答