2016-04-19 21 views
1

Ich versuche, dynamisch ein Diagramm für jedes Laufwerk in dem Computer innerhalb eines Formulars zu erstellen.Dynamisch Erstellen von Diagrammen

Jedes Diagramm sollte ein Kreisdiagramm sein, das die Menge an freiem Speicherplatz (grün markiert) und den belegten Speicherplatz (rot) in GB enthält.

Aber wenn ich den folgenden Code ausführen, ist das einzige, was ich sehe, leere Rechtecke mit den Überschriften "C: \", "D: \" und so weiter. Hier

ist der Code:

public static void DrawCharts() 
    { 
     Chart[] charts = new Chart[DriveInfo.GetDrives().Length]; 
     DriveInfo[] drives = DriveInfo.GetDrives(); 
     for (int i = 0; i < drives.Length; i++) 
     { 
      charts[i] = new Chart(); 
      charts[i].Palette = ChartColorPalette.BrightPastel; 
      charts[i].Titles.Add(drives[i].Name); 
      charts[i].Series.Add("Storage"); 
      charts[i].Series[0].ChartType = SeriesChartType.Pie; 
      charts[i].Location = new System.Drawing.Point(20 + i * 231, 30); 
      charts[i].Size = new System.Drawing.Size(230, 300); 
      DataPoint d = new DataPoint(); 
      d.XValue = 1; 
      double[] p = { (double)drives[i].TotalFreeSpace/1000000000 }; 
      d.YValues = p; 
      d.Color = System.Drawing.Color.YellowGreen; 
      d.Label = "Free Space"; 
      charts[i].Series[0].Points.Add(d); 
      d.Label = "Used Space"; 
      d.XValue = 2; 
      double[] a = { (double)((drives[i].TotalSize - drives[i].TotalFreeSpace)/1000000000) }; 
      d.YValues = a; 
      d.Color = System.Drawing.Color.Red; 
      charts[i].Series[0].Points.Add(d); 
      Form1.tabs.TabPages[1].Controls.Add(charts[i]); 
      charts[i].Invalidate(); 
     } 
    } 

Dank.

Antwort

1

Sie sind fast da.

Aber die einfachste Sache, die Sie zu einer dynamisch erstellten Grafik hinzufügen müssen ..:

charts[i] = new Chart(); 

..ist ein ChartArea:

charts[i].ChartAreas.Add("CA1"); // pick your name! 

Ohne sie keine Series anzeigen können ..

Verwenden Sie diese Option, um die Achse mit TickMarks, GridLines oder Labels zu formatieren oder Minima einzustellen und Maxima und Intervals. Nun, zumindest für die meisten anderen ChartTypes; Pies brauchen sowieso nichts davon.

Beachten Sie, dass Sie mehrere ChartAreas in einem Chart haben können.

Beachten Sie auch, dass es noch nichts, bis mindestens ein Series mindestens einen DataPoint ..

+0

Dank angezeigt werden! Es funktioniert. –

+0

Ja, zumindest, wenn Sie etwas wie 'd = new DataPoint(); 'nach dem Hinzufügen des 1. DataPoint hinzufügen. – TaW

+0

Ja, ich habe es herausgefunden, nachdem ich den Code einmal ausgeführt habe. Vielen Dank. –