窗体UserForm——我也是类

时间:2022-07-22
本文章向大家介绍窗体UserForm——我也是类,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

UserForm是一种交互界面,方便与用户交互。如果设计了一个这样的交互界面:需要用户输入名称,然后根据名称来运行程序,那么应该如何实现?

最简单的方法自然是在普通模块设置一个公用变量,在UsefForm内部使用这个变量来接收设置的值,然后再执行其他程序。

首先,设置窗体界面:

公用模块:

Public sName As String

Sub TestUserFrom()
    FInputName.Show
        
    '要执行的程序…………
    MsgBox sName
End Sub

窗体代码:

Private Sub btnOK_Click()
    sName = tbName.Text
    Unload Me
End Sub

Private Sub btnCancel_Click()
    Unload Me
End Sub

这种设计存在的问题:窗体内部的代码依赖了外部的变量,这里举的例子比较简单,只有一个变量,如果设计的是一个较为复杂的窗体,变量很多的情况下,一旦需要复用窗体到其他程序,这时候,还要把普通模块中的变量一起复制过去。

所以,上面这种设计是不合适的,作为这个只需要对外传递某些数据的窗体来说,它的功能应该仅仅是对外传递数据,不依赖外部变量,不包含逻辑代码,它就是一个独立的对象,能够对外提供接口读取数据,这就是了。

窗体本身就是一种特殊的类,只是它多了一个交互界面,类的那些特性窗体是都具有的,所以,根据类的设计方法,给这个窗体设置一个可以读取的属性UserName:

'设置只读属性
Property Get UserName() As String
    UserName = tbName.Text
End Property

Private Sub btnOK_Click()
    '隐藏窗体
    Me.Hide
End Sub

Private Sub btnCancel_Click()
    tbName.Text = ""
    Me.Hide
End Sub

这里必须用Me.Hide这种隐藏的方式,如果使用Unload Me,会销毁窗体,那么TextBox设置的内容也会被销毁,读取属性也会出错。

外部普通模块调用的时候,就像是使用一个普通的类一样:

Sub TestUserFrom()
    Dim f As FInputName
    
    '创建窗体实例
    Set f = New FInputName
    '显示窗体
    f.Show
    
    Dim sName As String
    '获取设置的名称
    sName = f.UserName
    If sName <> "" Then
        '要执行的程序…………
        MsgBox sName
    End If
    
    Set f = Nothing
End Sub

这样,这个窗体就是一个独立完整的东西,可以在其他任何需要的地方直接调用它,然后读取它设置的数据。