Traçage du courbe avec VB.NET ou VB6

iblex Messages postés 6 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 12 février 2013 - 3 sept. 2011 à 02:25
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 11 sept. 2011 à 15:40
Bonsoir à tous, j'ai pas mal cherché sur le site mais je n'ai pas trouvé, et impossible de mettre la main sur un tuto expliquant la marche à suivre pour tracer une courbe donc je m'adresse à vous....

Voilà, y a t-il des codes ou Tuto .NET pour Tracer une courbe Mathématique dans un PictureBox par exemple ?

Aide SVP. Merci

7 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
3 sept. 2011 à 03:33
Bonjour,

Tu cherches en VB6 ou .NET, la réponse sera très différente ?
VB6, PictureBox et méthodes Point, Line, ...
VB.NET, evenement Paint, e.Graphics.*

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
iblex Messages postés 6 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 12 février 2013 2
4 sept. 2011 à 04:08
merci Nicolas pour m'avoir averti , et pour le site aussi , bah, je préfére le VB.NET mais beaucoup de gens utilisent le VB6, pour moi, j'utilise les deux et à vous de choisir (si vous me reponder par les deux langage waw je serais très content , en bref, je veux que le code soit simple et que je peux le comprendre facilement et aussi qu'il soit pratique au premier degré (parfois je trouve des codes disant que c'est un journal puis on trouve rien dedant) je vous remerci encore, bonne journée
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
4 sept. 2011 à 05:39
Bonjour,

Regardes déjà ce que tu peux faire avec l'evenement Paint d'une PictureBox, et aussi en utilisant le double buffering et la méthode Invalidate (force l'evenement Paint)

Si c'est du graphique style Excel, il y a pas mal de source en causant.
Si c'est pour faire des graphiques genre Organigramme ou similaire, il y a des systèmes déjà fonctionnels (Microsoft Glee par exemple, pour du Full .NET)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
iblex Messages postés 6 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 12 février 2013 2
4 sept. 2011 à 16:00
bonjour,

mmm trop de mots technique ici, hey hey vous etes un génie pas comme moi je prefere une reponse plus claire
beh je change de question:

j'ai une zone text où je vais ecrire l'équation, un petit joli bouton, quand je clique la dessus la courbe s'affiche (dans une MSChart si dans le VB6 .. ou je sais pas moi c'est quoi son similaire dans le VB.NET), biensur, il y une zone de reglage pour la courbe, par exemple, l'intervalle de tracage, couleur, etc etc..

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 sept. 2011 à 00:20
Bonjour,

Tu peux aussi voir cette bibliothèque : http://sourceforge.net/projects/zedgraph/

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
iblex Messages postés 6 Date d'inscription jeudi 7 avril 2011 Statut Membre Dernière intervention 12 février 2013 2
11 sept. 2011 à 04:29
bonjour, merci c'est bien ce truc là, mais pourquoi tu me donne pas une chose simple à commencer? ça va me prendre beaucoup de temps à comprendre tout ça (ça si j'arrive à le comprendre ) j'ai demandé un simple truc pour comprendre le démarche et les astuces pas un projet complet de cette façon ainsi j'ai trouver des codes sources des programmes qu'on les utilises à l'école et ils sont plus mieux que ceci mais c'est Idem, je veux un truc simple car j'ai pas besoin d'un programme "pret à porter" lool, je veux comprendre le fonctionnement du VB comment il trace les courbes .. avec un rythme de pas à pas merci
Si tu donnes à celui qui a faim un poisson, tu le nourris pour un jour ; si tu lui donnes une canne à pêche, tu le nourris pour toujours... Proverbe chinois
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
11 sept. 2011 à 15:40
Bonjour,

Alors, en cherchant dans mes archives, j'ai retrouvé un controle de graph défilant.

C'est un UserControl, avec un Timer "TRefresh" réglé à 1 seconde.

Code fourni tel quel, à toi de voir ce que tu peux en faire :
'Imports System
'Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Drawing.Drawing2D
'Imports System.Drawing
'Imports System.Data
'Imports System.Text
'Imports System.Windows.Forms
Imports System.Threading

Friend Class CtlGraph


    Public Interface IGrpSerie

        ReadOnly Property Name() As String

        ReadOnly Property MaxValue() As Integer

        ReadOnly Property MinValue() As Integer

        Property MaxNbPoints() As Integer
    End Interface

    ''' <summary>
    ''' Classe pour une série
    ''' </summary>
    ''' <remarks></remarks>
    Public Class ClsSerie
        Implements IGrpSerie



        Private mListPoints As New List(Of Integer)
        Private mMax As Integer
        Private mMin As Integer
        Private mAve As Double
        Private mTotalPoints As Integer

        Private mMaxNbPoints As Integer

        Private mForeColor As Color
        Private mName As String

        Public Delegate Sub EvtChange(ByVal pSerie As ClsSerie)
        Public Event Change As EvtChange

#Region "Constructeurs"
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New()
            mForeColor = Color.Blue
            mName = ""
            mMaxNbPoints = 100
            mTotalPoints = 0
            mMax = 0
            mMin = 0
            mAve = 0
            mListPoints.Clear()
            AddPoint(0)
        End Sub
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' Nom de la série


        ''' <remarks></remarks>
        Public Sub New(ByVal pName As String)
            MyClass.New()
            mName = pName
        End Sub
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' Couleur de la série


        ''' <remarks></remarks>
        Public Sub New(ByVal pForeColor As Color)
            MyClass.New()
            mForeColor = pForeColor
        End Sub
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' Nom de la série


        ''' Couleur de la série


        ''' <remarks></remarks>
        Public Sub New(ByVal pName As String, ByVal pForeColor As Color)
            MyClass.New()
            mForeColor = pForeColor
            mName = pName
        End Sub
#End Region

#Region "Propriétés"
        ''' <summary>
        ''' Retourne ou définit la couleur de la courbe
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property ForeColor() As Color
            Get
                Return mForeColor
            End Get
            Set(ByVal value As Color)
                mForeColor = value
            End Set
        End Property
        ''' <summary>
        ''' etourne ou définit le nombre maximum de points mémorisés
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MaxNbPoints() As Integer Implements IGrpSerie.MaxNbPoints
            Get
                Return mMaxNbPoints
            End Get
            Set(ByVal value As Integer)
                If value >= 20 Then
                    mMaxNbPoints = value
                End If
            End Set
        End Property
        ''' <summary>
        ''' Retourne le nom de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Name() As String Implements IGrpSerie.Name
            Get
                Return mName
            End Get
        End Property
        ''' <summary>
        ''' Retourne la valeur maximale de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MaxValue() As Integer Implements IGrpSerie.MaxValue
            Get
                Return mMax
            End Get
        End Property
        ''' <summary>
        ''' Retourne la valeur minimale de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MinValue() As Integer Implements IGrpSerie.MinValue
            Get
                Return mMin
            End Get
        End Property
        ''' <summary>
        ''' Retourne la valeur moyenne de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MoyValue() As Double
            Get
                Return mAve
            End Get
        End Property
        ''' <summary>
        ''' Retourne la liste des valeurs du tableau
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Values() As Collections.ObjectModel.ReadOnlyCollection(Of Integer)
            Get
                Return New Collections.ObjectModel.ReadOnlyCollection(Of Integer)(mListPoints)
            End Get
        End Property
#End Region

#Region "Méthodes"
        ''' <summary>
        ''' Ajoute un point dans la liste
        ''' </summary>
        ''' Valeur à ajouter


        ''' <remarks></remarks>
        Public Sub AddPoint(ByVal pValue As Integer)
            SyncLock mListPoints
                mListPoints.Add(pValue)
                mTotalPoints += pValue
                If mMax < pValue Then mMax = pValue
                If mMin > pValue Then mMin = pValue
                CalcMoyenne()
            End SyncLock
            CtrlNbPoints()
            RaiseEvent Change(Me)
        End Sub
        ''' <summary>
        ''' Controle le nombre de points mémorisés (avec suppression si besoin)
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub CtrlNbPoints()
            Dim lInt As Integer
            Do While mListPoints.Count > mMaxNbPoints
                SyncLock mListPoints
                    lInt = mListPoints(0)
                    mListPoints.RemoveAt(0)
                    mTotalPoints -= lInt
                End SyncLock

                If mMax lInt Or mMin lInt Then
                    Dim lLst As New List(Of Integer)
                    lLst.AddRange(mListPoints)
                    lLst.Sort()
                    mMax = lLst(lLst.Count - 1)
                    mMin = lLst(0)
                End If

                CalcMoyenne()
            Loop
        End Sub
        ''' <summary>
        ''' Calcule la moyenne des points
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub CalcMoyenne()
            mAve = mTotalPoints / mListPoints.Count
        End Sub
#End Region
    End Class
    ''' <summary>
    ''' Classe pour les groupements de séries
    ''' </summary>
    ''' <remarks></remarks>
    Public Class ClsGroupe
        Implements IGrpSerie


        Private mSeries As New List(Of IGrpSerie)

        Private mName As String

#Region "Constructeurs"
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New()
            mSeries.Clear()
        End Sub
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' Nom de la série


        ''' <remarks></remarks>
        Public Sub New(ByVal pName As String)
            MyClass.New()
            mName = pName
        End Sub
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' Liste des séries


        ''' <remarks></remarks>
        Public Sub New(ByVal pSeries As ClsSerie())
            MyClass.New()
            mSeries.AddRange(pSeries)
        End Sub
        ''' <summary>
        ''' Constructeur de la classe
        ''' </summary>
        ''' Nom de la série


        ''' Liste des séries


        ''' <remarks></remarks>
        Public Sub New(ByVal pName As String, ByVal pSeries As ClsSerie())
            MyClass.New()
            mSeries.AddRange(pSeries)
            mName = pName
        End Sub
#End Region

#Region "Propriétés"
        ''' <summary>
        ''' Retourne la liste des séries
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Series() As List(Of IGrpSerie)
            Get
                Return mSeries
            End Get
        End Property
        ''' <summary>
        ''' Retourne ou définit le nombre maximum de points mémorisés
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Property MaxNbPoints() As Integer Implements IGrpSerie.MaxNbPoints
            Get
                If mSeries.Count > 0 Then
                    Return mSeries(0).MaxNbPoints
                Else
                    Return 0
                End If
            End Get
            Set(ByVal value As Integer)
                If value >= 20 Then
                    For Each lSerie As ClsSerie In mSeries
                        lSerie.MaxNbPoints = value
                    Next
                End If
            End Set
        End Property
        ''' <summary>
        ''' Retourne le nom de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property Name() As String Implements IGrpSerie.Name
            Get
                Return mName
            End Get
        End Property
        ''' <summary>
        ''' Retourne la valeur maximale de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MaxValue() As Integer Implements IGrpSerie.MaxValue
            Get
                Dim lInt As Integer
                If mSeries.Count > 0 Then
                    lInt = mSeries(0).MaxValue
                    For Each lSerie As ClsSerie In mSeries
                        If lInt < lSerie.MaxValue Then
                            lInt = lSerie.MaxValue
                        End If
                    Next
                Else
                    lInt = 0
                End If
                Return lInt
            End Get
        End Property
        ''' <summary>
        ''' Retourne la valeur minimale de la série
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public ReadOnly Property MinValue() As Integer Implements IGrpSerie.MinValue
            Get
                Dim lInt As Integer
                If mSeries.Count > 0 Then
                    lInt = mSeries(0).MaxValue
                    For Each lSerie As ClsSerie In mSeries
                        If lInt > lSerie.MinValue Then
                            lInt = lSerie.MinValue
                        End If
                    Next
                Else
                    lInt = 0
                End If
                Return lInt
            End Get
        End Property
#End Region
    End Class

    Private mXMove As Integer = 0
    Private mGridSize As Integer = 12
    Private mValues As List(Of IGrpSerie)
    Private mChanged As Boolean = True
    Private mStep As Integer = 2

    Public Event RefreshGraphic(ByVal pSender As CtlGraph)

#Region "Propriétés"
    ''' <summary>
    ''' Retourne ou définit la vitesse de rafraichissement
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Category("Paramètres"), DefaultValue(1000), Description("Vitesse de rafraichissement")> _
    Public Property Interval() As Integer
        Get
            Return TRefresh.Interval
        End Get
        Set(ByVal value As Integer)
            TRefresh.Interval = value
            Me.Invalidate()
        End Set
    End Property
    ''' <summary>
    ''' Retourne ou définit la taille de la grille
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Category("Paramètres"), DefaultValue(12), Description("Taille de la grille")> _
    Public Property GridSize() As Integer
        Get
            Return mGridSize
        End Get
        Set(ByVal value As Integer)
            If value > 0 Then
                mGridSize = value
                Me.Invalidate()
            End If
        End Set
    End Property
    ''' <summary>
    ''' Retourne un booléen indiquant si le controle défile
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    
 _
    Public Property Activate() As Boolean
        Get
            Return TRefresh.Enabled
        End Get
        Set(ByVal pValue As Boolean)
            TRefresh.Enabled = pValue
        End Set
    End Property
    ''' <summary>
    ''' Pas de progression du défilement (en pixel)
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    <Category("Paramètres"), DefaultValue(2), Description("Pas de progression en pixel")> _
    Public Property [Step]() As Integer
        Get
            Return mStep
        End Get
        Set(ByVal value As Integer)
            If value >1 Then mStep value
            RefreshScreenhSize()
        End Set
    End Property

    <Category("Paramètres"), Description("Couleur de fond")> _
    Public Overrides Property BackColor() As System.Drawing.Color
        Get
            Return MyBase.BackColor
        End Get
        Set(ByVal value As System.Drawing.Color)
            MyBase.BackColor = value
        End Set
    End Property

    <Category("Paramètres"), DefaultValue(100), Description("Couleur de la grille")> _
    Public Overrides Property ForeColor() As System.Drawing.Color
        Get
            Return MyBase.ForeColor
        End Get
        Set(ByVal value As System.Drawing.Color)
            MyBase.ForeColor = value
        End Set
    End Property

    '<Category("Paramètres"), DefaultValue(100), Description("Valeur maximale possible")> _
    'Public Property MaxValue() As Integer
    '    Get
    '        Return _maxValue
    '    End Get
    '    Set(ByVal value As Integer)
    '        If _maxValue > 1 Then
    '            _maxValue = value
    '            Me.Invalidate()
    '        End If
    '    End Set
    'End Property
    '''' <summary>
    '''' Retourne ou définit le texte à afficher
    '''' </summary>
    '''' <value></value>
    '''' <returns></returns>
    '''' <remarks></remarks>
    '<Category("Paramètres"), DefaultValue(""), Description("Le texte à afficher")> _
    'Public Overloads Overrides Property Text() As String
    '    Get
    '        Return MyBase.Text
    '    End Get
    '    Set(ByVal value As String)
    '        MyBase.Text = value
    '        Me.Invalidate()
    '    End Set
    'End Property

    '<Category("Paramètres"), DefaultValue(False), Description("Indique si la valeur est exprimé en pourcentage ou si l'on utilise la forme valeur/valeur_max")> _
    'Public Property UsePourcentage() As Boolean
    '    Get
    '        Return _usePourcentage
    '    End Get
    '    Set(ByVal value As Boolean)
    '        _usePourcentage = value
    '        Me.Invalidate()
    '    End Set
    'End Property
#End Region

    ''' <summary>
    ''' Constructeur de la classe
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Ini()
    End Sub


    Public Sub AddSerie(ByVal pSerie As IGrpSerie)
        mValues.Add(pSerie)
        pSerie.MaxNbPoints = Me.Width \ mStep
    End Sub




    Private Sub Ini()
        Me.SetStyle(ControlStyles.ResizeRedraw, True)
        Me.SetStyle(ControlStyles.UserPaint, True)
        Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
        Me.SetStyle(ControlStyles.DoubleBuffer, True)
        InitializeComponent()
        mValues = New List(Of IGrpSerie)()
    End Sub

    Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
        MyBase.OnResize(e)
        RefreshScreenhSize()
    End Sub

    Private Sub RefreshScreenhSize()
        If Me.Width \ mStep < 40 Then Exit Sub
        For Each lValue As IGrpSerie In mValues
            lValue.MaxNbPoints = Me.Width \ mStep + 20
        Next
    End Sub

    Protected Overloads Overrides Sub OnPaint(ByVal e As PaintEventArgs)
        MyBase.OnPaint(e)
        Dim lGridPen As New Pen(Me.ForeColor)
        For i As Integer = 0 To CInt((Me.Height / mGridSize) + 1)
            e.Graphics.DrawLine(lGridPen, 0, Height - i * mGridSize, Me.Width, Height - i * mGridSize)
            System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
        Next
        For i As Integer = 0 To CInt((Me.Width / mGridSize) + 2)
            e.Graphics.DrawLine(lGridPen, i * mGridSize - mXMove, 0, i * mGridSize - mXMove, Me.Height)
            System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
        Next

        SyncLock mValues
            For Each lSerie As IGrpSerie In mValues
                DrawGroupe(e.Graphics, lSerie, lSerie.MinValue, lSerie.MaxValue)
            Next
        End SyncLock
        ControlPaint.DrawBorder3D(e.Graphics, 0, 0, Me.Width, Me.Height, Border3DStyle.Sunken)
    End Sub

    Private Sub DrawGroupe(ByVal pGraphic As Graphics, ByVal pSerie As IGrpSerie, ByVal pMin As Integer, ByVal pMax As Integer)
        If TypeOf pSerie Is ClsSerie Then
            DrawSerie(pGraphic, DirectCast(pSerie, ClsSerie), pMin, pMax)
        ElseIf TypeOf pSerie Is ClsGroupe Then
            For Each lSerie As IGrpSerie In DirectCast(pSerie, ClsGroupe).Series
                DrawGroupe(pGraphic, lSerie, pMin, pMax)
            Next
        End If
    End Sub

    Private Sub DrawSerie(ByVal pGraphic As Graphics, ByVal pSerie As ClsSerie, ByVal pMin As Integer, ByVal pMax As Integer)
        Dim pen As Pen
        Dim lValues As List(Of Integer)
        Dim lOffsetY As Double
        Dim lRatio As Double
        Dim lOffsetX As Integer
        Dim lPrecPoint As PointF
        Dim lNextPoint As PointF

        pen = New Pen(pSerie.ForeColor, 1.0F)
        lValues = New List(Of Integer)

        lValues.AddRange(pSerie.Values)
        pen.DashStyle = DashStyle.Solid

        If pMin pMax Or lValues.Count 0 Then
            Exit Sub
        End If

        lOffsetX = Width - lValues.Count * mStep
        lOffsetY = Height '+ pMin
        lRatio = Height / (pMax - pMin)

        For i As Integer = 0 To lValues.Count - 1
            lPrecPoint = lNextPoint

            lNextPoint = New PointF(lOffsetX + i * mStep, CSng(lOffsetY - (lValues(i) - pMin) * lRatio))

            If i > 0 Then
                pGraphic.DrawLine(pen, lPrecPoint, lNextPoint)
            End If
        Next
    End Sub

    Protected Overloads Overrides Sub OnPaintBackground(ByVal pevent As PaintEventArgs)
        MyBase.OnPaintBackground(pevent)
        Dim bounds As New Rectangle(0, 0, Me.Width, Me.Height)
        pevent.Graphics.FillRectangle(New SolidBrush(BackColor), bounds)
    End Sub

    Private Sub TRefresh_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TRefresh.Tick
        RaiseEvent RefreshGraphic(Me)
        mXMove = (mXMove + mStep) Mod (mGridSize * mStep)
        Me.Invalidate()
    End Sub
End Class


Tu peux mettre plusieurs séries et même des groupes de séries.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
Rejoignez-nous