2016-06-09 9 views
1

Ich versuche, ein Balkendiagramm mit Achsenbeschriftungen zu erstellen, die links ausgerichtet sind und einen bestimmten Abstand zum Diagramm haben. Es scheint weder eine Ausrichtungsfunktion für Achsenbeschriftungen zu geben, noch ist es möglich, ein Padding einzufügen. Die Auffüllung wird ignoriert. Was könnte eine Lösung für sie sein:Linke Ausrichtung von Balkendiagramm-Achsenbeschriftungen

private void button1_Click(object sender, EventArgs e) 
    { 
     Chart chart1 = new Chart(); 
     chart1.Size = new Size(600, 200); 
     Title mainTitle = new Title("BarChartX"); 
     mainTitle.Alignment = ContentAlignment.TopLeft; 
     mainTitle.Font = new System.Drawing.Font("Arial", 11, FontStyle.Bold); 
     chart1.Titles.Add(mainTitle); 

     chart1.ChartAreas.Add(new ChartArea()); 
     chart1.ChartAreas[0].AxisX.LabelStyle.Font = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Regular); 

     chart1.Series.Add("MySeries1").ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar; 
     chart1.Series["MySeries1"].IsVisibleInLegend = false; 
     chart1.Series["MySeries1"].Color = Color.Red; 
     chart1.Series["MySeries1"].Points.AddXY(1, 1); 
     chart1.Series["MySeries1"]["PixelPointWidth"] = "30"; 

     chart1.Series.Add("MySeries2").ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Bar; 
     chart1.Series["MySeries2"].IsVisibleInLegend = false; 
     chart1.Series["MySeries2"].Color = Color.Red; 
     chart1.Series["MySeries2"].Points.AddXY(2, 2); 
     chart1.Series["MySeries2"]["PixelPointWidth"] = "30"; 

     chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0; 

     chart1.ChartAreas[0].AxisX.Interval = 1; 
     chart1.ChartAreas[0].AxisY.Interval = 2; 
     chart1.ChartAreas[0].AxisX.Maximum = 3; 
     chart1.ChartAreas[0].AxisY.Maximum = 6; 

     Font stringFont = new System.Drawing.Font("Arial", 10, FontStyle.Regular);  /// !!!!!!!!!!!! 

     string Label1 = "AxisLabel1".PadRight(12); 
     chart1.ChartAreas[0].AxisX.CustomLabels.Add(0.5, 1.5, Label1); 

     string Label2 = "AxisLabel2"; 
     chart1.ChartAreas[0].AxisX.CustomLabels.Add(1.5, 2.5, Label2); 

     flowLayoutPanel1.Controls.Add(chart1); 

}[enter image description here][1] 

Antwort

0

Während Polsterung mit Platz wird durch die Diagramm-Rendering-Engine, Polsterung mit einem anderen Leerraumzeichen wie der non-breaking Raum ignoriert/getrimmt hat tatsächlich funktioniert:

enter image description here

char space = (char)0xa0; 
//.. 
string Label2 = "AxisLabel2".PadRight(12, space); 
//.. 
string Label1 = "AxisLabel".PadRight(12, space); 
//.. 

natürlich, für die Polsterung zu arbeiten, müssen Sie zu einem Mono-Abstand Schriftart wechseln, wie Consolas:

Font stringFont = new System.Drawing.Font("Consolas", 10, FontStyle.Regular); 

Update:

Es gibt mehrere nützliche white-space Zeichen, die Sie vergleichen möchten, am häufigsten:

  • (char) 0x00A0 keine Bruch Raum
  • (char) 0x2002 en Raum
  • (char) 0x2003 em-break Leerzeichen
  • (Zeichen) 0x2008 Interpunktionszeichen
  • (char) 0x2009 dünner Raum
  • (char) 0x200A Haar Raum

Natürlich mit Consolas oder anderen Mono-Abstand Schriftart werden sie alle die gleiche Breite haben.

OP kommentiert, dass für ihn das einzig Sonderzeichen war das funktioniert, seltsamerweise der delete Charakter:

  • (char) 0x007f Charakter
+0

Danke für die Anregung löschen! Ich konnte es nicht wirklich funktionieren lassen: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>> char space = (char) 0xa0; chart1.ChartAreas [0] .AxisX.LabelStyle.Font = stringFont; Zeichenfolge title1 = "AxisLabel1"; chart1.ChartAreas [0] .AxisX.CustomLabels.Add (0.25, 0.75, title1.PadRight (12, Leerzeichen)); >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> Es ignoriert immer noch den Raum. Gibt es irgendeine Einstellung, die ich außer der Schriftart ändern muss? –

+0

Keine andere Einstellung glaube ich .. - Welche Schriftart verwenden Sie? Sie sollten im Windows-Zeichentabelle-Tool testen, ob Ihre Schriftart tatsächlich dieses spezielle Leerzeichen enthält! C Consolas funktioniert, wie Sie sehen können. – TaW

+0

Es funktionierte mit 0x7F, das war die richtige Richtung, vielen Dank! –