在c#的winform登录窗体中,如何实现窗口验证码

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();
        }   
        代码全部写完。
时间: 2024-08-08 22:10:02

在c#的winform登录窗体中,如何实现窗口验证码的相关文章

三层架构在登录窗体中的实现

    刚刚学习了三层的内容,初接触三层,一头的雾水,原来在一个界面上自己还玩不转呢,现在又加了两层,于是自己看过了三层的视频之后就有种置身迷宫中的感觉,身陷重重围墙之中足足转了一周多的时间(当然有效时间没有那么多喽O(∩_∩)O~),今天,自己总算是找到了点感觉,现总结如下,望大家多多指教! 从不同的角度区划分,三层有不同的诠释.从物理角度区划分,三层包括显示层.业务层.数据层:从逻辑角度划分,三层包括用户层.业务逻辑层.数据访问层.接下来我将从逻辑角度给大家做一个详细的介绍: **用户层(U

三层架构在登录窗体中再实现(二)

在上一篇博客中介绍了自己学习的三层架构在登录窗体中实现的过程,感觉自己略有所懂,时至今日才发现自己欠缺的东西还是很多的,自己的理解还是很不够深入的.再次实现登录功能,不同的是自己用到了不同的语言--vb.net,只有在这个过程中才发现了自己真正的问题之所在: 一.尽管明白各层之间的调用关系,但是并不了解是具体如何调用,或者说是在调用什么: 二.对于vb.net中的一些基础知识还是有很多的欠缺的: 三.陌生的开发环境让加上三层之间的切换让自己有点晕头转向: 这就是自己在初期的真实感受,不过,经过自

C# 在winform或者wpf中显示控制台窗口

这儿需要使用两个系统函数: BOOL WINAPI FreeConsole(void); //// 关闭控制台窗口,参考:http://msdn.microsoft.com/en-us/library/ms683150%28VS.85%29.aspx BOOL WINAPI AllocConsole(void); //// 打开控制台窗口,参考:http://msdn.microsoft.com/en-us/library/ms681944%28VS.85%29.aspx对应DLL:Kernel

关于winform登录窗体的文本框问题

设置TextBox控件的默认文本即在加载TextBox控件时为其Text文本赋值.点击文本消失,离开或者失去焦点显示默认文本可以通过Enter和Leave事件或Mouse的事件来实现.具体代码如下. private void txtPassword_Enter(object sender, EventArgs e) { pnlPassword.BackgroundImage = ImageHelper.GetImage("Login\\login_account_focus.png")

浅析c#中登录窗体和欢迎窗体关闭的问题

第一次在cnbogs发文章,这次来个很基础的,主要给小白看. 在c#的winform编程中,我们经常会做登录窗体或欢迎窗体,并把他们作为启动窗体. 但是,我们有可能会遇到一些问题. 请看下面的代码: private void button1_Click(object sender, EventArgs e) { this.Close(); new Form2().Show(); } 这段代码想让form1中的button1在点击后关闭form1,show出form2,但是目的没有达到,form2

winform窗体中查找控件

private RichTextBox FindControl()        { RichTextBox ret = null;            try            {                Control[] controls = Application.OpenForms["MainForm"].Controls.Find("txtContent", false);                if (controls != nul

解决Winform应用程序中窗体背景闪烁的问题

本文转载:https://my.oschina.net/Tsybius2014/blog/659742 我的操作系统是Win7,使用的VS版本是VS2012,文中的代码都是C#代码. 这几天遇到一个问题,即我用一个嵌入图片的Panel作为Winform应用程序的背景,如下图所示: 这是一个Winform窗体,里面放置了一个Panel,Dock属性为Fill,BackgroundImage使用了<少年电世界>2003年第02期的封面图片,BackgroundImageLayout使用了Stret

C#将exe运行程序嵌入到自己的winform窗体中

以下例子是将Word打开,然后将它嵌入到winform窗体中,效果如下图:C将exe运行程序嵌入到自己的winform窗体中 - kingmax_res - iSport注意:该方法只适用于com的exe(如word,Excel之类),.net的编的exe就不能用这用方法嵌入到窗体中. using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using Syst

winform程序登陆后关闭登录窗体

用winform做程序的时候,我们一般都是在Program先启动登录窗体,然后登录成功后才创建主窗体,结果这就导致了登录窗体无法关闭 所以如果我们不在Program的程序入口先创建登录窗体的话就能完美实现登录成功后关闭登录窗体的功能了,直接贴代码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; n