VB限制窗体内所有文本框为空

做系统的时候经常遇到限制窗体中文本框为空的情况,如果逐个判断代码写起来会很慢,想了个比较简单的方法,从窗体控件的角度出发。

代码如下:

Private Sub cmdOk_Click()
    Dim s As Control
    Dim frm As Form
    For Each s In frm
        If TypeOf s Is TextBox Then
            MsgBox "输入不能为空"
            Exit Sub
        End If
    Next
End Sub

如果窗体中有一个文本框允许空,就不行了,所以还得进一步思考一下。

跟德鹏商量后得出下面这个代码

Public Sub IsEmpty(pForm As Form)        '模块中定义公有过程判断窗体中的文本框有否有为空的
    Dim a As Control
      
    For Each a In pForm.Controls         '对窗体中的控件逐个遍历
        If a.Name = "txtSno" Then        '判断控件的名称,根据名称进行操作
            If a.Text = "" Then
                MsgBox "学号不能为空",vbOKOnly,"错误"
            End If
        ElseIf a.Name = "txtName" Then
            If a.Text = "" Then
                MsgBox "姓名不能为空","错误"
            End If
        ElseIf a.Name = "txtSex" Then
            If a.Text = "" Then
                MsgBox "性别不能为空","错误"
            End If
        ElseIf a.Name = "txtSchool" Then
            If a.Text = "" Then
                MsgBox "学校不能为空","错误"
            End If
        End If
    Next
End Sub


然后再在窗体中调用

Private Sub cmdOk_Click()
    Call IsEmpty(Me)    '调用模块中定义的公有过程
End Sub

如果在不同的窗体中,增加了新的文本框,那么只需在模块儿定义的过程中添加判断即可。这种方法,显得有点笨,但是也可以解决问题。

理想中的函数具有这样的功能。模块儿中的函数包含两个参数,一个是文本框控件数组,另一个是窗体控件。第一个参数接收所在窗体中,要判断的文本框,第二个参数传递具体窗体。但是在实现选择性的文本框判断的时候,就遇到麻烦了。现在还没有解决,先保留思路。

……

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...