文本框判空,如何提高灵活性?
来源:互联网 发布:什么是数据的有效性 编辑:程序博客网 时间:2024/05/18 20:12
做Winform界面的时候,上面有六个文本框需要判空,之前的思路大致是这样的,代码如下:
if (txtUserName.Text.Trim() == ""){ MessageBox.Show("用户名不可以为空!", "温馨提示"); txtUserName.Focus();}else if (txtPassword.Text.Trim() == ""){ MessageBox.Show("密码不可以为空!", "温馨提示"); txtPassword.Focus();}else if (txtConfirmPassword.Text.Trim() == ""){ MessageBox.Show("确认密码不可以为空!", "温馨提示"); txtConfirmPassword.Focus();}else{ MessageBox.Show("注册成功!", "温馨提示");}
代码中写了三个判断,大概就是做一个注册功能时所需要做的判空操作。可是,当我界面有六个文本框需要判空时,就觉得有点麻烦了,还要加三个if else判断。于是,就想能不能将判空操作提取出一个方法来进行呢,这样至少代码看起来不会那么冗余。于是,就有了下面的代码:
bool isEmpty = CheckEmpty(txtUserName, txtPassword, txtConfirmPassword);if (isEmpty){ MessageBox.Show("注册成功!", "温馨提示");}
/// <summary>/// 自定义方法,判断某文本框是否为空/// </summary>/// <param name="txt">要进行判断的标签</param>/// <returns>是否全都不为空</returns>public bool CheckEmpty(params TextBox[] txt){ bool flag = true; for (int i = 0; i < txt.Length; i++) { if (txt[i].Text.Trim() == "") { string name = txt[i].Name; //将name转换为对应label的值 name = Change(name); MessageBox.Show(name + "不可以为空,请重新输入!","温馨提示"); txt[i].Focus(); flag = false; break; } } return flag;}/// <summary>/// 将文本框Name值转换成对应的Label文本/// </summary>/// <param name="name"></param>/// <returns></returns>private string Change(string name){ switch (name) { case "txtUserName": name = "用户名"; break; case "txtPassword": name = "密码"; break; case "txtConfirmPassword": name = "确认密码"; break; default: break; } return name;}
这样一来,判空的代码看起来就清晰多了,将需要判空的文本框当做参数传过去即可。不过,又有一个问题,我们可以看到,Change方法中将文本框Name属性值转换为对应的label文本时,每添加一个判断,必须要增加一个case,这样一来,如果有一百个判断,那代码就太长了。那么,有没有一种方法,即可以替代Switch….Case又可以缩短代码行呢?答案是:有的,用Dictionary来代替。代码如下:
/// <summary>/// 将文本框Name值转换成对应的Label文本/// </summary>/// <param name="name"></param>/// <returns></returns>private string Change(string name){ Dictionary<string, string> myDic = new Dictionary<string, string>(); myDic.Add("txtUserName", "用户名"); myDic.Add("txtPassword", "密码"); myDic.Add("txtConfirmPassword", "确认密码"); return myDic[name];}
我们可以看到,Dictionary实现了同Switch一样的功能,代码从15行变成了5行,而且Switch每增加一个判断,需要增加三行代码,而Dictionary只需增加一行代码即可。到现在为止,判断这个操作看起来算是不那么麻烦了。我们知道,优秀的代码一般都是可扩展,可复用的。而目前,上面的代码并没有做到可复用。CheckEmpty方法中需要用到Change方法来转换提示信息,而Change方法中的字典是写死的。这个时候,如果想复用CheckEmpty方法就必须将Change方法拿掉,将其当做参数传过来。代码如下:
bool isEmpty = CheckEmpty(TopMessage(), txtUserName, txtPassword, txtConfirmPassword);if (isEmpty){ MessageBox.Show("注册成功!", "温馨提示");}
/// <summary>/// 提示信息转换/// </summary>/// <returns></returns>private Dictionary<string, string> TopMessage(){ Dictionary<string, string> myDic = new Dictionary<string, string>(); myDic.Add("txtUserName", "用户名"); myDic.Add("txtPassword", "密码"); myDic.Add("txtConfirmPassword", "确认密码"); return myDic;}
/// <summary>/// 自定义方法,判断某文本框是否为空/// </summary>/// <param name="txt">要进行判断的标签</param>/// <returns>是否全都不为空</returns>public bool CheckEmpty(Dictionary<string,string> myDic,params TextBox[] txt){ bool flag = true; for (int i = 0; i < txt.Length; i++) { if (txt[i].Text.Trim() == "") { string name = txt[i].Name; //将name转换为对应label的值 name = myDic[name]; MessageBox.Show(name + "不能为空,请重新输入","温馨提示"); txt[i].Focus(); flag = false; break; } } return flag;}
这样,CheckEmpty方法就可以复用了。在Web应用中,文本框是有一个属性可以设置是否允许为空的,不过Winform好像还没有,觉得有必要也加上。以上只是个人思考,如有不当或可改进之处,还望不吝赐教。
- 文本框判空,如何提高灵活性?
- freemark如何判空容错
- Js_文本框判空+过滤空格+回车监听
- form表单提交过来的文本框内容判空处理
- 提高灵活性,简化 IT
- 解决POI读取Excel如何判断行是不是为空
- java 如何避免“!=null”式的判空语句?
- 如何避免判空(!=null)语句
- 如何培养思维灵活性
- 字符串的判空
- java中的判空
- 二进制判空
- velocity 判空
- JAVA判空、null
- freemarker判空
- JavaScript前台判空
- java 判空方式
- NSNULL判空Category
- 强制切换active
- jvm-内存划分
- Matlab报错BLAS loading error: dlopen: cannot load any more object with static TLS处理办法
- 查看linux系统版本
- Linux如何查看是几核的有多少个CPU
- 文本框判空,如何提高灵活性?
- Android WebView使用loadData方法来加载html数据
- shell 将相同字母后面的数字相加在一起
- 2017-11-01
- SpringCloud教程 | 第三篇: 服务消费者(Feign)
- web渗透—wireshark过滤
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
- Android M 原生Contacts — 界面和数据库
- javascript 之作用域链-07