Erreur:Un élément de graphique portant le nom...

edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - 30 juil. 2013 à 17:54
 Utilisateur anonyme - 12 août 2013 à 13:19
Bonjour,
J'ai un problème récurrent. J'essaye pour l'instant d'afficher un graphique.
Ce graphique affiche uniquement les séries que l'utilisateur aura choisi grâce à des cases à cocher. Le message d'erreur suivant s'affiche parfois lorsque l'on coche ou décoche certaine cases: Un élément de graphique portant le nom « Series3 » existe déjà dans « SeriesCollection ». C'est parfois Série1, ou Série7,...

Je pense que ça ne doit pas être compliqué à résoudre mais je n'ai pas trouvé de solutions car je ne sais pas d'où viens l'erreur.

D'avance merci.

Ps: Je peux mettre mon code si besoin.

9 réponses

Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
30 juil. 2013 à 18:08
Bonjour edwinzap.

Il est bien évident que sans votre code, il est impossible de savoir où se trouve votre erreur. Et pour faciliter les choses, donnez-le nous avec la coloration syntaxique, pour le rendre lisible.

Cordialement.
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
30 juil. 2013 à 22:45
Voilà:
C'est assez long:
Chart_Donnees.Series.Clear()
            list_max.Clear()

            If CheckBox_CordeG.Checked = True Then
                Chart_Donnees.Series.Add(serie_CordeG)
                Chart_Donnees.Series.Add(serie_CordeG_Pt)
                list_max.Add(Calcul.list_corde12)
            End If
            If CheckBox_CordeD.Checked = True Then
                Chart_Donnees.Series.Add(serie_CordeD)
                Chart_Donnees.Series.Add(serie_CordeD_Pt)
                list_max.Add(Calcul.list_corde22)
            End If
            If CheckBox_CordeDecaleG.Checked = True Then
                Chart_Donnees.Series.Add(serie_CordeG2)
                Chart_Donnees.Series.Add(serie_CordeG2_Pt)
                list_max.Add(Calcul.list_corde1)
            End If
            If CheckBox_CordeDecaleD.Checked = True Then
                Chart_Donnees.Series.Add(serie_CordeD2)
                Chart_Donnees.Series.Add(serie_CordeD2_Pt)
                list_max.Add(Calcul.list_corde2)
            End If
            If CheckBox_MachineG.Checked = True Then
                Chart_Donnees.Series.Add(serie_MachineG)
                Chart_Donnees.Series.Add(serie_MachineG_Pt)
                list_max.Add(Calcul.list_machine1)
            End If
            If CheckBox_MachineD.Checked = True Then
                Chart_Donnees.Series.Add(serie_MachineD)
                Chart_Donnees.Series.Add(serie_MachineD_Pt)
                list_max.Add(Calcul.list_machine2)
            End If

Ceci vérifie les checkbox et ajoute les séries voulues.

Private Sub Graphique1()
Chart_Donnees.Series.Clear()
            Chart_Donnees.Titles(0).Text = "Aperçu des données"
            Chart_Donnees.Legends(0).LegendStyle = LegendStyle.Column
            Chart_Donnees.ChartAreas(0).Position = New ElementPosition(5, 10, 90, 90)

            serie_CordeD.LegendText = "Corde Droite"
            serie_CordeD2.LegendText = "Corde Droite décalé"
            serie_CordeG.LegendText = "Corde Gauche"
            serie_CordeG2.LegendText = "Corde Gauche décalé"
            serie_MachineD.LegendText = "Machine Droite"
            serie_MachineG.LegendText = "Machine Gauche"

            Dim list_serie As New List(Of Series)
            With list_serie
                .Add(serie_CordeD)
                .Add(serie_CordeD2)
                .Add(serie_CordeG)
                .Add(serie_CordeG2)
                .Add(serie_MachineD)
                .Add(serie_MachineG)
            End With

            serie_CordeD.Color = Color.Blue
            serie_CordeD2.Color = Color.Red
            serie_CordeG.Color = Color.Blue
            serie_CordeG2.Color = Color.Red
            serie_MachineD.Color = Color.Green
            serie_MachineG.Color = Color.Green

            For Each serie In list_serie
                serie.Points.Clear()
                With serie
                    .BorderWidth = 3
                    .BorderColor = Color.Black
                    .ChartType = SeriesChartType.Line
                End With
            Next

            Dim list_serie_Pt As New List(Of Series)
            With list_serie_Pt
                .Add(serie_CordeD_Pt)
                .Add(serie_CordeD2_Pt)
                .Add(serie_CordeG_Pt)
                .Add(serie_CordeG2_Pt)
                .Add(serie_MachineD_Pt)
                .Add(serie_MachineG_Pt)
            End With

            For Each serie In list_serie_Pt
                serie.Points.Clear()
                With serie
                    .ChartType = SeriesChartType.Point
                    .BorderWidth = 5
                    .MarkerSize = 8
                    .IsVisibleInLegend = False
                    .Color = Color.White
                    .BorderColor = Color.Black
                    .MarkerStyle = MarkerStyle.Square
                End With
            Next

            'Rempli chaque serie
            For Each Point In Calcul.list_corde12
                serie_CordeG.Points.AddXY(Point.X, Point.Y)
                serie_CordeG_Pt.Points.AddXY(Point.X, Point.Y)
            Next
            For Each Point In Calcul.list_corde22
                serie_CordeD.Points.AddXY(Point.X, Point.Y)
                serie_CordeD_Pt.Points.AddXY(Point.X, Point.Y)
            Next
            For Each Point In Calcul.list_corde1
                serie_CordeG2.Points.AddXY(Point.X, Point.Y)
                serie_CordeG2_Pt.Points.AddXY(Point.X, Point.Y)
            Next
            For Each Point In Calcul.list_corde2
                serie_CordeD2.Points.AddXY(Point.X, Point.Y)
                serie_CordeD2_Pt.Points.AddXY(Point.X, Point.Y)
            Next
            For Each Point In Calcul.list_machine1
                serie_MachineG.Points.AddXY(Point.X, Point.Y)
                serie_MachineG_Pt.Points.AddXY(Point.X, Point.Y)
            Next
            For Each Point In Calcul.list_machine2
                serie_MachineD.Points.AddXY(Point.X, Point.Y)
                serie_MachineD_Pt.Points.AddXY(Point.X, Point.Y)
            Next
End Sub
0
Utilisateur anonyme
31 juil. 2013 à 19:53
Salut,

On ne voit pas le code pendant lequel tu ajoutes tes séries à ta collection « SeriesCollection ».

--
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
1 août 2013 à 11:40
Le problème il est là, c'est que je ne crée nul part de série portant le nom de "Serie3", et je n'ai pas de "SeriesCollection".
J'ajoute les séries avec ce code:
Chart_Donnees.series.add(NomDeLaSérie)
0

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

Posez votre question
Utilisateur anonyme
1 août 2013 à 12:30
Tu listes ici une classe « Series » :
 Dim list_serie_Pt As New List(Of Series)

Aurait-on la chance d'apercevoir son code ?

J'en profite pour te suggérer d'utiliser la méthode AddRange de ta List(Of plutôt que Add. Ton code sera alors raccourci.

Je n'ai pas une vue d'ensemble de ton code mais je pense qu'il serait préférable d'utiliser les événements des checkbox et ainsi de ne traiter qu'une case à la fois lors d'un changement d'état. Ceci t'éviterais de devoir tester toutes tes cases en même temps a chaque modification d'état de l'une d'elle. Tu y gagnerais en clarté, en compréhension et tu serais plus à l'aise pour débuger ton code.

Tes tests des états de tes checkbox sont redondants. La propriété Checked étant déjà un booléen. Au lieu de :
 If CheckBox_MachineD.Checked = True Then

Ecrire plutôt :
If CheckBox_MachineD.Checked Then


Un grand bonjour à Zermelo au passage ;)




--
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
8 août 2013 à 20:02
Désolé pour le retard.

Je pense que je devrais refaire toute cette partie du code. Mais quelle est la façon de procéder?

Je récapitule: j'ai un chart, des checkbox. Je remplis les séries du chart avec des listes externes. Les checkbox permettent à l'utilisateur de choisir quelles séries seront affichées sur le graph. Comment faire alors???

Je pense aussi que la méthode de dimensionnement des séries n'est pas correcte. A quoi sert la propriété "name"?
0
Utilisateur anonyme
9 août 2013 à 17:38
Tu as bien fait de récapituler car je me rend compte que je n'avais pas compris.
On attend toujours le code de ta classe "Series".
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
11 août 2013 à 18:24
Je n'ai pas de classe "Series". Tout le code concernant le chart est là.

J'utilise une liste pour pouvoir appliquer les mêmes propriétés à toutes les séries, mais je ne crois pas que c'est la bonne méthode.
Dois-je utiliser plutôt les collections???

Concernant la méthode addrange, j'ai lu sur msdn mais je ne vois pas bien comment il faut faire en code. Pourriez vous me donner un exemple?

Quelle serait la meilleur manière finalement d'afficher sur le graph uniquement les séries que l'utilisateur aurait choisies?

Dernière chose concernant le dimensionnement des séries: peut-on donner le nom que l'on souhaite à la série?
(je me demande si il n'est pas obligé de donner comme nom "series1", "series2",...) Je pense que ce serait à ce niveau qu'il y aurait un problème. J'ai lu le cours de plasserre sur les chart. Il dimensionne la série comme ceci:
Dim series1 As New Series("Price")

Quel est l'interêt de mettre ("Price")???

Merci d'avance.
0
Utilisateur anonyme
12 août 2013 à 13:19
Je vais devoir arrêter là car je ne connais pas Charts. Je pensais que la classe 'Series' t'était personnelle et que sa propriété name était mal conçue.

A bientôt.
0
Rejoignez-nous