WinForm中,实现TextBox的验证


最近在做一个项目,需求中要求实现TextBox的验证效果(如果TextBox内容为空,则在TextBox中显示提示信息,类似网页中表单下的输入框验证效果...),之前做过B/S架构的项目,虽然有段时间没碰ASP.NET了,但是对于验证效果还算是熟悉的(曾经用js、jQuery、AJAX都实现过这功能),本来以为很快就可以实现这功能,但是实际情况却不是这么顺利,前前后后时间加起来差不多用了两三个小时吧,可能和天气也有些关系吧,昨天是37℃,和今天温度差不多(本来想昨天发这篇文章来着,可是忙着忙着发现时间不够了,就今天发了),不过还好,终究还是把功能实现了,为此,特意又写了个例子,在这里分享出来,希望和大家一起学习、进步,废话不多说,进入正题。


新建一个WinForm项目(命名为Test),在项目中添加一个窗体(命名为FrmValidate),设置窗体居中显示,在窗体上,添加如下控件:


控件       Name属性值       Text属性值  

--------------------------------------------------------

Label     lblUName            用户名:

Label     lblUPwd               密     码:

TextBox  txtUName

TextBox  txtUPwd

Button    btnSave               保存


控件布局简单调整下就可以,反正我是喜欢把控件排列整齐,看着比较舒服。


接下来是重头戏了(因为主要就是靠这些代码实现功能的...),具体逻辑什么的不在累述了,讲起来感觉比较费力,因为我是按照自己的思路来实现的,哪一步该怎么走,在脑子里有个清晰的轮廓,就不在这里过多叙述了,直接贴代码,代码中有关键性注释。


对了,在这里先说下最终的功能:


用户名最少1位,最多10位,如果为空,用户名输入框中有提示(斜体显示);密码最少8位,最多15位,如果为空,密码输入框中有提示(斜体显示)。


一、先设置用户名和密码的最大范围及默认值:

        /// <summary>
        /// FrmValidate_Load()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmValidate_Load(object sender, EventArgs e)
        {
            //用户名最多允许输入10位。
            this.txtUName.MaxLength = 10;
            //密码最多允许输入15位。
            this.txtUPwd.MaxLength = 15;

            this.txtUName.Text = "KNET2010";
            this.txtUPwd.Text = "knet2010";
        }

二、声明全局变量:

        private bool f_IsNoUName = false;       //标识用户名是否为空。
        private bool f_IsUNameMouseClick = false;       //标识用户名输入框是否触发了MouseClick事件。

        private bool f_IsNoUPwd = false;       //标识密码是否为空。
        private bool f_IsUPwdMouseClick = false;       //标识密码输入框是否触发了MouseClick事件。

三、用户名验证部分代码:

        /// <summary>
        /// txtUName_TextChanged()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUName_TextChanged(object sender, EventArgs e)
        {
            //获取用户名长度。
            int uNameLength = this.txtUName.Text.Trim().Length;

            if (!f_IsUNameMouseClick)       //如果未触发MouseClick事件。
            {
                if (uNameLength == 0)       //如果用户名输入框为空。
                {
                    f_IsNoUName = true;
                    this.txtUName.Text = "最少1位,最多10位";
                    this.txtUName.Font = new Font("宋体", 9, FontStyle.Italic);
                    this.txtUName.ForeColor = ColorTranslator.FromHtml("#666666");
                }
            }
        }


        /// <summary>
        /// txtUName_MouseClick()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUName_MouseClick(object sender, MouseEventArgs e)
        {
            if (f_IsNoUName)        //如果用户名为空。
            {
                //标识触发了MouseClick事件。
                f_IsUNameMouseClick = true;
                this.txtUName.Text = "";
            }
        }


        /// <summary>
        /// txtUName_Leave()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUName_Leave(object sender, EventArgs e)
        {
            //获取用户名长度。
            int uNameLength = this.txtUName.Text.Trim().Length;

            if (uNameLength == 0)       //如果用户名输入框为空。
            {
                //标识用户名为空。
                f_IsNoUName = true;
                this.txtUName.Text = "最少1位,最多10位";
                this.txtUName.Font = new Font("宋体", 9, FontStyle.Italic);
                this.txtUName.ForeColor = ColorTranslator.FromHtml("#666666");
            }
        }


        /// <summary>
        /// txtUName_KeyDown()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUName_KeyDown(object sender, KeyEventArgs e)
        {
            //恢复正常字体。
            this.txtUName.Font = new Font("宋体", 9);
            this.txtUName.ForeColor = ColorTranslator.FromHtml("#000000");

            //获取用户名长度。
            int uNameLength = this.txtUName.Text.Trim().Length;

            if (uNameLength == 0)       //如果用户名输入框为空。
            {
                //标识用户名为空。
                f_IsNoUName = true;
            }
            else
            {
                //标识用户名不为空。
                f_IsNoUName = false;
            }

            if (f_IsNoUName)        //防止按了删除按键后,用户名为空的情况。
            {
                f_IsNoUName = false;
            }
        }



        /// <summary>
        /// txtUName_KeyUp()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUName_KeyUp(object sender, KeyEventArgs e)
        {
            //获取用户名长度。
            int uNameLength = this.txtUName.Text.Trim().Length;

            if (uNameLength >= 1)       //如果用户名不少于1位。
            {
                if (f_IsNoUName)        //如果用户名为空。
                {
                    return;
                }

                //标识用户名不为空。
                f_IsNoUName = false;
            }
            else
            {
                //标识用户名为空。
                f_IsNoUName = true;
            }
        }

四、密码验证部分代码:

        /// <summary>
        /// txtUPwd_TextChanged()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUPwd_TextChanged(object sender, EventArgs e)
        {
            //获取密码长度。
            int uPwdLength = this.txtUPwd.Text.Trim().Length;

            if (!f_IsUPwdMouseClick)       //如果未触发MouseClick事件。
            {
                if (uPwdLength == 0)       //如果密码输入框为空。
                {
                    //标识密码为空。
                    f_IsNoUPwd = true;
                    this.txtUPwd.Text = "最少8位,最多15位";
                    this.txtUPwd.Font = new Font("宋体", 9, FontStyle.Italic);
                    this.txtUPwd.ForeColor = ColorTranslator.FromHtml("#666666");
                }
            }
        }


        /// <summary>
        /// txtUPwd_MouseClick()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUPwd_MouseClick(object sender, MouseEventArgs e)
        {
            if (f_IsNoUPwd)        //如果密码为空。
            {
                //标识触发了MouseClick事件。
                f_IsUPwdMouseClick = true;
                this.txtUPwd.Text = "";
            }
        }


        /// <summary>
        /// txtUPwd_Leave()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUPwd_Leave(object sender, EventArgs e)
        {
            //获取密码长度。
            int uPwdLength = this.txtUPwd.Text.Trim().Length;

            if (uPwdLength == 0)       //如果密码输入框为空。
            {
                //标识密码为空。
                f_IsNoUPwd = true;
                this.txtUPwd.Text = "最少8位,最多15位";
                this.txtUPwd.Font = new Font("宋体", 9, FontStyle.Italic);
                this.txtUPwd.ForeColor = ColorTranslator.FromHtml("#666666");
            }
        }


        /// <summary>
        /// txtUPwd_KeyDown()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUPwd_KeyDown(object sender, KeyEventArgs e)
        {
            //恢复正常字体。
            this.txtUPwd.Font = new Font("宋体", 9);
            this.txtUPwd.ForeColor = ColorTranslator.FromHtml("#000000");

            //获取密码长度。
            int uPwdLength = this.txtUPwd.Text.Trim().Length;

            if (uPwdLength == 0)       //如果密码输入框为空。
            {
                //标识密码为空。
                f_IsNoUPwd = true;
            }
            else
            {
                //标识密码不为空。
                f_IsNoUPwd = false;
            }

            if (f_IsNoUPwd)        //防止按了删除按键后,密码为空的情况。
            {
                f_IsNoUPwd = false;
            }
        }



        /// <summary>
        /// txtUPwd_KeyUp()。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txtUPwd_KeyUp(object sender, KeyEventArgs e)
        {
            //获取密码长度。
            int uPwdLength = this.txtUPwd.Text.Trim().Length;

            if (uPwdLength >= 1)       //如果密码不少于1位。
            {
                if (f_IsNoUPwd)        //如果密码为空。
                {
                    return;
                }

                //标识密码不为空。
                f_IsNoUPwd = false;
            }
            else
            {
                //标识密码为空。
                f_IsNoUPwd = true;
            }
        }

五、保存按钮触发的事件:

        /// <summary>
        /// “保存”。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnSave_Click(object sender, EventArgs e)
        {
            int uNameLength = this.txtUName.Text.Trim().Length;
            int uPwdLength = this.txtUPwd.Text.Trim().Length;

            if (uNameLength < 1 || f_IsNoUName)
            {
                MessageBox.Show("用户名最少1位!");
                this.txtUName.Focus();
                return;
            }

            if (uPwdLength < 8 || f_IsNoUPwd)
            {
                MessageBox.Show("密码最少8位!");
                this.txtUPwd.Focus();
                return;
            }

            //如果用户名与密码有效。
            MessageBox.Show("保存成功!");
        }

好了,全部代码都贴出来了,呃,感觉好像缺点什么,无图无真相,哈哈,其实我也纠结这篇文章到底要不要配图,还是配上些图吧,也算是图文并茂了吧,哈哈~

初始效果图:


最终效果图:





总结:

1、WinForm中实现验证效果与ASP.NET不同(感觉不如ASP.NET好用,当时我就在那几个事件中被变量的值搞的有点晕了...)。

2、还是尽量不要在WinForm中实现类似ASP.NET中的效果好些,因为实现起来真心麻烦...

3、本次主要用到的几个事件:TextBox_TextChanged()、TextBox_MouseClick()、TextBox_Leave()、TextBox_KeyDown()、TextBox_KeyUp()。


好了,以上就是本文所有内容,这也是我在CSDN中发表的第一篇长博文,好东西愿意与大家一起分享,共同学习,共同进步!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值