最近在做一个项目,需求中要求实现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中发表的第一篇长博文,好东西愿意与大家一起分享,共同学习,共同进步!