动态创建图表

时间:2016-04-19 18:31:45

标签: c# charts

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

每个图表都应该是一个饼图,其中包含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();
        }
    }

感谢。

1 个答案:

答案 0 :(得分:1)

你快到了。

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

charts[i] = new Chart();

..是ChartArea

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

没有它,Series无法显示..

使用它为TickMarksGridLinesLabels设置轴的样式,或者设置MinimaMaxima以及Intervals。好吧,至少对大多数其他ChartTypes而言; Pies无论如何都不需要任何这个......

请注意,您可以在一个ChartAreas中拥有多个Chart

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