Winform中实现登录页面跳转以及字母数字验证码功能
创始人
2025-05-31 11:05:20
0

场景

Winform中实现简单的登录成功后跳转到主页面的逻辑:

Winform中实现简单的登录成功后跳转到主页面的逻辑_winform登陆界面跳转主页面_霸道流氓气质的博客-CSDN博客

Winform中实现中文验证码(附代码下载):

Winform中实现中文验证码(附代码下载)_霸道流氓气质的博客-CSDN博客

在上面实现登录页面跳转和添加中文验证码的基础上,实现英文和字母的验证码验证。

 

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、新建登录窗体并添加如下控件

 

其中显示验证码的是pictureBox控件。

2、修改项目的Program.cs

            Login login = new Login();if (login.ShowDialog() == DialogResult.OK) {Application.Run(new Form1());}

将启动页面改为登录页面Login,Form1为登录成功之后的主页面。

3、新建创建验证码工具类ValidCodeHelper

    public class ValidCodeHelper{#region 验证码功能           /// /// 生成随机验证码字符串/// public static string CreateRandomCode(int CodeLength){int rand;char code;string randomCode = String.Empty;//随机验证码//生成一定长度的随机验证码      //Random random = new Random();//生成随机数对象for (int i = 0; i < CodeLength; i++){//利用GUID生成6位随机数     byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数Random random = new Random(seed);//以生成的整数作为随机种子rand = random.Next();//rand = random.Next();    if (rand % 3 == 1){code = (char)('A' + (char)(rand % 26));}else if (rand % 3 == 2){code = (char)('a' + (char)(rand % 26));}else{code = (char)('0' + (char)(rand % 10));}randomCode += code.ToString();}return randomCode;}/// /// 创建验证码图片/// public static void CreateImage(string strValidCode, PictureBox pbox){try{int RandAngle = 45;//随机转动角度int MapWidth = (int)(strValidCode.Length * 21);Bitmap map = new Bitmap(MapWidth, 28);//验证码图片—长和宽//创建绘图对象GraphicsGraphics graph = Graphics.FromImage(map);graph.Clear(Color.AliceBlue);//清除绘画面,填充背景色graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 3, 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 = strValidCode.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 Font(font[findex], 13, FontStyle.Bold);//字体样式(参数2为字体大小)Brush b = new SolidBrush(c[cindex]);Point dot = new Point(16, 16);float angle = rand.Next(-RandAngle, RandAngle);//转动的度数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);//移动光标到指定位置}pbox.Image = map;}catch (ArgumentException){}}#endregion}

4、在登录页面窗体的load时间中添加创建验证码

        private void Login_Load(object sender, EventArgs e){//生成验证码UpdateValidCode();}

并且设置pictureBox的点击事件也会重新生成验证码

        private void pictureBox_code_Click(object sender, EventArgs e){UpdateValidCode();}

生成验证码的实现方法

        private void UpdateValidCode(){strValidCode = ValidCodeHelper.CreateRandomCode(ValidCodeLength);//生成随机验证码if (strValidCode == "") return;ValidCodeHelper.CreateImage(strValidCode, pictureBox_code);//创建验证码图片}

声明需要用到的类变量

        private const int ValidCodeLength = 4;//验证码长度private String strValidCode = "1234";//验证码 

登录按钮的点击事件进行校验

        private void button_login_Click(object sender, EventArgs e){if (String.IsNullOrEmpty(textBox_username.Text.Trim())){MessageBox.Show("用户名不能为空");}else if (String.IsNullOrEmpty(textBox_password.Text.Trim())){MessageBox.Show("密码不能为空");}else if (String.IsNullOrEmpty(textBox_code.Text.Trim())){MessageBox.Show("验证码不能为空");}else if (!textBox_username.Text.Trim().Equals("自定义用户名")){MessageBox.Show("用户名不存在");}else if (!textBox_password.Text.Trim().Equals("自定义密码")){MessageBox.Show("密码不正确");}else if (!textBox_code.Text.Trim().Equals(strValidCode)){MessageBox.Show("验证码不正确");UpdateValidCode();}else{//登录成功,跳转到主页面DialogResult = DialogResult.OK;}}

完整登录页面代码

    public partial class Login : Form{private const int ValidCodeLength = 4;//验证码长度private String strValidCode = "1234";//验证码  public Login(){InitializeComponent();}private void button_login_Click(object sender, EventArgs e){if (String.IsNullOrEmpty(textBox_username.Text.Trim())){MessageBox.Show("用户名不能为空");}else if (String.IsNullOrEmpty(textBox_password.Text.Trim())){MessageBox.Show("密码不能为空");}else if (String.IsNullOrEmpty(textBox_code.Text.Trim())){MessageBox.Show("验证码不能为空");}else if (!textBox_username.Text.Trim().Equals("自定义用户名")){MessageBox.Show("用户名不存在");}else if (!textBox_password.Text.Trim().Equals("自定义密码")){MessageBox.Show("密码不正确");}else if (!textBox_code.Text.Trim().Equals(strValidCode)){MessageBox.Show("验证码不正确");UpdateValidCode();}else{//登录成功,跳转到主页面DialogResult = DialogResult.OK;}}private void Login_Load(object sender, EventArgs e){//生成验证码UpdateValidCode();}//调用自定义函数,更新验证码private void UpdateValidCode(){strValidCode = ValidCodeHelper.CreateRandomCode(ValidCodeLength);//生成随机验证码if (strValidCode == "") return;ValidCodeHelper.CreateImage(strValidCode, pictureBox_code);//创建验证码图片}//点击图片更新验证码private void pictureBox_code_Click(object sender, EventArgs e){UpdateValidCode();}}

相关内容

热门资讯

【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
ChatGPT 怎么用最新详细... ChatGPT 以其强大的信息整合和对话能力惊艳了全球,在自然语言处理上面表现出了惊人...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...