vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
RealtimeChart II 
Autor: Manfred X
Datum: 08.07.12 20:09

Hallo!

In dem Fall würde ich eine Datatable an das ChartControl übergeben,
die eine Zeitstempel-Spalte und Messwertspalten umfasst.
Angehängt wird jeweils eine Zeile an die Datatable.
Hier eine Primitiv-Version:
Imports System.Windows.Forms.DataVisualization
 
Public Class RealTimeChart_II
    Inherits Charting.Chart
 
    'Datengrenzen 
    Private _MinValue As Double = Double.MinValue
    Private _Maxvalue As Double = Double.MaxValue
    Private _MaxPoints As Integer = 10
 
    'Tabelle und Spaltenangaben
    Private _ColumnList As List(Of String)
    Private _TimeColumn As String
    Private _data As DataTable
 
    Const cDataSeries As String = "DataSeries"
    Const cBaseArea As String = "BaseArea"
    Const cTicksPerSecond As Long = CLng(10 ^ 7)  'Anzahl Ticks pro Sekunde
 
    Private Sub SetYAxis()
        With Me.ChartAreas(cBaseArea)
            .AxisY.Minimum = _MinValue : .AxisY.Maximum = _Maxvalue
        End With
    End Sub
 
    Public Property MinValue() As Double
        Set(ByVal value As Double)
            If _Maxvalue < value Then _Maxvalue += Math.Abs(value) * 1.1
            _MinValue = value
            SetYAxis()
        End Set
        Get
            Return _MinValue
        End Get
    End Property
 
    Public Property MaxValue() As Double
        Set(ByVal value As Double)
            If _MinValue > value Then _MinValue -= Math.Abs(value) * 1.1
            _Maxvalue = value
            SetYAxis()
        End Set
        Get
            Return _Maxvalue
        End Get
    End Property
 
    Public Property MaxPoints() As Integer
        Set(ByVal value As Integer)
            If value < 5 Then value = 5
            _MaxPoints = value
        End Set
        Get
            Return _MaxPoints
        End Get
    End Property
 
    Public Sub New(ByVal dt As DataTable, _
        ByVal ChartMinvalue As Double, ByVal ChartMaxValue As Double, _
        ByVal ChartMaxDataPoints As Integer, _
        ByVal ChartTimeColumn As String, ByVal ParamArray DataColumns() As _
        String)
 
        Me.ChartAreas.Add(cBaseArea)
        MinValue = ChartMinvalue : MaxValue = ChartMaxValue
        MaxPoints = ChartMaxDataPoints
        _TimeColumn = ChartTimeColumn
        _ColumnList = New List(Of String)(DataColumns)
        _data = dt
        Init()
    End Sub
 
    Private Sub Init()
        'Achsen einrichten
        With MyBase.ChartAreas(cBaseArea)
          With .AxisX
            .CustomLabels.Clear()
            .MajorGrid.Enabled = False
            .MajorTickMark.TickMarkStyle = Charting.TickMarkStyle.AcrossAxis
            .MajorTickMark.Enabled = True
            .MajorTickMark.Size = 6
            .LabelAutoFitStyle = Charting.LabelAutoFitStyles.DecreaseFont
            .IntervalType = Charting.DateTimeIntervalType.Number
            .Interval = cTicksPerSecond
          End With
          .AxisY.Minimum = _MinValue : .AxisY.Maximum = _Maxvalue
        End With
 
        Dim colors As New List(Of Color)
        With colors
            .Add(Color.Red) : .Add(Color.Green) : .Add(Color.Blue)
        End With
 
        MyBase.Series.Clear() : MyBase.Legends.Clear()
        'Datenserien einrichten
        For i As Integer = 0 To _ColumnList.Count - 1
            Dim sn As String = cDataSeries & "_" & _ColumnList(i)
            MyBase.Series.Add(sn)
            With MyBase.Series(sn)
                .ChartType = Charting.SeriesChartType.Line 
                .BorderWidth = 2
                .Color = colors(i Mod colors.Count)
            End With
        Next i
    End Sub
 
    Public Sub AddRow(ByVal values() As Object)
        _data.Rows.Add(values)
        Dim IndexFirstChartPoint As Integer = _
        Math.Max(0, _data.Rows.Count - _MaxPoints - 1)
        Dim value As Double
 
        For col As Integer = 0 To _ColumnList.Count - 1
            With MyBase.Series(cDataSeries & "_" & _ColumnList(col))
 
              .Points.Clear()
              For rowindex As Integer = _
                  IndexFirstChartPoint To _data.Rows.Count - 1
                 value = CDbl(_data.Rows(rowindex)(_ColumnList(col)))
                 value = Math.Min(value, MyBase.ChartAreas(0).AxisY.Maximum)
                 value = Math.Max(value, MyBase.ChartAreas(0).AxisY.Minimum)
                 .Points.AddXY(CDate(_data.Rows(rowindex)(_TimeColumn)), value)
              Next rowindex
            End With
        Next col
        With MyBase.Series(0)
            MyBase.ChartAreas(0).AxisX.Minimum = .Points(0).XValue
            MyBase.ChartAreas(0).AxisX.Maximum = _
                   .Points(.Points.Count - 1).XValue
        End With
        Me.Invalidate()
    End Sub
 
End Class


Beitrag wurde zuletzt am 08.07.12 um 20:10:49 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Wie kann man Chart Control und DataGridView mit Messwerten a...4.725Bibobernie02.07.12 15:28
Re: Wie kann man Chart Control und DataGridView mit Messwert...4.035Manfred X02.07.12 15:34
Re: Wie kann man Chart Control und DataGridView mit Messwert...3.845Bibobernie02.07.12 15:49
Re: Wie kann man Chart Control und DataGridView mit Messwert...3.929Manfred X02.07.12 15:54
Re: Wie kann man Chart Control und DataGridView mit Messwert...3.914Bibobernie08.07.12 00:27
RealtimeChart II4.079Manfred X08.07.12 20:09
Anwendungsbeispiel3.885Manfred X08.07.12 20:13
Re: Anwendungsbeispiel3.918Bibobernie09.07.12 22:13
Erläuterungen zum Beispiel3.881Manfred X10.07.12 14:20

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel