1. #21
    Membre expert
    Inscrit en
    avril 2008
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : avril 2008
    Messages : 1 883
    Points : 3 236
    Points
    3 236

    Par défaut

    bonjour

    ZenZitone : ce gus est totalement bourré et il en serait incapable !!!
    Résumée de la discussion :
    Question initiale du post :au départ c'était "dragguer" un point de donne P(X,Y) à la souris sur un Chart.Series...=> Solution donnée...

    Nouvelle question : récupérer le point P "draggué et son index" .Le point P devait être affiche dans un TextBox =>Solution donné : un BindingSource sur son List(Of Point)
    Nouvelle question : comment traiter plusieurs Séries de Points sur un même ChartArea...Solution donné : utiliser un unique BindingSource qui sera activé sur la Série cliqué au moment du "dragguage souris" ,un seul Listbox, et un seul TextBox...

    Le gogo, c'est en est un ,ne prends pas en compte cette solution pourtant simple (la dernière postée) et me rétorques qu'il veut utiliser autant de BindingSources et de contrôles (ListBox et TextBox) qu'il y a de Chart.Series ....ce qui est totalement débile ...
    J'en ai conclu que le gogo avait atteint sa limite et qu'il était inutile de poursuivre une discussion sans autre objet que de polluer le forum VB.Net
    bon courage !!!

  2. #22
    Futur Membre du Club
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    158
    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 : 158
    Points : 8
    Points
    8

    Par défaut

    Citation Envoyé par ZenZiTone Voir le message
    Pourrais-tu faire un petit récap d'où tu en es dans ton problème? Arrives-tu à générer les différentes séries?

    Bonjour ZenZiTone,

    Comme indiqué du départ je cherche a créer 4 séries dans 1 seul Chart avec la possibilité de déplacer les points avec la souris et de récupérer les coordonnées de chaques points dans mes textbox.
    Chaque série possède 10 points donc pour 1 série j'ai 10 textbox pour l'axe des X et 10 textbox pour l'axe de Y afin de récuperer leurs coordonnées.
    Pourquoi des texbox pour récupérer les coordonnées ? -> parce que l'utilisateur doit pouvoir la modifier précisément avant de les envoyer. L'axe des Y étant de 0 à 4095, la souris ne permet pas de précision à n+1

    Avec l'aide de Mabrouki j'arrive donc a créer ces séries toutes en même temps sur 1 seul chart mais je ne sais pas récupérer l'information de : lorsque je drag un point je ne sais pas à quel série il appartient.
    Il faudrait que j'arrive simplement à dire que si je drag le point 5 (txtindex.text = 5) de la série A par exemple alors txtserieA5X.text = coordonnées X du point et txtserieA5Y.text = coordonnées Y du point

    J’essaye de comprendre les exemples de Mabrouki afin de les utiliser dans mon cas. Si je n'avais pas besoin d'aide je ne viendrais pas sur le forum qui à mon sens reste un forum d'échange.
    Merci de ne pas traiter les gens à la première difficulté qu'il rencontre, tout le monde n'a pas le science infuse comme Mabrouki . Je suis toujours resté courtois et polis donc je ne comprend pas cette réaction.

    Le dernier exemple donné ne donne que 1 série sur le Chart et non 3 (voir imprim écran) et la récupération dans le txtIndex ne fonctionne plus. Je ne comprend pas le "Select case" alors que je souhaites 4 séries affichées en même temps. C'est peut-être ultra simple pour Mabrouki mais pas pour moi.

    Je reste néanmoins preneur de solution afin de pouvoir identifier si un point appartient à tel ou tel série dans le but final de récupérer les coordonnées dans leur textbox appropriés avec pourquoi pas 1 seul listbox et 1 seul txtIdex ce qui serai effectivement + logique.
    Pour le moment les bribes d'exemples transmises par Mabrouki, je n'ai pas réussi à les scinder et à les exploiter au complet

    En résumé a l'heure actuel j'arrive a créer 2 série ou + sur le même chart, je redistribue les valeurs dans mes textbox avec un timer -> si txtindex_serieD = 1 alors txtXD1 = coordonnées X et txtYD1 = coordonnées Y.
    sauf que cette méthode ne différencie pas les points des séries

    Très cordialement,

  3. #23
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 134
    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 134
    Points : 2 417
    Points
    2 417

    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.

  4. #24
    Futur Membre du Club
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    158
    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 : 158
    Points : 8
    Points
    8

    Par défaut

    Citation Envoyé par ZenZiTone Voir le message
    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.
    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 : 19
Taille : 121,0 Ko

  5. #25
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 134
    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 134
    Points : 2 417
    Points
    2 417

    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.

  6. #26
    Futur Membre du Club
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    158
    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 : 158
    Points : 8
    Points
    8

    Par défaut

    Citation Envoyé par ZenZiTone Voir le message
    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.
    Non c'est sa le soucis

  7. #27
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 134
    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 134
    Points : 2 417
    Points
    2 417

    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é.

  8. #28
    Futur Membre du Club
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    158
    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 : 158
    Points : 8
    Points
    8

    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/

  9. #29
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    octobre 2013
    Messages
    1 134
    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 134
    Points : 2 417
    Points
    2 417

    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)

  10. #30
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    mars 2012
    Messages
    551
    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 : 551
    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

  11. #31
    Futur Membre du Club
    Homme Profil pro
    electricien
    Inscrit en
    janvier 2013
    Messages
    158
    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 : 158
    Points : 8
    Points
    8

    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

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/02/2014, 14h19
  2. [XL-2003] Graphique avec points clignotants
    Par logiclogic dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/08/2010, 23h05
  3. Création d'un graphique avec IReport
    Par juju05 dans le forum iReport
    Réponses: 1
    Dernier message: 02/03/2010, 15h49
  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, 18h59

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