GDI绘制柱状图

Posted on 2019-12-03 22:18  冰糖Luck1996  阅读(281)  评论(0编辑  收藏  举报

实现效果:

1,添加三个按钮

2,添加两个TextBox控件,利用KeyPress事件来控制不让有其他字母输进来。

3,添加两个Lable标签用来跟随图形移动,位置提前测量出来。

4.添加Timer组件,设置Enabled为True,然后再利用Timer的事件。

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

namespace GDI柱状图
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义1号柱状图参数
        int RECX1 = 215;
        int RECY1 = 325;
        int RECWidth1 = 20;
        int RECHeight1 = 0;

        //定义2号柱状图参数
        int RECX2 = 340;
        int RECY2 = 325;
        int RECWidth2 = 20;
        int RECHeight2 = 0;

        //定义启动
        bool run = false;
        //利用集合来清空画板
        public List<Graphics> g = new List<Graphics>();
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (run == true)
            {
                //第一条柱状图
                if (Convert.ToInt32( textBox1.Text) !=0)
                {
                    //填充高度
                    RECHeight1 = RECHeight1 + Convert.ToInt32(this.textBox1.Text);
                    //每次填充Y点位置都要向上增加
                    RECY1 = RECY1 - Convert.ToInt32(this.textBox1.Text);
                    this.label3.Location = new Point(215, this.label3.Location.Y - Convert.ToInt32(this.textBox1.Text));
                    Graphics g1 = this.CreateGraphics();
                    this.label3.Text = (Convert.ToInt32(this.label3.Text) + 1).ToString();
                    g1.FillRectangle(Brushes.Blue, RECX1, RECY1, RECWidth1, RECHeight1);
                    g.Add(g1);
                }
                //第二条柱状图
                if (Convert.ToInt32(textBox2.Text) != 0)
                {
                    RECHeight2 = RECHeight2 + Convert.ToInt32(this.textBox2.Text);
                    RECY2 = RECY2 - Convert.ToInt32(this.textBox2.Text);
                    this.label4.Location = new Point(340, this.label4.Location.Y - Convert.ToInt32(this.textBox2.Text));
                    Graphics g2 = this.CreateGraphics();
                    this.label4.Text = (Convert.ToInt32(this.label4.Text) + 1).ToString();
                    g2.FillRectangle(Brushes.Blue, RECX2, RECY2, RECWidth2, RECHeight2);
                    g.Add(g2);
                }
            }
        }
        //启动按钮
        private void button1_Click(object sender, EventArgs e)
        {
            this.run = true;
        }
        //停止按钮
        private void button2_Click(object sender, EventArgs e)
        {
            this.run = false;
        }
        //清除按钮
        private void button3_Click(object sender, EventArgs e)
        {
            foreach (var item in g)
            {
                item.Clear(this.BackColor);
                this.label3.Location = new Point(215, 295);
                this.label3.Text = "00";
                this.label4.Location = new Point(340, 295);
                this.label4.Text = "00";
                RECX1 = 215;
                RECY1 = 325;
                RECWidth1 = 20;
                RECHeight1 = 0;
                RECX2 = 340;
                RECY2 = 325;
                RECWidth2 = 20;
                RECHeight2 = 0;
            }
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) && e.KeyChar != 13)
            {
                MessageBox.Show("请输入数字", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                e.Handled = true;
            }
        }

        private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar != 8 && !char.IsDigit(e.KeyChar)) && e.KeyChar != 13)
            {
                MessageBox.Show("请输入数字", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
                e.Handled = true;
            }
        }
    }
}
GDI柱状图