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

   当我们在每个窗体上每次都得判断每个控件是否为空的时候,是不是很抓狂?判断完一个就是下一个接着另一个,看着那一长串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


    运行效果

    自动判断TextBox和CmoboBox是否为空(遍历控件)_第1张图片

   

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

   

   

你可能感兴趣的:(自动判断TextBox和CmoboBox是否为空(遍历控件))