2013-05-13 3 views
0

나는 한 번씩 호출해야하는 함수가 있습니다. 그러나, 내가 할 때마다, 그래프 (파이 차트) 자체가 크기를 조정하고 이전에 얻은 piechart보다 작아집니다.그래프는 크기가 변경되고 모든 함수 호출시 작아집니다.

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

    } 

답변

0

잘 모르겠어요 pieChart가 정의 ... private 필드를 ??

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

난 당신이 값을 축적 대신에 그것을 할당하는 코드 어딘가에 같은데요은 점차 작아지고, 그래서 : 그렇다면 당신은 컨테이너에서 이전을 제거한 후 새로운 PieChart를 만들어보십시오 함수를 같은 PieChart에 호출하면됩니다. pieChart을 지우면이 문제가 해결됩니다.

관련 문제