【前言】
在米总的要求下,我们组开始了对VB版机房的升级重构,升级后功能基本不变,但是要求使用七层架构高度解耦能够灵活更换数据库,使用VB.net语言。在重构的过程中发现老版的VB机房系统中有很多的if textbox =”” then , if textbox=”” then。 我一看,这是典型的代码坏味道呀。有没有什么办法能够很轻松的把窗体中的控件遍历了呢?于是就有了这篇博客。
【正文】
【原理】
System.Windows.Forms.Control 类 代表任意控件
Typeof 函数 Typeof(textbox) 获取textbox的控件类型
编码的思路就是检测窗体中的每一个控件是否为空,或者判断控件类型执行相应操作
【代码】
检测是否所有text框不为空
<span style="font-size:24px;">Public Class CheckTXTExist
Dim ex As New Exception
Public Sub CheckTxtExist(ByVal form As Windows.Forms.Form) 'form为参数
Dim ct As Control ' 定义ct为控件类
For Each ct In form.Controls ' 循环窗体中的控件
If (TypeOf ct Is TextBox) Then '如果控件为textbox
If ct.Text = "" Then '如果该textbox.text="" 就抛出一个异常
Throw ex
Exit Sub
End If
End If
If (TypeOf ct Is ComboBox) Then ' 如果控件为combobox 且text 属性为空则抛出一个异常
If ct.Text = "" Then
Throw ex
Exit Sub
End If
End If
Next
End Sub
End Class</span>
窗体中调用:
<span style="font-size:24px;"> Dim check As New CheckTXTExist
Try<span style="white-space:pre"> '利用异常处理程序抓捕由于控件text属性为空导致的程序异常。</span>
check.CheckTxtExist(Me)
Catch ex As Exception
MsgBox("请将信息补充完整")
Exit Sub
End Try</span>
清空窗体中所有的text
Public Class DeleteControlTXT
Public Sub DeleteControlTXT(ByVal form As Windows.Forms.Form) 'form为参数
Dim ct As Control ' 定义ct为控件类
For Each ct In form.Controls ' 循环窗体中的控件
If (TypeOf ct Is TextBox) Then '如果控件为textbox 则清空text 属性
ct.Text = ""
End If
If (TypeOf ct Is ComboBox) Then ' 如果控件为combobox 则清空text属性
ct.Text = ""
End If
Next
End Sub
End Class
【总结】
不将就,你就有收获;不思考,你就会错过。聪明的你,更喜欢怎么做呢?