1. #21
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    Bonjour,

    Pour ce genre de problème, il faut y aller par étapes. Tu sais ajouter plusieurs séries à un chart, c'est un bon début. Ensuite, pour le problème de Drag & Drop, je te conseille de commencer par manipuler une seule série. Une fois que tu y sera parvenu tu pourras adapter ton code pour en manipuler plusieurs. (mieux vaut prendre les difficultés une par une pour ne pas complexifier un problème qui peut être traité simplement)

    Concernant le Drag & Drop, en théorie c'est simple :
    Lorsque la souris de l'utilisateur "accroche" un point sur ton diagramme, tu recherches si un point de ta série est dans la zone (à définir). Si oui, tu change sa position en fonction de la position de la souris sur le diagramme et ce, tant que l'utilisateur est "draggué" (click gauche de la souris enfoncé).

    Il faut un peut de code pour mettre ça en pratique, mais une fois que c'est fait, tu ne devrais plus avoir trop de soucis pour adapter le code à l'utilisation de plusieurs séries.

  2. #22
    Membre à l'essai
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : janvier 2013
    Messages : 165
    Points : 17
    Points
    17

    Par défaut

    j'arrive à manipuler 2 séries sur la base du 1er exemple de Mabrouki, sauf que quand je dragg un point de la série A ou B le txtIndex reste le même pour toutes les séries. D'ou mon soucis de déterminer à quel point appartient la série

    Je pense être proche du but final si j'arrive à faire les distinctions ou alors de pouvoir afficher la suite des coordonnées dans la listbox en index 10 à 19 pour la série B

    En résumé dans mon exemple ci-dessous, lorsque je dragg un point de la série A ou B, les listbox sont égales et ne différencie pas les séries. Du coup je ne peux pas dispatcher les valeurs dans les bons textbox de la série draggé :


    Nom : graph2.jpg
Affichages : 105
Taille : 121,0 Ko

  3. #23
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    En théorie, à partir du moment où tu drag un point, tu sais sur quel série il se situe, non? De là tu as juste à récupérer ses coordonnées finales lorsque la souris est relachée.

  4. #24
    Membre à l'essai
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : janvier 2013
    Messages : 165
    Points : 17
    Points
    17

    Par défaut

    Non, c'est ça le soucis.

  5. #25
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    Comment tu réalises le Drag & Drop? Car pour manipuler un point, il faut que tu connaisses la série qui y est rattaché.

  6. #26
    Membre à l'essai
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : janvier 2013
    Messages : 165
    Points : 17
    Points
    17

    Par défaut

    Citation Envoyé par ZenZiTone Voir le message
    Comment tu réalises le Drag & Drop? Car pour manipuler un point, il faut que tu connaisses la série qui y est rattaché.
    Voici le projet à l'état actuel sur la base de Mabrouki, tu verras concrétement la chose :

    https://www.petit-fichier.fr/2017/05/12/dragg-test/

  7. #27
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    Désolé, mais je n'ai pas le temps de parcourir tout le code

    J'ai néanmoins reparcouru le début du poste. Il faudrait qu'au levé de la souris tu récupères les coordonnées de sont sélectedDataPoint. Pour savoir à quelle série il appartient, tu parcours tes séries pour savoir laquelle contient ce fameux datapoint, non?

    (le timer tu peux le virer. Tu ne modifiera les points qui 1 par 1. Donc tu as nullement besoin de récupérer toutes les valeurs à chaque fois)

  8. #28
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    mars 2012
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : mars 2012
    Messages : 556
    Points : 329
    Points
    329

    Par défaut

    Salut, je ne vais pas pouvoir t'aider beaucoup mais renseigne toi sur la méthode Hittest du control Chart.

    Déjà avant d’appeler "PixelPositionToValue" il faut absolument faire un Hittest sinon tu risque de lever des exceptions du type hors limite...

    Dans ce style pour l'Events Mouse.move mais ça vaux aussi pour les autres évents de souris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
      Private Sub Chart_MouseMove(sender As Object, e As MouseEventArgs)
            Dim Chart As Chart = TryCast(sender, Chart)
            Dim ChartArea As ChartArea = Nothing
     
            Dim Xv, Yv, X2, Y2 As Double
     
            Dim results As HitTestResult() = Chart.HitTest(e.Location.X, e.Location.Y, False, ChartElementType.PlottingArea)
            For Each result In results
     
                If result.ChartElementType = ChartElementType.PlottingArea Then
                    ChartArea = result.ChartArea
                    Xv = ChartArea.AxisX.PixelPositionToValue(e.Location.X)
                    Yv = ChartArea.AxisY.PixelPositionToValue(e.Location.Y)
                    X2 = ChartArea.AxisX2.PixelPositionToValue(e.Location.X)
                    Y2 = ChartArea.AxisY2.PixelPositionToValue(e.Location.Y)
                End If
            Next
     
        End Sub
    HitTest te permet aussi d'obtenir directement les objets du contrôle Chart qui match la position de la souris en faisant ceci (comme sur mon exemple précédent) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonChartArea = result.ChartArea
    MaSérie = result.Séries...etc
    Voici tous les objets que tu peux récupérer ainsi :
    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

  9. #29
    Membre à l'essai
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : janvier 2013
    Messages : 165
    Points : 17
    Points
    17

    Par défaut

    Bonjour,

    En relisant les réponses de Mabrouki, après pas mal de tests et recherches je parviens maintenant à récupérer le canal draggué via un label comme l'indiquai Mabrouki :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
    Private Sub GetData()
     
            Dim rnd As New Random
     
     
            'Canal A
            pointsA.Add(New PointF(ParaH1_CA.Text, txt_valeur1CA.Text))
            pointsA.Add(New PointF(ParaH2_CA.Text, txt_valeur2CA.Text))
            pointsA.Add(New PointF(ParaH3_CA.Text, txt_valeur3CA.Text))
            pointsA.Add(New PointF(ParaH4_CA.Text, txt_valeur4CA.Text))
            pointsA.Add(New PointF(ParaH5_CA.Text, txt_valeur5CA.Text))
            pointsA.Add(New PointF(ParaH6_CA.Text, txt_valeur6CA.Text))
            pointsA.Add(New PointF(ParaH7_CA.Text, txt_valeur7CA.Text))
            pointsA.Add(New PointF(ParaH8_CA.Text, txt_valeur8CA.Text))
            pointsA.Add(New PointF(ParaH9_CA.Text, txt_valeur9CA.Text))
            pointsA.Add(New PointF(ParaH10_CA.Text, txt_valeur10CA.Text))
     
            BindingSourceA.DataSource = pointsA
     
            Chart1.Series(0).ChartType = SeriesChartType.Area
            Chart1.Series(0).XValueMember = "X"
            Chart1.Series(0).YValueMembers = "Y"
            Chart1.Series(0).BorderWidth = 2
     
            Chart1.Series(0).MarkerColor = Color.White
            Chart1.Series(0).MarkerStyle = MarkerStyle.Circle
            Chart1.Series(0).MarkerSize = 18
            Chart1.Series(0).IsValueShownAsLabel = False
            With Chart1.Series(0)
                .Name = "Canal A"
            End With
     
     
     
     
            'Move legend to bottom and center
            Chart1.Legends(0).Docking = Docking.Bottom
            Chart1.Legends(0).Alignment = StringAlignment.Center
     
            ' les Bindings
     
            Chart1.Series(0).Points.DataBind(BindingSourceA, "X", "Y", Nothing)
            Chart1.DataBind()
            ListBoxA.DataSource = BindingSourceA
     
     
     
            txtXA.DataBindings.Add("Text", BindingSourceA, "X", True, DataSourceUpdateMode.OnPropertyChanged)
            txtYA.DataBindings.Add("Text", BindingSourceA, "Y", True, DataSourceUpdateMode.OnPropertyChanged)
     
        End Sub
     
     
    Private Sub Chart1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseDown
     
            selectedDataPointA = Nothing
     
            positionA = -1
            If e.Button = MouseButtons.Left Then
     
                Dim hitResultA As HitTestResult = Chart1.HitTest(e.X, e.Y)
                If hitResultA Is Nothing Then Return
                If hitResultA.ChartElementType = ChartElementType.DataPoint Then
                    selectedDataPointA = CType(hitResultA.Object, DataPoint)
     
                    selectedSerie = hitResultA.Series
                    BindControls()
     
                    ' Show point value as label
                    selectedDataPointA.IsValueShownAsLabel = True
     
                    '-----------------MAJ POINTS-----------------
                    positionA = hitResultA.PointIndex
                    selectedPointFA = New PointF(selectedDataPointA.XValue, selectedDataPointA.YValues(0))
     
                End If
            End If
     
     
     Private Sub BindControls()
            If selectedSerie Is Chart1.Series(0) Then
                BindingSourceA.DataSource = pointsA
            ElseIf selectedSerie Is Chart1.Series(1) Then
                BindingSourceB.DataSource = pointsB
            End If
     
     
            Label_Canal.Text = selectedSerie.Name
     
            ListBoxA.DataSource = BindingSourceA
     
            txtYA.DataBindings.Add("Text", BindingSourceA, "Y", True, DataSourceUpdateMode.OnPropertyChanged)
        End Sub
     
     
        End Sub

    Depuis plusieurs jours j'essai de formater mon Axe X au format heure: "00:00" avec des créneau tous les 15min, j'ai beau retourner les choses dans tous les sens je n'y parviens pas.
    Pour mes séries je place le Xvaluetype à Time. Mes textbox qui incrémentent l'axe des X sont sous la forme 00:00 mais rien n'y fait.

    J'ai également chercher du côté des propriété du Chartarea dans les intervaletype, intervalle ou encore labelstyle mais je parviens pas à générer l'axe des X sous 00:00; 00:15; 00:30 etc..

    Le seul exemple concret ou j'obtiens l'axe des X comme je le souhaite c'est avec cet exemple :
    http://www.xtremevbtalk.com/-net-gen...intervals.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Imports System.Windows.Forms.DataVisualization.Charting
     
    Public Class Form1
     
        Private Shared ReadOnly RNG As New Random()
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim series As Series = _chart.Series(0)
            Dim chartArea As ChartArea = _chart.ChartAreas(0)
            Dim xAxis As Axis = chartArea.AxisX
     
            series.XValueType = ChartValueType.Time
            AddData(series)
            series.ChartType = SeriesChartType.Line
     
            xAxis.LabelStyle.Format = "H:mm"
        End Sub
     
        Private Sub AddData(ByVal series As Series)
            Dim baseTime As DateTime = New DateTime(2010, 12, 10, 0, 0, 0)
            For i As Integer = 1 To 10
                series.Points.AddXY(baseTime.ToOADate(), RNG.Next(-20, 20))
                baseTime = baseTime.AddMinutes(15)
            Next
        End Sub
     
    End Class
    mais je n'arrive pas à l'adapter avec mes textbox, auriez-vous des pistes de réflexions ? Je ne pensais pas que cela soit aussi compliqué
    Vous remerciant par avances pour vos idées

  10. #30
    Membre à l'essai
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : janvier 2013
    Messages : 165
    Points : 17
    Points
    17

    Par défaut

    Bonsoir je suis toujours à la recherche de solutions pour obtenir un axe dès heure avec une précision toutes les minutes voir tous les 15 minutes via mes textbox. Avez-vous une piste à suivre car je ne trouve rien de concret pour le moment . C'est l'un des derniers points gênants pour mon graphique . Merci à tous pour votre patience .

  11. #31
    Membre à l'essai
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : janvier 2013
    Messages : 165
    Points : 17
    Points
    17

    Par défaut

    Bonsoir je suis toujours à la recherche de solutions pour obtenir un axe dès heure avec une précision toutes les minutes voir tous les 15 minutes :/

    Bonne soirée tout le monde

  12. #32
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    Bonjour à tous,

    Je déterre le sujet car il m'interesse, pour reprendre un peu vos exemples (merci à Mabrouki au passage pour son exemple) comment faire pour "Masquer" ou "Afficher" une série ?

    J'arrive à masquer une série en faisant : Chart1.Series(0).Points.Clear()
    mais je n'arrive pas à la ré-afficher sur le chart1, comment s'y prendre ? Déja pour masquer une série est-ce que Chart1.Series(0).Points.Clear() est une bonne solution ?

    Merci pour vos retours

  13. #33
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    Citation Envoyé par Mike_01 Voir le message
    mais je n'arrive pas à la ré-afficher sur le chart1, comment s'y prendre ? Déja pour masquer une série est-ce que Chart1.Series(0).Points.Clear() est une bonne solution ?
    Non car tu supprimes tous les points de ta série. En fait tu ne la masque pas, tu la vide. Il n'existe pas un genre de Chart.Series(0).IsVisible?

  14. #34
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    pour : Chart1.Series(0).IsVisible = True en VB.net VS2015 me dis que 'IsVisible' n'est pas un membre de 'Series'

    En revanche problème résolu avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Chart1.Series(0).Enabled = False
    Merci ZenZiTone pour la piste

  15. #35
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    Question peut-être bête mais dans l'exemple donné précédemment les valeurs des axes X et Y sont générer par des texbox, si je modifie une valeur dans un textbox comment faire pour mettre à jours le graphique ?

    Mise à part faire un reboot de l'exe je n'arrive pas à mettre à jours le chart, si vous avez des idées ?
    Merci à vous

  16. #36
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    Tu mets un points à jours? Si oui, il faut que tu affectes le point concerné sur le chart avec la valeur saisie.

  17. #37
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    Oui c'est cela, je n'arrive pas à mettre un point à jours sur le chart. Comment tu "affectes" un point ?

  18. #38
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2013
    Messages : 1 360
    Points : 2 959
    Points
    2 959

    Par défaut

    via Chart(0).Series(0).Points(0)

    Mais pour faire ça, il faut que tu saches quel point du modifies. Comment tu sais quel point tu veux modifier?

  19. #39
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2017
    Messages : 14
    Points : 11
    Points
    11

    Par défaut

    D'abord merci pour ton aide

    J'ai 5 points (5 textbox pour l'axe X et 5 textbox pour l'axe Y) donc dans l’événement de chaque texbox je peux savoir à quel point je m'adresse. Mon chart s'appelle Chart1.

    Si je suis ta logique et que je souhaites mettre à jours le point n° 3 par exemple je place simplement : Chart1.Series(0).Points(2) dans l'évenement TextChanged ?

    En l'état pour avoir tester j'obtiens l'argument suivant : Arguments trop nombreux pour 'Public' Overloards ReadOnly Property Points As DataPointColletion'

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/02/2014, 15h19
  2. [XL-2003] Graphique avec points clignotants
    Par logiclogic dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/08/2010, 00h05
  3. Création d'un graphique avec IReport
    Par juju05 dans le forum iReport
    Réponses: 1
    Dernier message: 02/03/2010, 16h49
  4. [XL-2007] Création d'un graphique avec consolidation des données
    Par alex75 dans le forum Excel
    Réponses: 2
    Dernier message: 24/08/2009, 19h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo