
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 _127_绘制验证码{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } //用来记录验证码中的数字 string correct = null; /// <summary> /// 点击PictureBox时验证码更换 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pictureBoxCode_Click(object sender, EventArgs e) { Random r = new Random(); string strCode = null; for (int i = 0; i < 5; i++) { int rNumber = r.Next(0, 10); strCode += rNumber; } //将正确数字记录下来 correct = strCode; //创建随机数、干扰线和像素点的载体 //创建GDI对象 (画图像) Bitmap bmp = new Bitmap(200, 50); //创建一个位图对象 Graphics g = Graphics.FromImage(bmp); //将随机数画入bmp中 for (int i = 0; i < 5; i++) { //字体,颜色,样式要求全随机 string[] fonts = { "宋体", "微软雅黑", "幼圆", "华文行楷", "方正舒体", "华文彩云", "楷体" }; Color[] colors = { Color.Yellow, Color.Red, Color.Green, Color.Blue, Color.Black, Color.Violet, Color.Orange, Color.Azure }; FontStyle[] fStyle = { FontStyle.Regular, FontStyle.Bold, FontStyle.Italic, FontStyle.Underline, FontStyle.Strikeout }; //五个数字的横坐标不能相同,纵坐标可以 Point point = new Point(i * 30, 0);//在PictureBox中的坐标 //画string DrawString(str,font,brush,point) //DrawString()方法需要 string font brush point四个参数 (Font需要字体,大小,类型三个参数) //定义一种颜色的画笔,这个方法可以将color传入 g.DrawString(strCode[i].ToString(), new Font(fonts[r.Next(0, fonts.Length)], r.Next(20, 55), fStyle[r.Next(0, fStyle.Length)]), new SolidBrush(colors[r.Next(0, colors.Length)]), point); } //画干扰线 for (int i = 0; i < 70; i++) { Color[] colors = { Color.Yellow, Color.Red, Color.Green, Color.Blue, Color.Black, Color.Violet, Color.Orange, Color.Azure }; Pen pen = new Pen(colors[r.Next(0, colors.Length)]); Point p1 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height)); Point p2 = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height)); g.DrawLine(pen, p1, p2); } //生成像素粒 for (int i = 0; i < 500; i++) { Point p = new Point(r.Next(0, bmp.Width), r.Next(0, bmp.Height)); Color[] colors = { Color.Yellow, Color.Red, Color.Green, Color.Blue, Color.Black, Color.Violet, Color.Orange, Color.Azure }; //在此Bitmap中设置指定像素的颜色 bmp.SetPixel(p.X, p.Y, colors[r.Next(0, colors.Length)]); } //将图片镶嵌到PictureBox中 pictureBoxCode.Image = bmp; } /// <summary> /// 点击时,判断验证码是否与用户输入的相同 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnEnter_Click(object sender, EventArgs e) { if (txtInput.Text == correct) { MessageBox.Show("输入正确"); Object ob = new object(); EventArgs ea = new EventArgs(); pictureBoxCode_Click(ob, ea); } else { MessageBox.Show("输入错误,沙币"); } //输入后清空文本 txtInput.Clear(); txtInput.Focus(); } private void label1_Click(object sender, EventArgs e) { Object ob = new object(); EventArgs ea = new EventArgs(); pictureBoxCode_Click(ob, ea); } private void Form1_Load(object sender, EventArgs e) { Object ob = new object(); EventArgs ea = new EventArgs(); pictureBoxCode_Click(ob, ea); } }}