博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大量文本框非空判断,如何提高灵活性?
阅读量:4677 次
发布时间:2019-06-09

本文共 3796 字,大约阅读时间需要 12 分钟。

做Winform界面的时候,上面有六个文本框需要判空,之前的思路大致是这样的,代码如下:

1 if (txtUserName.Text.Trim() == "") 2 { 3     MessageBox.Show("用户名不可以为空!", "温馨提示"); 4     txtUserName.Focus(); 5 } 6 else if (txtPassword.Text.Trim() == "") 7 { 8     MessageBox.Show("密码不可以为空!", "温馨提示"); 9     txtPassword.Focus();10 }11 else if (txtConfirmPassword.Text.Trim() == "")12 {13     MessageBox.Show("确认密码不可以为空!", "温馨提示");14     txtConfirmPassword.Focus();15 }16 else17 {18     MessageBox.Show("注册成功!", "温馨提示");19 }

代码中写了三个判断,大概就是做一个注册功能时所需要做的判空操作。可是,当我界面有六个文本框需要判空时,就觉得有点麻烦了,还要加三个if else判断。于是,就想能不能将判空操作提取出一个方法来进行呢,这样至少代码看起来不会那么冗余。于是,就有了下面的代码:

1 bool isEmpty = CheckEmpty(txtUserName, txtPassword, txtConfirmPassword); 2 if (isEmpty) 3 { 4     MessageBox.Show("注册成功!", "温馨提示"); 5 }   7 ///  8 /// 自定义方法,判断某文本框是否为空 9 /// 10 /// 要进行判断的标签11 /// 
是否全都不为空
12 public bool CheckEmpty(params TextBox[] txt)13 {14 bool flag = true;15 for (int i = 0; i < txt.Length; i++)16 {17 if (txt[i].Text.Trim() == "")18 {19 string name = txt[i].Name;20 //将name转换为对应label的值21 name = Change(name);22 MessageBox.Show(name + "不可以为空,请重新输入!","温馨提示");23 txt[i].Focus();24 flag = false;25 break;26 }27 }28 return flag;29 }30 31 /// 32 /// 将文本框Name值转换成对应的Label文本33 /// 34 /// 35 ///
36 private string Change(string name)37 {38 switch (name)39 {40 case "txtUserName":41 name = "用户名";42 break;43 case "txtPassword":44 name = "密码";45 break;46 case "txtConfirmPassword":47 name = "确认密码";48 break;49 default:50 break;51 }52 return name;53 }

这样一来,判空的代码看起来就清晰多了,将需要判空的文本框当做参数传过去即可。不过,又有一个问题,我们可以看到,Change方法中将文本框Name属性值转换为对应的label文本时,每添加一个判断,必须要增加一个case,这样一来,如果有一百个判断,那代码就太长了。那么,有没有一种方法,即可以替代Switch….Case又可以缩短代码行呢?答案是:有的,用Dictionary来代替。代码如下:

1 ///  2 /// 将文本框Name值转换成对应的Label文本 3 ///  4 ///  5 /// 
6 private string Change(string name) 7 { 8 Dictionary
myDic = new Dictionary
(); 9 myDic.Add("txtUserName", "用户名");10 myDic.Add("txtPassword", "密码");11 myDic.Add("txtConfirmPassword", "确认密码");12 return myDic[name];13 }

我们可以看到,Dictionary实现了同Switch一样的功能,代码从15行变成了5行,而且Switch每增加一个判断,需要增加三行代码,而Dictionary只需增加一行代码即可。到现在为止,判断这个操作看起来算是不那么麻烦了。我们知道,优秀的代码一般都是可扩展,可复用的。而目前,上面的代码并没有做到可复用。CheckEmpty方法中需要用到Change方法来转换提示信息,而Change方法中的字典是写死的。这个时候,如果想复用CheckEmpty方法就必须将Change方法拿掉,将其当做参数传过来。代码如下:

1 bool isEmpty = CheckEmpty(TopMessage(), txtUserName, txtPassword, txtConfirmPassword); 2 if (isEmpty) 3 { 4     MessageBox.Show("注册成功!", "温馨提示"); 5 } 6  7 ///  8 /// 提示信息转换 9 /// 10 /// 
11 private Dictionary
TopMessage()12 {13 Dictionary
myDic = new Dictionary
();14 myDic.Add("txtUserName", "用户名");15 myDic.Add("txtPassword", "密码");16 myDic.Add("txtConfirmPassword", "确认密码");17 return myDic;18 }19 20 ///
21 /// 自定义方法,判断某文本框是否为空22 /// 23 ///
要进行判断的标签24 ///
是否全都不为空
25 public bool CheckEmpty(Dictionary
myDic,params TextBox[] txt)26 {27 bool flag = true;28 for (int i = 0; i < txt.Length; i++)29 {30 if (txt[i].Text.Trim() == "")31 {32 string name = txt[i].Name;33 //将name转换为对应label的值34 name = myDic[name];35 MessageBox.Show(name + "不能为空,请重新输入","温馨提示");36 txt[i].Focus();37 flag = false;38 break;39 }40 }41 return flag;42 }

这样,CheckEmpty方法就可以复用了。在Web应用中,文本框是有一个属性可以设置是否允许为空的,不过Winform好像还没有,觉得有必要也加上。以上只是个人思考,如有不当或可改进之处,还望不吝赐教。

转载于:https://www.cnblogs.com/daley/p/8065834.html

你可能感兴趣的文章
Mybatis中mapper.xml文件判断语句中的单双引号问题
查看>>
frameset和frame
查看>>
饥饿的小易(规律,同余大数)
查看>>
ats透明代理
查看>>
PHP 小代码
查看>>
2016/03/16 codes
查看>>
2018年7月21日工作总结
查看>>
Linux shell 命令判断执行语法 ; , && , ||
查看>>
vim代码格式化插件clang-format
查看>>
What does the dot after dollar sign mean in jQuery when declaring variables?
查看>>
windows registry
查看>>
jquery 动画总结(主要指效果函数)
查看>>
【BZOJ4155】[Ipsc2015]Humble Captains
查看>>
【事件】阻止事件的冒泡
查看>>
mac os 安装 geckodriver
查看>>
【数据分析 R语言实战】学习笔记 第十一章 对应分析
查看>>
谁的青春不迷茫
查看>>
socket知识总结
查看>>
Qt做的简易图片浏览
查看>>
[开发技巧]·pandas如何保存numpy元素
查看>>