进程内部件可以用作提供过程和对话框的库,使用进程内部件既能够节省编程时间,又能为应用程序提供一致的外观和风格。
注意 创建一个 ActiveX DLL 示例需要分为几步,这个帮助主题只是其中一步。要访问该帮助主题,选择帮助主题“创建 ActiveX DLL”即可。
本主题介绍对象如何控制模式的或无模式的对话框。两种情况都采用了同一个窗体,如图 2.3 所示。
图 2.3 “dlgDemo”对话框
要在 ThingDemo 工程中添加窗体,请按照以下步骤执行:
重点 在使用工程组时,在添加新的模块之前,必须确保活动的工程是正确的。
设计一个 Visual Basic 窗体,并把它保存为 ThingDemo_dlgDemo.frm。下表列出了窗体中对象的属性设置。
对象 | 属性 | 设置值 |
Form | Name BorderStyle Caption |
dlgDemo Fi xed Dialog Dialog Box |
TextBox | Name Text |
txtDemo (Null) |
客户应用程序并不直接调用对话框,因为窗体是私有类。客户应用程序不能创建私有类的实例,也不能将私有类的实例传递到客户应用程序。与此有关的详细说明,请参阅“部件设计的一般准则”的“属性和方法中所用的数据类型”。
为了显示对话框,客户应用程序需要调用全局的 Dialogs 对象的 ShowDialog 方法,这将创建并显示 dlgDemo 窗体。
要在 dlgDemo 窗体中添加代码,请按照以下步骤执行:
'
声明一个事件。Event NotifyClients(ByVal Data As String)
Private Sub txtDemo_Change()
RaiseEvent NotifyClients(txtDemo.Text)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, _ UnloadMode As Integer) '
如果按了Close
按钮,则'
隐藏对话框,
但是不卸载它。If UnloadMode = vbFormControlMenu Then
Cancel = True
Me.Visible = False
End If
End Sub
如果 dlgDemo 以模式对话框的形式显示,那么隐藏它而不是卸载它将允许 Dialogs 类的 ShowDialog 方法检索文本框的值。
要创建 Dialogs 类,请按照以下步骤执行:
Dialogs
。Private WithEvents mdlg As dlgDemo
Event NotifyClients(ByVal Data As String)
Private Sub mdlg_NotifyClients(ByVal Data As String)
RaiseEvent NotifyClients(Data)
End Sub
一旦对话框的文本框内容改变,Dialogs 对象就可以从它的 dlgDemo 窗体接收到 NotifyClients 事件。Dialogs 对象立即产生它自己的 NotifyClients 事件,并向它的客户应用程序传递数据。
Private Sub Class_Initialize()
Debug.Print "Dialogs object created"
Set mdlg = New dlgDemo
End Sub
Private Sub Class_Terminate()
Debug.Print "Dialogs object terminated"
Unload mdlg
Set mdlg = Nothing
End Sub
在终止时,控制窗体的对象应该卸载该窗体,并把它对该窗体的引用设为 Nothing,从而避免孤立的窗体占用资源。
在代码窗口中,修改新创建的 Function 过程如下所示:
Public Function ShowDialog( _
Optional ByVal Text As String = "", _
Optional ByVal Modal As Boolean = True) _
As String
With mdlg
.txtDemo.Text = Text
If Modal Then
.Caption = "Modal Dialog Box"
.Show vbModal
ShowDialog = .txtDemo.Text
Else
.Caption = "Modeless Dialog Box"
.Show vbModeless
End If
End With
End Function
可选的 Typed 参数使编译器能够捕捉到类型不匹配错误,这样就可以在运行之前发现错误。关于可选的 Typed 参数,请参阅《Visual Basic 程序员指南》的“编程基础”。
显示对话框的 ShowDialog 方法有两个可选的参数:
在显示对话框之前,Text 参数被赋给 dlgDemo 上的文本框。Modal 参数的缺省值是 True,如果忽略它,对话框将是模式的。
如果对话框为模式的,那么在用户关闭了对话框之后,ShowDialog 方法返回 txtDemo
文本框的内容。
如果对话框为无模式的,则不需要返回任何值。因为只要文本框的内容改变了,客户应用程序立刻就能收到 NotifyClients 事件。
详细信息 关于事件,在“部件设计的一般准则”的“给类添加事件”中讨论。
创建 ActiveX DLL 示例需要好几步,该帮助主题只是其中一步。
目的 | 请参阅 |
到下一步 | 在 TestThing 中使用全局对象 |
从头开始 | 创建一个 ActiveX DLL |