vb.net chart图表使用技巧之一

原创 2012年04月27日 11:17:06

很多朋友再为使用什么样曲线来显示数据发愁,当然有MONEY的朋友除外。其实微软已经给我们提供一个很强大免费的控件,那就是chart ,当然这个控件只能再vs.2008以上的版本才能使用。不过很少有人介绍怎么使用。于是本人花了一天时间,认真进行学习。

详细的程序如下,中间我已经作了很多说明,呵呵

    Private AddDataRunner As Thread
    Private Rand As New Random()
    Public Delegate Sub AddDataDelegate()  '定义一个线程委托
    Public AddDataDel As AddDataDelegate
    Private minValue, maxValue As DateTime

    Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        '定义一个新的线程进行循环执行
        Dim addDataThreadStart As New ThreadStart(AddressOf AddDataThreadLoop)
        '把线程交给公共线程来管理
        AddDataRunner = New Thread(addDataThreadStart)
        '委托交付管理
        addDataDel = New AddDataDelegate(AddressOf AddData)

    End Sub
   
    ''' <summary>
    ''' 主线程每秒循环一次,并通过委托,将数据发给你 CHART
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub AddDataThreadLoop()
        While True
            chart1.Invoke(addDataDel)

            Thread.Sleep(1000)
        End While
    End Sub 'AddDataThreadLoop

    Public Sub AddData()
        Dim timeStamp As DateTime = DateTime.Now

        Dim ptA As ChartArea
        For Each ptA In Chart1.ChartAreas
            Dim ptSeries As Series
            '对每series进行数据扫描
            For Each ptSeries In Chart1.Series
                Dim k As Single
                k = Rand.Next(10, 50)
                AddNewPoint(timeStamp, k, ptSeries)
            Next ptSeries
        Next
    End Sub 'AddData

  
    ''' <summary>
    ''' x轴为时间,y轴为数据,并根据随机数据进行填写;
    ''' </summary>
    ''' <param name="timeStamp"></param>
    ''' <param name="ptSeries"></param>
    ''' <remarks></remarks>
    Public Sub AddNewPoint(timeStamp As DateTime, ByVal pValue As Single, ptSeries As System.Windows.Forms.DataVisualization.Charting.Series)
        Dim newVal As Double = 0

        If ptSeries.Points.Count > 0 Then
            newVal = ptSeries.Points((ptSeries.Points.Count - 1)).YValues(0) + (Rand.NextDouble() * 2 - 1)
        End If

        If newVal < 0 Then
            newVal = 0
        End If

        ' Add new data point to its series.
        ptSeries.Points.AddXY(timeStamp.ToOADate, pValue)

        ' remove all points from the source series older than 1.5 minutes.
        Dim removeBefore As Double = timeStamp.AddSeconds((CDbl(90) * -1)).ToOADate()
        'remove oldest values to maintain a constant number of data points
        While ptSeries.Points(0).XValue < removeBefore
            ptSeries.Points.RemoveAt(0)
        End While

        Dim ptA As ChartArea
        For Each ptA In Chart1.ChartAreas
            ptA.AxisX.Minimum = ptSeries.Points(0).XValue
            ptA.AxisX.Maximum = DateTime.FromOADate(ptSeries.Points(0).XValue).AddMinutes(2).ToOADate()
        Next
      
        Chart1.Invalidate()
    End Sub

    ' Clean up any resources being used.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If (addDataRunner.ThreadState And ThreadState.Suspended) = ThreadState.Suspended Then
            addDataRunner.Resume()
        End If
        addDataRunner.Abort()

        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub 'Dispose

  

    Private Sub startTrending_Click(sender As System.Object, e As System.EventArgs) Handles startTrending.Click
        ' 开始按钮状态
        startTrending.Enabled = False
        ' 停止按钮状态
        stopTrending.Enabled = True

        ' Predefine the viewing area of the chart
        minValue = DateTime.Now
        '2分钟预览区域
        maxValue = minValue.AddSeconds(120)

        Chart1.ChartAreas(0).AxisX.Minimum = minValue.ToOADate()
        Chart1.ChartAreas(0).AxisX.Maximum = maxValue.ToOADate()

        Chart1.ChartAreas(1).AxisX.Minimum = minValue.ToOADate()
        Chart1.ChartAreas(1).AxisX.Maximum = maxValue.ToOADate()

        ' Reset number of series in the chart.
        Chart1.Series.Clear()

        ' create a line chart series
        Dim newSeries1 As New Series("Series1")
        With newSeries1
            .LegendText = "曲线一"
            .ChartType = SeriesChartType.Line
            .BorderWidth = 1
            .Color = Color.Red
            .XValueType = ChartValueType.Time
        End With
        newSeries1.ChartArea = "ChartArea1"

        Dim newSeries2 As New Series("Series2")
        With newSeries2
            .LegendText = "曲线二"
            .ChartType = SeriesChartType.Line
            .BorderWidth = 1
            .Color = Color.Blue
            .XValueType = ChartValueType.Time
        End With
        newSeries2.ChartArea = "ChartArea2"

        Chart1.Series.Add(newSeries1)
        Chart1.Series.Add(newSeries2)

        ' start worker threads.
        If addDataRunner.IsAlive = True Then
            addDataRunner.Resume()
        Else
            addDataRunner.Start()
        End If
    End Sub

    Private Sub stopTrending_Click_1(sender As System.Object, e As System.EventArgs) Handles stopTrending.Click
        If addDataRunner.IsAlive = True Then
            addDataRunner.Resume()
        End If

        ' Enable all controls on the form
        startTrending.Enabled = True
        ' and only Disable the Stop button
        stopTrending.Enabled = False
    End Sub


 

VB.net chart 控件使用

1. import namespace     Imports System.Windows.Forms.DataVisualization.Charting     找个namespace包含用于图...
  • weihao55555
  • weihao55555
  • 2017年04月19日 22:42
  • 1349

使用VB.NET写的CHART控件使用

  • 2013年06月18日 23:27
  • 78KB
  • 下载

VS2005上VB.NET开发Chart FX控件

开发环境 VS2005,.NET Framework 版本 .NET Framework 2.0,ChartFX版本 7.0.2664.18481前几天的开发演习中用到了ChartFX控件,现将Cha...
  • tyouvivi
  • tyouvivi
  • 2007年06月06日 14:46
  • 5485

用VB.NET和DUNDAS CHART控件实现动态曲线

  • 2009年08月08日 17:56
  • 55KB
  • 下载

VB mschart控件的使用

VB mschart控件的使用 图表控件的类型 VtChChartType3dBar 0 3维条形图 VtChChartType2dBar 1 2维条形图 VtChChartType3...
  • liang890319
  • liang890319
  • 2012年01月10日 20:45
  • 12099

Chart控件之曲线图表

1.打开vs2010新建windows窗体项目,在数据工具栏拖入Chart控件,选中控件点击属性Servies找到ChartType并且选择Spline.即为曲线图表; 找到MarkerStyle可...
  • bysjlwdx
  • bysjlwdx
  • 2014年04月22日 09:43
  • 927

VB.net实现的曲线图、饼图源码

  • 2008年02月14日 12:49
  • 32KB
  • 下载

vb.net保存图像操作方法

'浏览图像文件 Dim MyImage As Image Private Sub button2_Click(ByVal sender As System.Object, ByVal...
  • wl58796351
  • wl58796351
  • 2012年02月24日 21:54
  • 2359

.NET chart 毫秒级坐标轴

微软的chart控件,功能强大,也非常方便好用。 这里说一下,如何用时间做X轴,坐标时间间隔可以精确到ms。 直接上代码(在VS2013 上通过): 在form1中拖入chart控件,name为cha...
  • flyingqd
  • flyingqd
  • 2016年09月06日 17:22
  • 984

关于ASP.net Chart- Column图改变Points上标Label文字样式

首先一样先拉入一张Chart 并且设定为Column图     设定一些Series 其中我建立的范例LegendText 为 能力、智力、速度三种     ...
  • zhanghuaiyu_35
  • zhanghuaiyu_35
  • 2014年05月24日 11:23
  • 2085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vb.net chart图表使用技巧之一
举报原因:
原因补充:

(最多只允许输入30个字)