0

我有一个函数,我需要每隔一段时间调用一次。但是,每次我这样做时,图表(饼图)都会自行调整大小并变得比之前获得的饼图更小。

void LoadPieChart(DateTime lower, DateTime higher)
    {
        splitContainer1.Panel1.Controls.Remove(pieChart);
        pieChart.Series.Clear();
        pieChart.Palette = ChartColorPalette.Fire;
        pieChart.BackColor = Color.Black;
        pieChart.Titles.Add("LOST OPPORTUNITY");
        pieChart.ChartAreas[0].BackColor = Color.Transparent;
        Series series1 = new Series
        {
            Name = "series1",
            IsVisibleInLegend = true,
            Color = System.Drawing.Color.White,
            ChartType = SeriesChartType.Pie
        };

        pieChart.Series.Add(series1);
        int num = A.CountLO();
        List<string>[] lista = new List<string>[7];
        lista = A.SelectLO();
        float counter_manpower = 0;
        float counter_spares = 0;
        float counter_tools = 0;
        float counter_other = 0;

        string[] reason = lista[6].ToArray();
        string[] low = lista[4].ToArray();            
        string[] up = lista[5].ToArray();
        string[] collection = new string[366];

        for (int j = num-LO; j < num; j++)
        {
            DateTime x = DateTime.Parse(low[j]);
            DateTime y = DateTime.Parse(up[j]);
            if (x.Date>=lower.Date && y.Date<=higher.Date)
            {
                if (reason[j].Equals("LACK OF MANPOWER"))
                    counter_manpower++;
                if (reason[j].Equals("LACK OF SPARES"))
                    counter_spares++;
                if (reason[j].Equals("LACK OF TOOLS"))
                    counter_tools++;
                if (!reason[j].Equals("LACK OF MANPOWER") && !reason[j].Equals("LACK OF SPARES") && !reason[j].Equals("LACK OF TOOLS"))
                {
                    counter_other++;
                }
            }

        }

        float a = ((counter_manpower/(counter_manpower+counter_spares+counter_tools+counter_other))*100);
        float b = ((counter_spares / (counter_manpower + counter_spares + counter_tools+counter_other)) * 100);
        float c = ((counter_tools / (counter_manpower + counter_spares + counter_tools+counter_other)) * 100);
        float d = ((counter_other / (counter_manpower + counter_spares + counter_tools + counter_other)) * 100);
        double aa = Math.Truncate(100 * a) / 100;
        double bb = Math.Truncate(100 * b) / 100;
        double cc = Math.Truncate(100 * c) / 100;
        double dd = Math.Truncate(100 * d) / 100;

        series1.Points.Add(counter_manpower);
        var p1 = series1.Points[0];
        Math.Round(a, 1);
        Math.Round(b, 1);
        Math.Round(c, 1);
        if (counter_manpower!=0)
            p1.AxisLabel = (aa.ToString() + "%");
        p1.LegendText = "LACK OF MANPOWER";
        p1.Color = Color.Red;

        series1.Points.Add(counter_spares);
        p1 = series1.Points[1];
        if (counter_spares!=0)
            p1.AxisLabel = (bb.ToString() + "%");
        p1.LegendText = "LACK OF SPARES";
        p1.Color = Color.Yellow;

        series1.Points.Add(counter_tools);
        p1 = series1.Points[2];
        if(counter_tools!=0)
            p1.AxisLabel = (cc.ToString() + "%");
        p1.LegendText = "LACK OF TOOLS";
        p1.Color = Color.Orange;


        series1.Points.Add(counter_other);
        p1 = series1.Points[3];

            p1.AxisLabel = (dd.ToString() + "%");
        p1.LegendText = "OTHER";
        p1.Color = Color.Maroon;
        //pieChart.Invalidate();

        splitContainer1.Panel1.Controls.Add(pieChart);
    }

我似乎无法找出原因,有什么建议吗?我使用以下函数来初始化图形:

private void InitializeChart()
    {
        this.components = new System.ComponentModel.Container();
        ChartArea chartArea1 = new ChartArea();
        Legend legend1 = new Legend() { BackColor = Color.White, ForeColor = Color.Black, Title = "CAUSE" };
        pieChart = new Chart();
        ((ISupportInitialize)(pieChart)).BeginInit();
        SuspendLayout();

        //===Pie chart
        chartArea1.Name = "PieChartArea";
        pieChart.ChartAreas.Add(chartArea1);
        pieChart.Dock = System.Windows.Forms.DockStyle.Fill;
        legend1.Name = "Legend1";
        pieChart.Legends.Add(legend1);
        pieChart.Location = new System.Drawing.Point(0, 50);

        //====Bar Chart


        AutoScaleDimensions = new System.Drawing.Size(284,262);
        AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        //this.ClientSize = new System.Drawing.Size(284, 262);           
        this.Load += new EventHandler(Form1_Load);
        ((ISupportInitialize)(this.pieChart)).EndInit();

        this.ResumeLayout(false);

    }
4

1 回答 1

0

我不确定在哪里pieChart定义...私有字段?PieChart如果是这样,请在从容器中删除前一个后尝试创建一个新的:

splitContainer1.Panel1.Controls.Remove(pieChart);
pieChart = new PieChart();
pieChart.Series.Clear();

我猜在你的代码中的某个地方你正在累积一个值而不是分配它,所以当你在同一个PieChart. 清除pieChart应该可以解决这个问题。

于 2013-05-13T16:12:20.100 回答