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

    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
    163
    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 : 163
    Points : 13
    Points
    13

    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 : 75
Taille : 121,0 Ko

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

    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
    163
    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 : 163
    Points : 13
    Points
    13

    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 294
    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 294
    Points : 2 783
    Points
    2 783

    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
    163
    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 : 163
    Points : 13
    Points
    13

    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 294
    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 294
    Points : 2 783
    Points
    2 783

    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
    163
    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 : 163
    Points : 13
    Points
    13

    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
    163
    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 : 163
    Points : 13
    Points
    13

    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
    163
    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 : 163
    Points : 13
    Points
    13

    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

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