我是一名仍在学习C#的学生,但我遇到了一个问题。 我正在尝试制作一个包含7个不同领域和7个不同传奇的图形(饼图)。
我有这段代码:
private void InitializeChart()
{
this.components = new System.ComponentModel.Container();
ChartArea chartArea1 = new ChartArea();
Legend legend1 = new Legend()
{ BackColor = Color.FromArgb(97,97,97), //achtergrondkleur legende
ForeColor = Color.White, //kleur van tekst in legende
Title = "Legende grafiek", //titel legende
TitleForeColor = Color.White}; //kleur titel legende
pieChart = new Chart();
((ISupportInitialize)(pieChart)).BeginInit();
SuspendLayout();
//===Pie chart
chartArea1.Name = "PieChartArea";
pieChart.ChartAreas.Add(chartArea1);
pieChart.Height = 300;
pieChart.Width = 300;
pieChart.Dock = System.Windows.Forms.DockStyle.Fill;
legend1.Name = "Legend1";
pieChart.Legends.Add(legend1);
pieChart.Location = new System.Drawing.Point(0, 50);
//====Bar Chart
chartArea1 = new ChartArea();
chartArea1.Name = "BarChartArea";
AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Load += new EventHandler(StatistiekenForm_Load);
((ISupportInitialize)(this.pieChart)).EndInit();
this.ResumeLayout(false);
}
private void LoadPieChart()
{
pieChart.Series.Clear();
pieChart.Width = 300;
pieChart.Height = 300;
pieChart.Palette = ChartColorPalette.Excel;
pieChart.BackColor = Color.Transparent;
//pieChart.Titles.Add("Overzicht uitgaven");
pieChart.ChartAreas[0].BackColor = Color.Transparent;
Series series = new Series
{
Name = "Overzicht",
IsVisibleInLegend = true,
Color = System.Drawing.Color.FromArgb(97,97,97),
ChartType = SeriesChartType.Pie
};
pieChart.Series.Add(series);
int teller, prijsje = 50;
for (teller = 0; teller < 7; teller++)
{
series.Points.Add(teller);
var p1 = series.Points[teller];
p1.AxisLabel = Convert.ToString(prijsje + "€");
p1.LegendText = Convert.ToString("legende " + teller);
prijsje += 50;
}
pieChart.Invalidate();
panelPie.Width = 400;
panelPie.Height = 400;
panelPie.Controls.Add(pieChart);
}
有人能解释我为什么一直看到SIX切片,但是传说给我看了七个? 您可以在此图片中看到问题: http://i.imgur.com/4xciNUG.png?1
非常感谢, Yenthe。
答案 0 :(得分:2)
有7片。第一个太小,但你只看到一个条子。请尝试更改此行:prijsje += 50
至prijsje += 10
。他应该让你更好地看到确实有7片。
更新:
我认为你错误地使用了Add
方法。我认为你在想的是通过调用series.Points.Add(teller);
,C#在集合中向teller
位置添加一个点。这实际上是不正确的。
它的作用是插入一个值为teller
的点。第一个值为0,这就是为什么你没有看到它。然后下一个值为1,即“100”标签。然后下一个的值为2(它是它之前的那个的两倍......),这是“150”标签。如果您要剪切“100”切片并将其覆盖在“200”切片的顶部,您可能会认为通过查看两个“100”切片可以完全适合一个“200”切片的标签。实际上,三个可以合二为一。原因是分配给“200”切片的值为3。
要解决您的问题,您应该使用Insert method代替Add
。试试这个:
for (teller = 0; teller < 7; teller++)
{
var dp = new DataPoint(prijsje, prijsje);
dp.AxisLabel = Convert.ToString(prijsje + "€");
dp.LegendText = Convert.ToString("legende " + teller);
series.Points.Insert(teller, dp);
prijsje += 50;
}