2017-06-27 1 views
0

Je crée un graphique dans VisualStudio WinForms avec des colonnes de données et je veux placer des étiquettes pour certains d'entre eux. Le problème principal est que les étiquettes des première et dernière colonnes ne sont pas affichées. Min et Max pour le graphique est fixe et les points de données peuvent être à min et max.MSChart DataPoint Étiquette chevauchante

Par exemple, je fait un tableau avec série [0] = .ChartType « Colonne » et étiquettes attribué par la mise en série [0] .Etiquette propriété pour montrer X, Y, index et une chaîne de texte, aussi définir série [0] .LabelBackColor et série [0] .LabelBorderColor pour faire une boîte.
Voilà ce que je suis:
Column type
texte est en dehors de la zone d'arrière-plan, les étiquettes se chevauchent les frontières mais AxisY (à gauche) est encore visible; et les étiquettes pour x = 0 et x = 10 ne sont pas du tout affichées! Aussi avec le type de colonne toutes les opertaions écrites ci-dessous n'ont eu aucun effet.

En fait, je besoin de type StackedColumn, donc: je changé le type de série [0] .ChartType = "StackedColumn" et a ceci:
StackedColumn
Les boîtes sont plus grandes mais qui se chevauchent avec la ligne de AxisY et chiffres sur le dessus, et toujours pas de première et dernière étiquettes.

J'ai essayé de mettre série [0] = false .SmartLabelStyle.IsOverlappingHidden et obtenu ceci:
StackedColumn with no hidden overlapping
AxisX et des lignes et des marqueurs AxisY sont indiqués ci-dessus des étiquettes. Ce n'est pas bon.

Alors j'ai essayé de désactiver SmartLabelStyle du tout en établissant: série [0] = false .SmartLabelStyle.Enabled et a ceci:
StackedColumn with SmartLabelStyle turned off
Pas beaucoup mieux. Même les étiquettes se chevauchent maintenant.

Enfin, j'ai essayé de forcer les étiquettes à se déplacer en permettant SmartLabelStyle et la mise en série [0] = .SmartLabelStyle.MovingDirection "Droite | Gauche" et obtenu ceci:
StackedColumn with MovingDirection
Maintenant Texte dans Les étiquettes sont déplacées correctement, mais la boîte d'arrière-plan ne l'est pas. Si cette case se déplaçait correctement, ce serait suffisant, mais ce n'était pas le cas. Je ne suis pas à court d'idées pour que les étiquettes DataPoint s'affichent correctement sur les côtés gauche et droit du graphique.
Existe-t-il un moyen de définir la position de l'étiquette pour le texte et la boîte? Comment définir la zone d'étiquette à la bonne taille pour le texte?
Je veux absolument éviter les méthodes chart.Paint.

Répondre

0

Souhaitez-vous ajouter dynamiquement des annotations? Cela peut être fait avant n'importe quel graphique.méthodes de peinture sont appelés:

For Each point As DataPoint In Chart1.Series(0).Points 
    Dim ann As New RectangleAnnotation 
    ann.Text = "X=" & point.XValue & vbNewLine & " Y=" & point.YValues(0) & 
     vbNewLine & "a very long text string" 
    ann.AnchorDataPoint = point 
    Chart1.Annotations.Add(ann) 
Next 

This shows the resulting chart