图形大小调整并在每次函数调用时变得更小

问题描述:

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

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

我似乎无法找出原因,有什么建议吗? 我用下面的函数来initalize图:

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

    } 

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

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

我猜什么地方在你的代码你积累了价值,而不是分配给它,所以它越来越逐渐变小因为你在相同的PieChart上调用该函数。清除pieChart应解决此问题。