Software & Finance





C# - Pie Chart





Pie Chart is something everyone would like to try with Graphics Programming. I have given here the complete source code and output and downloadable VS2005 project and executables.

 

Source Code


// PieChartForm.cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

 

namespace CSharpPieChart

{

    public partial class PieChartForm : Form

    {

        public PieChartForm()

        {

            InitializeComponent();

        }

 

        struct PieInfo

        {

            public string desc;

            public float percentage;

            public Color color;

            public PieInfo(string d, float p, Color c)

            {

                desc = d;

                percentage = p;

                color = c;

            }

        };

 

        private Pen myPen = new Pen(Color.Red);

 

        private PieInfo[] thePieInfo =

        {

            new PieInfo("Gold", 20, Color.Red),

            new PieInfo("Stocks", 15, Color.Blue),

            new PieInfo("Bonds", 35, Color.Magenta),

            new PieInfo("ETFs", 15, Color.YellowGreen),

            new PieInfo("Options", (float) 7.5, Color.Tomato),

            new PieInfo("Cash", (float) 7.5, Color.Beige)

        };

        int theSliceCount = 6;

 

 

 

        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            float percent1 = 0;

            float percent2 = 0;

            float radius = 75;

            int xCenter = 90, yCenter = 150;

 

            Graphics myGraphics = e.Graphics;

            float x = xCenter - radius;

            float y = yCenter - radius;

            float width = radius * 2;

            float height = radius * 2;

 

            for (int i = 0; i < theSliceCount; i++)

            {

                if (i >= 1)

                    percent1 += thePieInfo[i - 1].percentage;

                percent2 += thePieInfo[i].percentage;

                float angle1 = percent1 / 100 * 360;

                float angle2 = percent2 / 100 * 360;

 

                Brush b = new SolidBrush(thePieInfo[i].color);

                myGraphics.FillPie(b, x, y, width, height, angle1, angle2 - angle1);

            }

 

            myPen.Color = Color.Black;

            myGraphics.DrawEllipse(myPen, x, y, width, height);

 

            float xpos = x + width + 20;

            float ypos = y - 25;

            for (int q = 0; q < theSliceCount; q++)

            {

                Brush b = new SolidBrush(thePieInfo[q].color);

                myGraphics.FillRectangle(b, xpos, ypos, 30, 30);

                myGraphics.DrawRectangle(myPen, xpos, ypos, 30, 30);

                Brush b2 = new SolidBrush(Color.Black);

                myGraphics.DrawString(thePieInfo[q].desc + ": " + thePieInfo[q].percentage.ToString() + "%", Font, b2, xpos + 35, ypos + 12);

 

                ypos += 35;

            }

 

            myGraphics.Dispose();

        }

    }

}

 

// PieChartForm.Designer.cs

namespace CSharpPieChart

{

    partial class PieChartForm

    {

        /// <summary>

        /// Required designer variable.

        /// </summary>

        private System.ComponentModel.IContainer components = null;

 

        /// <summary>

        /// Clean up any resources being used.

        /// </summary>

        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>

        protected override void Dispose(bool disposing)

        {

            if (disposing && (components != null))

            {

                components.Dispose();

            }

            base.Dispose(disposing);

        }

 

        #region Windows Form Designer generated code

 

        /// <summary>

        /// Required method for Designer support - do not modify

        /// the contents of this method with the code editor.

        /// </summary>

        private void InitializeComponent()

        {

            this.SuspendLayout();

            //

            // PieChartForm

            //

            this.ClientSize = new System.Drawing.Size(323, 273);

            this.Name = "PieChartForm";

            this.Text = "C# Pie Chart - softwareandfinance.com";

            this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

            this.ResumeLayout(false);

 

        }

 

        #endregion

    }

}

 

 

// MainProgram.cs

 

using System;

using System.Collections.Generic;

using System.Windows.Forms;

 

namespace CSharpPieChart

{

    static class Program

    {

        /// <summary>

        /// The main entry point for the application.

        /// </summary>

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new PieChartForm());

        }

    }

}

 

Click here to download the entire project and executable 

 

Output