纵观机房收费系统,判断文本框、组合框为空问题无非两种情况。第一种:判断窗体中所有文本框、组合框是否为空。第二种:判断一部分文本框、组合框是否为空。下面看看是如何实现这两种情况的。

第一种:判断窗体中所有文本框、组合框是否为空。

''' <summary>
''' 判断窗体中所有文本框、组合框输入内容是否为空,若窗体中有允许为空的文本框或组合框,
'''则不能使用此函数
''' </summary>
''' <param name="frm"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function IsAllEmptyText(ByVal frm As Form) As Boolean
Dim control As New Control For Each control In frm.Controls '遍历窗体中所有的控件
If TypeOf control Is TextBox Then '判断控件是不是文本框
If control.Text.Trim = "" Then '判断文本框内容是否为空
MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
control.Focus()
Return True
Exit Function
End If
ElseIf TypeOf control Is ComboBox Then '判断控件是不是组合框
If control.Text.Trim = "" Then
MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
Return True
Exit Function
End If
End If
Next Return False
End Function

第二种:判断一部分文本框、组合框是否为空。

''' <summary>
''' 判断控件数组中的控件的Text属性是否为空
''' </summary>
''' <param name="arrayControl"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function IsSomeEmptyText(ByVal arrayControl() As Control) As Boolean
Dim control As New Control For Each control In arrayControl '遍历数组中所有元素
If TypeOf control Is TextBox Then '判断控件是不是文本框
If control.Text.Trim = "" Then '判断文本框内容是否为空
MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
control.Focus()
Return True
Exit Function
End If
ElseIf TypeOf control Is ComboBox Then '判断控件是不是组合框
If control.Text.Trim = "" Then
MsgBox(control.Tag.ToString + "不能为空!", vbOKOnly, "温馨提示")
Return True
Exit Function
End If
End If
Next
Return False
End Function

调用函数:

 Dim arrayControl() As Control
ReDim Preserve arrayControl(1) arrayControl(0) = txtUserName
arrayControl(1) = txtPassword
If UIEmpty.IsSomeEmptyText(arrayControl) Then
Exit Sub
End If

但按上面执行的话,发现存在些问题


        1.此方法遍历时是从后向前弹出对话框。比如:用户名和密码都为空,它会先弹出密码不能为空,再弹出用户名不能为空。我们如果采用此方法,在放置控件时需注意一下顺序。


        2.控件不能跨容器遍历。比如控件不在一个容器内,有在form体中的,也有在GroupBox中的,就得分别单独判断!

为此自己进行了一下改进,但相应的麻烦了一些。
        自己定义了一个结构体数组,把控件和对应的文本框信息(如:学号、姓名……)进行封装,遍历到相应的控件,如果为空,就可以有对应的提示。

1.定义一个结构体数组:

    '定义结构体Term
Private Structure Term
Dim controlSub As Control
Dim strText As String
Sub New(ByVal controlSub As Control, ByVal strText As String)
With Me
.controlSub = controlSub
.strText = strText
End With
End Sub
End Structure

2.定义一个该类型的结构体数组,并初始化:

        '定义一个term类型的结构体数组
Dim arrayControl() As Term
ReDim Preserve arrayControl(7) '初始化数组
arrayControl(0) = New Term(txtCardNo, "卡号")
arrayControl(1) = New Term(txtStudentNo, "学号")
arrayControl(2) = New Term(txtName, "姓名")
arrayControl(3) = New Term(comboSex, "性别")
arrayControl(4) = New Term(txtDepName, "系别")
arrayControl(5) = New Term(comboGrade, "年级")
arrayControl(6) = New Term(txtClass, "班级")
arrayControl(7) = New Term(txtMoney, "金额")

3.调用函数进行判断:

        '调用IsSomeEmptyText()函数,检测是否输入文本内容
If IsSomeEmptyText(arrayControl) Then
Exit Sub
End If

函数内容:

    ''' <summary>
''' 判断控件数组中的控件的Text属性是否为空,并进行相应提示
''' </summary>
''' <param name="arrayControl">需要遍历的结构体数组</param>
''' <returns>Boolean值,true表示为空,false表示不为空</returns>
Private Function IsSomeEmptyText(ByVal arrayControl() As Term) As Boolean
Dim termControl As Term '声明Term类型变量termControl '遍历结构体数组中所有元素,如结构体中的控件文本为空,则找其对就的字符串进行相应提示
For Each termControl In arrayControl '遍历结构体数组中所有元素
If TypeOf termControl.controlSub Is TextBox Then '判断控件是不是文本框
If termControl.controlSub.Text.Trim = "" Then '判断文本框内容是否为空
MessageBox.Show(termControl.strText & "不能为空", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
termControl.controlSub.Focus()
Return True
Exit Function
End If
ElseIf TypeOf termControl.controlSub Is ComboBox Then '判断控件是不是组合框
If termControl.controlSub.Text.Trim = "" Then '判断文本框内容是否为空
MessageBox.Show(termControl.strText & "不能为空", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
termControl.controlSub.Focus()
Return True
Exit Function
End If
End If
Next
Return False
End Function

综上所述,所改进的方法,略显麻烦,但通过手动写入内容,显示时还是蛮灵活的。

1.不受任何容器的限制。

2.控件项随意显示。不需要显示的,像只读文本框“充值余额”,就完全不用搭理他。

3.顺序随意。结构体数据初始化,给他个什么顺序,就会按要求乖乖显示。

机房收费系统总结之4——VB.NET 轻松解决判断文本框、组合框为空问题的更多相关文章

  1. 【机房收费系统 4】:VB获取标准北京时间,免除时间误差

    导读:这又是师傅给我指出的一个问题,说实话,其实开始根本没有当回事,觉得麻烦,可是,等我完成了获取标准北京时间后,我发现,这一步,是必须的.谢谢师傅对我的严格要求,让我一步一步的成长起来! 一.事件缘 ...

  2. 机房收费系统(VB.NET)个人版总结

    重构版个人机房收费系统大概从暑假开学開始进行.花了不到一个半月的时间才完毕.以下对我在重构过程中的一写理解. 1.系统设计一个非常重要的目的就是重用.而要做到重用,低耦合是最有效的手段回想一下我们C/ ...

  3. VB.NET版机房收费系统---七仙女之系统登录

    VB.NET第一版机房收费系统,告一段落,验收的时候.问题也是大大的存在,没实用上设计模式,什么触发器.存储过程,都没实用上.看看其她小伙伴的,七层实现登录?那是什么东东,相比較我的三层而言,多了两倍 ...

  4. 机房收费系统——在VB中将MSHFlexGrid控件中的数据导出到Excel

    机房收费系统中,好多查询的窗体都包含同一个功能:将数据库中查询到的数据显示在MSHFlexGrid控件中,然后再把MSHFlexGrid控件中的数据导出到Excel表格中. 虽然之前做过学生信息管理系 ...

  5. 机房收费系统之vb报表的模板的制作(一)

           机房收费系统有报表的功能,报表对于我们来说有点陌生.这不是会计的事吗?怎么机房收费系统也參合进来了,事实上我们学会了报表的步骤.理解了代码后.报表变得不是非常难,世上无难事,仅仅怕肯登攀 ...

  6. VB.NET 机房收费系统项目总结

    VB.NET机房收费系统项目总结 从2013年5月3日——2013年8月20日历时三个多月的.NET机房收费系统终于完成了.项目做完了,真有一种如释重负的感觉. 下面我将从文档.UML图,代码这三个方 ...

  7. VB.NET版机房收费系统---导出Excel表格

    datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...

  8. VB.NET版机房收费系统---外观层如何写

    外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...

  9. VB.NET版机房收费系统---报表

    报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据 ...

随机推荐

  1. word排版的一些小技巧积累

    先准备好样式 编辑前,可以先根据要求,设置好样式,可以免去编辑好后,再修改格式(这样要改好多文本的格式) docx doc的样式不能通用. .docx转.doc 从word2013自带的编辑公式,编辑 ...

  2. Chapter 4.开放-封闭原则

    开放-封闭原则:是说软件实体应该可以扩展,但不可修改. 设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化. 面对需求,对程序的改动是通 ...

  3. Amazon的AWS账单看起来不是很方便

    发了一个PDF格式的收据,只写了收取的费用,EC2下面的明细没有. DetailAmazon Simple Notification Service $0.00Charges $0.00Estimat ...

  4. 【BZOJ1132】【POI2008】Tro 计算几何 叉积求面积

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  5. awk内置变量 awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

    ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 ...

  6. LVS集群的体系结构

    2.LVS主要组成部分为: 负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称 ...

  7. HDOJ 1325 并查集

    跟小希的迷宫基本一样,只是此题是有向图,要注意:1无环 2 只有一个入度为0的结点(根结点), 不存在入度大于1的结点.输入结束条件是两个负数,而不是-1,不然会TLE. #include<st ...

  8. QPointer更安全,QScopedPointer自动出范围就删除,QSharedDataPointer帮助实现隐式共享

    http://blog.csdn.net/hai200501019/article/details/8474582http://blog.csdn.net/hai200501019/article/d ...

  9. Android 设备管理器 阻止用户取消激活

    该方案测试可行,系统版本4.4.2.它算是借助android系统的一个bug,不确定在后续更高的版本中是否修复. 该功能和360防卸载功能一样的实现原理. 主要的参考资料是:http://bbs.pe ...

  10. C# 仿金山毒霸启动和关闭淡入淡出效果

    原文 C# 仿金山毒霸启动和关闭淡入淡出效果 01 #region 窗体关闭效果 02   03 #region 私有方法 04 [DllImportAttribute("user32.dl ...