2017-03-03 1 views
1

À l'aide de VisualStudio WindowsForms Form. Création du contrôle Chart dans le concepteur. J'essaie d'ajouter des étiquettes personnalisées sur les axes Axis le long de avec les étiquettes par défaut. Pour cela, j'ajoute des étiquettes personnalisées avec RowIndex propriété = 1. Ainsi, je vois les étiquettes par défaut ET mes customLabels. Maintenant que le problème est que les étiquettes par défaut sont tournées correctement, mes étiquettes personnalisées ne le sont pas.Axe MSChart CustomLabel angle à RowIndex> 0

La propriété Axis LabelStyle.Angle affecte uniquement les étiquettes qui se trouvent dans RowIndex = 0, c'est-à-dire les étiquettes par défaut. Et si je mets customLabels à RowIndex = 0 - toutes les étiquettes par défaut disparaîtront.

Ce que je vois:

enter image description here

Ce que je veux voir:

enter image description here

Répondre

0

Je ne vois aucune façon de le faire, vraiment. La raison en est sans doute que les développeurs ont décidé il ne peut simplement pas être assez d'espace pour les étiquettes horizontales, une fois que vous commencez à les mettre dans une ou plusieurs lignes supplémentaires ..

Voici une solution: Faire les CustomLabels tous transparent et dessinez-les comme vous le souhaitez dans un événement xxxPaint.

Voici un exemple:

Je prépare le CustomLabels:

CustomLabel cl = new CustomLabel(); 
cl.ForeColor = Color.Transparent; 
cl.RowIndex = 1; 
... 

Et je code le dessin comme celui-ci:

private void chart1_PostPaint(object sender, ChartPaintEventArgs e) 
{ 
    Axis ay = chart1.ChartAreas[0].AxisY; 
    foreach (var cl in ay.CustomLabels) 
    { 
     if (cl.RowIndex == 1) 
     { 
      double vy = (cl.ToPosition + cl.FromPosition)/2d; 
      int y = (int)ay.ValueToPixelPosition(vy); 
      e.ChartGraphics.Graphics.DrawString(cl.Text, 
         cl.Axis.TitleFont, Brushes.DarkRed, 0, y); 
     } 
    } 
} 

utilisent une Font et Brush de votre goût . Voici le résultat:

enter image description here

Notez que vous devrez peut-être créer plus d'espace à gauche en modifiant légèrement le ChartArea.Position ou ChartArea.InnerPlotPosition, qui sont tous deux en 100% et, comme d'habitude, par défaut à « auto » .

Pour encore plus de lignes, vous devez modifier la valeur cl.RowIndex < 0 et trouver une belle valeur de position x pour DrawString.

+1

Merci pour votre réponse. J'ai pensé de cette façon en dernière urgence. Je pense que ce serait plus facile pour ma tâche de simplement faire toutes les étiquettes personnalisées et dans rowindex = 0. – Prain

+0

En effet, si c'est une option, je pense que je préférerais aussi. – TaW