1

私はまだ 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);
        }

スライスが 6 つ表示され続けているのに、凡例では 7 つ表示されている理由を誰か説明してもらえますか? この画像で問題を確認できます: http://i.imgur.com/4xciNUG.png?1

イェンテ、どうもありがとう。

4

1 に答える 1

2

7切れあります。ただし、最初のものは小さすぎて、スライバーしか見えません。この行prijsje += 50を に変更してみてくださいprijsje += 10。これにより、実際に 7 つのスライスがあることがよくわかるはずです。

更新しました:

Addメソッドの使い方が間違っていると思います。あなたが考えているのは、 を呼び出すことseries.Points.Add(teller);で、C# がtellerコレクション内の位置にポイントを追加していることだと思います。これは実際には正しくありません。

の値を持つポイントを挿入することですteller。最初の値は 0 であるため、表示されません。次の値は 1 で、これは「100」ラベルです。次に、次の値は 2 (前の値の 2 倍のサイズ..1) で、「150」ラベルです。「100」のスライスを切り取り、「200」のスライスの上に重ねると、ラベルを見て、2 つの「100」のスライスが 1 つの「200」のスライスにぴったり収まると思うでしょう。実際には、3つを1つに収めることができます。その理由は、「200」スライスに割り当てられた値が 3 であるためです。

問題を解決するには、代わりにInsert メソッドを使用する必要があります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;
}
于 2013-04-09T15:25:29.323 に答える