动态创建图表

我正在尝试为表单内的计算机中的每个驱动器动态创建一个图表。

每个图表应该是一个饼图,其中包含GB中的可用空间量(绿色)和已用空间(红色)。

但是,当我运行以下代码时,我唯一看到的是空白矩形,标题为“C:\”,“D:\”等等。

这是代码:

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(); } } 

谢谢。

你快到了。

但是你需要添加到动态创建的图表中的最基本的东西..:

 charts[i] = new Chart(); 

..是一个ChartArea

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

没有它,没有Series可以显示..

使用它可以使用TickMarksGridLinesLabels设置轴的样式,或者设置MinimaMaximaIntervals 。 好吧,至少对于大多数其他ChartTypes ; Pies不需要任何这个..

请注意,您可以在一个Chart包含多个ChartAreas

另请注意,在至少一个Series至少有一个DataPoint之前,它仍然不显示任何内容。