在c#的winform登录窗体中,如何实现窗口验证码
2014-09-29 15:17
1001 查看
c#的winform可开发qq聊天程序,聊天登录窗体验证码是如何实现的呢? 在winform中,需要增加自己的控件 一个picturebox控件pbverifycode 一个按钮butupdateverifycode 代码如下: public partial class FrmLogin : Form { //随机码的长度 private const int iVerifyCodeLength = 6; //随机码 private String strVerifyCode = ""; public FrmLogin() { InitializeComponent(); UpdateVerifyCode(); } //更新验证码 private void UpdateVerifyCode() { strVerifyCode = CreateRandomCode(iVerifyCodeLength); CreateImage(strVerifyCode); } private string CreateRandomCode(int iLength) { int rand; char code; string randomCode = String.Empty; //生成一定长度的验证码 System.Random random = new Random(); for (int i = 0; i < iLength; i++) { rand = random.Next(); if (rand % 3 == 0) { code = (char)('A' + (char)(rand % 26)); } else { code = (char)('0' + (char)(rand % 10)); } randomCode += code.ToString(); } return randomCode; } /// 创建随机码图片 private void CreateImage(string strVerifyCode) { try { int iRandAngle = 45; //随机转动角度 int iMapWidth = (int)(strVerifyCode.Length * 21); Bitmap map = new Bitmap(iMapWidth, 28); //创建图片背景 Graphics graph = Graphics.FromImage(map); graph.Clear(Color.AliceBlue);//清除画面,填充背景 graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框 graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式 Random rand = new Random(); //背景噪点生成 Pen blackPen = new Pen(Color.LightGray, 0); for (int i = 0; i < 50; i++) { int x = rand.Next(0, map.Width); int y = rand.Next(0, map.Height); graph.DrawRectangle(blackPen, x, y, 1, 1); } //验证码旋转,防止机器识别 char[] chars = strVerifyCode.ToCharArray();//拆散字符串成单字符数组 //文字距中 StringFormat format = new StringFormat(StringFormatFlags.NoClip); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; //定义颜色 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; //定义字体 string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; for (int i = 0; i < chars.Length; i++) { int cindex = rand.Next(7); int findex = rand.Next(5); Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小) Brush b = new System.Drawing.SolidBrush(c[cindex]); Point dot = new Point(16, 16); float angle = rand.Next(-iRandAngle, iRandAngle);//转动的度数 graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置 graph.RotateTransform(angle); graph.DrawString(chars[i].ToString(), f, b, 1, 1, format); graph.RotateTransform(-angle);//转回去 graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置 } pbVerifyCode.Image = map; } catch (ArgumentException) { MessageBox.Show("创建图片错误。"); } } private void butUpdateVerifyCode_Click(object sender, EventArgs e) { UpdateVerifyCode(); } 代码全部写完。
相关文章推荐
- 浅谈:如何用C#实现简单的带有验证码及密码使用MD5加密的“登录”WinForm小程序
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- 浅谈如何在C#Winform程序中正确使用登录窗体
- 浅谈如何在C#Winform程序中正确使用登录窗体
- C#开发 WinForm如何在选项卡中集成加载多个窗体 实现窗体复用(图文)
- 浅谈如何在C#Winform程序中正确使用登录窗体
- C#中winform窗体如何嵌入cmd命令窗口
- C# Winform中实现主窗口打开登录窗口关闭的方法
- 比较经典的为C# Winform程序设置登录窗体先启动,成功后再启动主窗口
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- C# Winform中实现主窗口打开登录窗口关闭的方法
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变(转)
- [WINFORM] C#下的winform编程如何在窗体中实现超级链接
- C#开发 WinForm如何在选项卡中集成加载多个窗体 实现窗体复用(图文)
- 比较经典的为C# Winform程序设置登录窗体先启动,成功后再启动主窗口
- 比较经典的为C# Winform程序设置登录窗体先启动,成功后再启动主窗口。
- C#里WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变
- C# winform 登录窗体 记住密码的实现 --来源http://www.cnblogs.com/ou444/archive/2011/09/13/2174911.html
- C#的WINFORM登录窗体中,验证码的一个方法整理。
- C# Winform中实现主窗口打开登录窗口关闭的方法