自动判断TextBox和CmoboBox是否为空(遍历控件)

来源:互联网 发布:淘宝鹊桥佣金 编辑:程序博客网 时间:2024/05/21 19:54

   当我们在每个窗体上每次都得判断每个控件是否为空的时候,是不是很抓狂?判断完一个就是下一个接着另一个,看着那一长串if...else让人眼晕!其实,在面向对象的范畴里,对于相同的或者类似的代码只要重复3次以上我们应该想到面向对象的三大特性之一:封装。

    我们常用的输入数据的控件一般为TextBox和CmoboBox,在此我就以它们为例(需要用到控件的TabIndex属性和Tag属性,而Text属性代替Tag属性的话出现不了运行效果):

    这个例子也不是一蹴而就的,大体经过三次转变:

 

    函数代码

    第一次:  代码比较长,而且遍历是从控件的TabIndex属性由大到小进行的,运行结果不如人意~

    Public Shared Function IsEmptyText(ByVal Objs As Windows.Forms.Control.ControlCollection) As Boolean        '声明一个Control类的实例        Dim objCon As Control        '开始遍历Control类中的每一个控件        For Each objCon In Objs            'TypeOf 判断类型            If TypeOf (objCon) Is TextBox Then                If objCon.Text = "" Then                    MsgBox(objCon.Tag.ToString + "不能为空", vbOKOnly + vbExclamation, "警告")                    objCon.Focus()                    Return False                    Exit Function                End If                '利用TypeOf查看控件的类型            ElseIf TypeOf (objCon) Is ComboBox Then                If objCon.Text = "" Then                    MsgBox(objCon.Tag.ToString + "不能为空", vbOKOnly + vbExclamation, "警告")                    objCon.Focus()                    Return False                    Exit Function                End If            End If        Next        Return True    End Function

    第二次:    整合了第一次的分别判断

    Public Shared Function IsEmptyText(ByVal Objs As Form) As Boolean        For Each objCon As Control In Objs.Controls            If (TypeOf objCon Is TextBox) Or (TypeOf objCon Is ComboBox) Then                If objCon.Text.Trim = "" Then                    MsgBox(objCon.Tag + "不能为空!", vbOKOnly + vbInformation, "系统提示")                    objCon.Focus()                    Return False                    Exit For                Else                    Return True                End If            End If        Next    End Function


    第三次:优化第二次,解决了遍历的问题

    Public Shared Function IsEmptyText(ByVal Objs As Form) As Boolean        For i As Integer = Objs.Controls.Count - 1 To 0 Step -1            If (TypeOf Objs.Controls(i) Is TextBox) Or (TypeOf Objs.Controls(i) Is ComboBox) Then                If Objs.Controls(i).Text.Trim = "" Then                    MsgBox(Objs.Controls(i).Tag + "不能为空!", vbOKOnly + vbInformation, "系统提示")                    Objs.Controls(i).Focus()                    Return False                    Exit For                End If            End If        Next    End Function


    调用方法

        '调用IsEmptyText()函数,验证窗体的控件是否为空        Dim strIsEmpty        strIsEmpty = IsEmpty.IsEmptyText(Me)        If strIsEmpty = True Then            Exit Sub        End If


    运行效果

   

   

    也许,代码还不完美,甚至即使有现成的也看不懂(重量级地查询控件-sp1234)。但在学习的过程中首先得有这种意识,并尝试去做,而不论是从别人那里吸取过来还是自己研究出来,然后慢慢的在以后的学习中对以前的知识会有更高、更深刻、更全面的认识。