【机房系统知识小结点系列】之遍历窗体中的控件,判断Text是否为空?

时间:2021-08-10 06:22:59

做机房系统时,几乎每个窗体中都会用到判断界面中的控件是否为空的情景。我们曾经是这样走来的:

第一版:

好处:对窗体界面中的Text等控件,逐一做判断,当用户输入某一项为空的时候,会议弹出框的形式,告诉用户,具体是哪一个控件,输入有误。

坏处:首先,界面看起来就很繁琐;其次,浪费了大量的手工工作,代码不具有可复用性;再次,编码的时候,如果控件数目比较多的话,容易忘记其中的某些控件。

        If (Trim(txtCardID.Text) = "" then'判断卡号是否为空
If Trim(txtRechargeCash.Text) = "" Then '判断充值金额,是否为空
If Trim(txtStuID.Text) = "" Then '判断学号是否为空
If Trim(txtStuName.Text) = "" Then '判断学生姓名是否为空
If Trim(cmbSex.Text) = "" Then '判断性别是否为空 MsgBox("固定用户中,***不能为空!", , "友情提示")
Else
End If
Else
End If
Else
End If
Else
End If
Else
End If


第二版:

好处:代码界面看起来,美观整洁。

坏处:首先,弹出框的提示太笼统了,不够具体,没有良好的用户体验。当某控件输入为空时,看到弹出的提示,会感到莫名其妙,不知道具体是哪里错了。其次,代码不具有可复用性。再次,编码的时候,如果控件数目比较多的话,容易忘记其中的某些控件。

        If (Trim(txtCardID.Text) = "" Or Trim(txtRechargeCash.Text) = "" Or Trim(txtStuID.Text) = "" Or Trim(txtStuName.Text) = "" Or Trim(cmbSex.Text) = "" Or Trim(txtDepartment.Text) = "" Or Trim(txtGrade.Text) = "" Or Trim(txtClass.Text) = "" Or Trim(cmbState.Text) = "") Then
MsgBox("固定用户中,输入信息不能为空!", , "友情提示")
Exit Sub
End If

第三版:

好处:首先,代码界面美观整洁。其次,弹出框的信息提示非常具体,明确的提示用户哪里出错了。再次,代码的封装,具有可复用性。把判断是否为空的函数,放在一个单独的类库中。然后,计算机自动帮您遍历界面中的所有控件,肯定不会拉掉其中的某些控件的。

坏处:计算机自动遍历界面中的所有控件,应该会很累的吧?不过,这少可以减轻程序猿的负担了。

Imports System.Windows.Forms '引用窗体中的控件

    Public Shared Function IsAllEmpty(ByVal frm As Form) As Boolean '判断文本信息是否为空
Dim control As New Control
For Each ct1 As Control In frm.Controls '变量窗体中的所有控件
If ct1.GetType() Is GetType(TextBox) Then '判断控件类型是否为TextBox
If ct1.Text.Length = 0 Then '判断TextBox中信息是否为空,返回True或False
MsgBox(ct1.Tag + "不能为空!", , "友情提示")
ct1.Focus()
Return False '文本信息为空,返回False
Exit Function
Else
Return True '文本信息不为空,返回True
End If
End If
Next
End Function

调用的时候:

     Dim isResultEmpty As Boolean
isResultEmpty = frmName.IsAllEmpty(Me)
If isResultEmpty = True Then '判断文本信息是否为空,为空返回False,不为空返回True
Else
End If

总结:学习的过程是循序渐进的,不要奢求一口吃个胖子。当你遇到一堆又一堆问题的时候,查询了很多的资料,发现自己更加头昏脑胀的时候。给你的建议是:先做一遍!无论对错,在做的过程中,对遇到的问题“逐一击破”!就像是给你一团乱糟糟的毛线,如果你实在是理不清头绪的话,就用剪刀随便找根线咔嚓一下,自己设定一个起始点就可以了。