调试的时候出现“模块之间循环相关”的警告。 希望各位高手帮忙解决 。。先谢谢了
解决方案 »
- 关于MAPX的框选```
- 关于C/S结构的网络版数据库系统开发中的网络通讯协议格式写在代码中是什么意思???
- 高手请进!有关VB6.0与地图问题!!
- 我做的东西是单机版的,没有实用价值,想改为网络版,帮忙献策!
- 用Setup Factory 6.0打包能否实现文件关联?
- FORTRAN程序中include(MRFGT),include(MFILNO)是啥意思?
- 有没有人用DELPHI做COM DLL在VB中使用过?
- combobox的内容改变后,发生什么事件?
- 这个SQL语句为什么不行?
- 选择了Shockwave flash控件可是在那里加入~~~~~~~~~flash动化呢~?另外
- 关于判断网络是否联通的函数
- 100分,求高高手一个程序!!
'里面的事件有问题
Event NotifyClients(ByVal Data As String)'dialogs
'Private Sub mdlg_NotifyClients(ByVal Data As String)
' RaiseEvent NotifyClients(Data)
'End Sub'dlgDemo
Private Sub mdgs_NotifyClients(ByVal Data As String)
Me.Caption = Data
End Sub
1. 按 Ctrl+F5 键运行工程组。第一个出现的将是对话框,它的标题是Form1:
2. 输入新的标题,然后关闭对话框。这时主窗体出现,显示的是新的标题。
3. 在主窗体上单击,创建另一个 Dialogs 对象,它将显示一个无模式的对话框,包括主窗体当前的标题。再输入一个新的标题,可以看到每次击键都会使主窗体的标题发生改变:
对文本框内容的每次修改都将产生从 dlgDemo 到 Dialogs 对象的一个 NotifyClients 事件。然后 Dialogs 对象将产生自己的NotifyClients 事件,主窗体将接收到这个事件。差不多就行
<在ThingDemo工程中添加窗体>
进程内部件可以用作提供过程和对话框的库,使用进程内部件既能够节省编程时间,又能为应用程序提供一致的外观和风格。本主题介绍对象如何控制模式的或无模式的对话框。两种情况都采用了同一个窗体,如下图所示。图就是dlgDemo窗体要在 ThingDemo 工程中添加窗体,请按照以下步骤执行:
1. 在“工程资源管理器”窗口中,单击“ThingDemo“使之成为活动的工程。
2. 在“工程”菜单中,单击“添加窗体”打开“添加窗体”对话框。双击“添加窗体”图标添加一个窗体。设计一个 Visual Basic 窗体,并把它保存为 ThingDemo_dlgDemo.frm。客户应用程序并不直接调用对话框,因为窗体是私有类。客户应用程序不能创建私有类的实例,也不能将私有类的实例传递到客户应用程序。与此有关的详细说明,请参阅第八章“部件设计的一般准则”的“属性和方法中所用的数据类型”。为了显示对话框,客户应用程序需要调用全局Dialogs 对象的ShowDialog方法,这将创建并显示 dlgDemo 窗体。要在 dlgDemo 窗体中添加代码,请按照以下步骤执行:
1. 双击 dlgDemo,打开它的代码窗口,添加下列代码。
'声明一个事件。
Event NotifyClients(ByVal Data As String)
2. 向文本框的 Change 事件添加下列代码。当文本框的内容改变时会产生 NotifyClients 事件,并以新的文本内容作为事件的参数。
Private Sub txtDemo_Change()
RaiseEvent NotifyClients(txtDemo.Text)
End Sub
3. 为了禁止在没有通知 Dialogs 对象的情况下关闭对话框,可以把下列代码放在 QueryUnload 事件过程中。
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 类,请按照以下步骤执行:
1. 在“工程”菜单中,选择“添加类模块”打开“添加类模块”对话框。双击“类模块”图标向工程中添加类模块。
2. 在“属性”窗口中,将类的 Name 属性改为 Dialogs。
3. 在“属性”窗口中,将 Instancing 属性改为 GlobalMultiUse。这样,即使没有显式地创建 Dialogs 对象,也可以调用 ShowDialog 方法。
4. 在声明部分加入下列代码,它的作用是:创建一个 WithEvents 变量,以便处理 dlgDemo 的 NotifyClients 事件;创建一个事件,使Dialogs 对象能够为自己的客户应用程序产生这个事件。
Private WithEvents mdlg As dlgDemo
Event NotifyClients(ByVal Data As String)
5. 在“对象”框中,选择“mdlg“来显示由dlgDemo 产生的 NotifyClients事件的事件过程。添加下列代码:
Private Sub mdlg_NotifyClients(ByVal Data As String)
RaiseEvent NotifyClients(Data)
End Sub
一旦对话框的文本框内容改变,Dialogs 对象就可以从它的dlgDemo 窗体接收到 NotifyClients 事件。Dialogs 对象立即产生它自己的 NotifyClients 事件,并向它的客户应用程序传递数据。
6. 在代码窗口的“对象”框中,选择“类”。在“过程”框中,选择“初始化”。向 Class_Initialize 事件过程中添加下列代码:
Private Sub Class_Initialize()
Debug.Print "Dialogs object created"
Set mdlg = New dlgDemo
End Sub
7. 在“过程”框中,选择“终止”。向 Class_Terminate 事件过程中添加下列代码:
Private Sub Class_Terminate()
Debug.Print "Dialogs object terminated"
Unload mdlg
Set mdlg = Nothing
End Sub
在终止时,控制窗体的对象应该卸载该窗体,并把它对该窗体的引用设为 Nothing,从而避免孤立的窗体占用资源。
8. 在“工具”菜单中,单击“添加过程”打开“添加过程”对话框。在“名称”框中输入 ShowDialog。单击“函数”和“公共的”,然后单击“确定”。在代码窗口中,修改新创建的 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
9. 把类模块保存为 ThingDemo_Dialogs.cls。显示对话框的 ShowDialog 方法有两个可选的参数:
?准备显示的初始文本
?决定对话框是否为模式对话框的布尔参数
在显示对话框之前,Text 参数被赋给 dlgDemo 上的文本框。Modal 参数的缺省值是 True,如果忽略它,对话框将是模式的。
如果对话框为模式的,那么在用户关闭了对话框之后,ShowDialog 方法返回 txtDemo 文本框的内容。
如果对话框为无模式的,则不需要返回任何值。因为只要文本框的内容改变了,客户应用程序立刻就能收到 NotifyClients 事件。
<在TestThing中使用全局对象>
应用程序刚启动时,TestThing 在它的 Form_Load 事件过程中调用ShowDialog 方法显示一个模式对话框。在单击主窗体时,它还会显示出一个无模式的对话框。要添加代码,调用 ShowDialog 方法,请按照以下步骤执行:
1. 在“工程资源管理器”窗口中,单击“Form1斞≡袼缓蟀?F7 键或者单击“工程资源管理器”窗口工具栏上的 Code 按钮,打开窗体的代码窗口。把下列代码加入 Form_Load 事件中。
Sub Form_Load()
Me.Caption = ShowDialog(Me.Caption)
End Sub
注意,这里没有声明任何对象变量,而且调用 ShowDialog 方法的方式如同调用一个普通的函数过程。之所以能这样做,是因为Dialogs 对象的 Instancing 属性被设为 GlobalMultiUse。
2. 在声明部分添加下列代码:Private WithEvents mdgs As Dialogs变量被声明为 WithEvents,因此 Form1 就能够处理由 Dialogs对象产生的 NotifyClients 事件。
3. 在“对象”框中选择“mdgs”来显示事件过程。添加下列代码:
Private Sub mdgs_NotifyClients(Byval Data As String)
Me.Caption = Data
End Sub
无论什么时候收到 NotifyClients 事件,Form1 都会把数据值赋给它的 caption 属性。这样,无模式的对话框就能控制窗体的标题了。
4. 要显示无模式的对话框并开始事件处理,可以在 Form_Click 事件过程中添加下列代码:
Private Sub Form_Click()
If mdgs Is Nothing Then
Set mdgs = New Dialogs
End If
mdgs.ShowDialog Me.Caption, False
End Sub
Dialogs 对象创建并管理一个 dlgForm 对象,同时还接收它的 NotifyClients
事件。Form1 创建了两个不同的 Dialogs 对象,一个是隐含的(用来显示模式对话框的全局实例),另一个是显式的(用来显示无模式的对话框)。无模式的对话框通过产生 NotifyClients 事件与 Dialogs 对象通讯。Dialogs对象通过产生自己的 NotifyClients 事件进行响应,而 Form1 在处理事件时将数据赋予它 Caption 属性,确定能否工作。