2D绘图:Winform绘制柱形图



最近朋友建议我写一些关于微软云技术的博客留给学校下一届的学生们看,怕下一届的MSTC断档。于是我也觉的有这个必要。写了几篇博客之后,我觉得也有必要把这一年的学习内容放在博客做个纪念,就这样写了本篇博客。



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;
using System.Drawing.Drawing2D;

namespace 绘制柱形图表
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int Sum;
        SqlConnection conn;

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            CreateImage();
        }

        private void CreateImage()
        {
            conn = new SqlConnection("server=.;database=test;integrated security=SSPI");
            conn.Open();

            SqlCommand cmd = new SqlCommand("select sum(票数) from vote", conn);

            Sum = (int)cmd.ExecuteScalar();
            SqlDataAdapter sda = new SqlDataAdapter("select * from vote", conn);

            DataSet ds = new DataSet();

            sda.Fill(ds);

            int TP1 = Convert.ToInt32(ds.Tables[0].Rows[0][2].ToString());
            int TP2 = Convert.ToInt32(ds.Tables[0].Rows[1][2].ToString());
            int TP3 = Convert.ToInt32(ds.Tables[0].Rows[2][2].ToString());
            int TP4 = Convert.ToInt32(ds.Tables[0].Rows[3][2].ToString());

            float tp1 = Convert.ToSingle(Convert.ToSingle(TP1) * 100 / Convert.ToSingle(Sum));
            float tp2 = Convert.ToSingle(Convert.ToSingle(TP2) * 100 / Convert.ToSingle(Sum));
            float tp3 = Convert.ToSingle(Convert.ToSingle(TP3) * 100 / Convert.ToSingle(Sum));
            float tp4 = Convert.ToSingle(Convert.ToSingle(TP4) * 100 / Convert.ToSingle(Sum));

            int width = 300, height = 300;

            Bitmap bitmap = new Bitmap(width, height);

            Graphics g = Graphics.FromImage(bitmap);

            try
            {
                g.Clear(Color.White);
                Brush brush1 = new SolidBrush(Color.White);
                Brush brush2 = new SolidBrush(Color.Black);
                Brush brush3 = new SolidBrush(Color.Red);
                Brush brush4 = new SolidBrush(Color.Green);
                Brush brush5 = new SolidBrush(Color.Orange);
                Brush brush6 = new SolidBrush(Color.DarkBlue);

                Font font1 = new Font("Courier New", 16, FontStyle.Bold);
                Font font2 = new Font("Courier New", 8);

                g.FillRectangle(brush1, 0, 0, width, height);
                g.DrawString("投票结果", font1, brush2, new Point(90, 20));

                Point p1 = new Point(70, 50);
                Point p2 = new Point(230, 50);

                g.DrawLine(new Pen(Color.Black), p1, p2);

                g.DrawString("阿森纳:", font2, brush2, new Point(10, 80));
                g.DrawString("曼联:", font2, brush2, new Point(10, 110));
                g.DrawString("利物浦:", font2, brush2, new Point(10, 140));
                g.DrawString("热刺:", font2, brush2, new Point(10, 170));

                g.FillRectangle(brush3, 95, 80, tp1, 17);
                g.FillRectangle(brush4, 95, 110, tp2, 17);
                g.FillRectangle(brush5, 95, 140, tp3, 17);
                g.FillRectangle(brush6, 95, 170, tp4, 17);

                g.DrawRectangle(new Pen(Color.Green), 10, 210, 280, 80);
                g.DrawString("阿森纳:" + TP1.ToString() + "票", font2, brush2, new Point(15, 220));
                g.DrawString("曼联:" + TP2.ToString() + "票", font2, brush2, new Point(150, 220));
                g.DrawString("利物浦:" + TP3.ToString() + "票", font2, brush2, new Point(15, 260));
                g.DrawString("热刺:" + TP4.ToString() + "票", font2, brush2, new Point(150, 260));

                pictureBox1.Image = bitmap;
            }

            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }   
    }
}