:向窗体添加事件
下面的循序渐进的过程显示了如何给窗体创建自定义事件。要试用此练习,可打开一个新的“标准 EXE”工程,并按如下面步骤去做:
要将事件添加到Form1 中,请按照以下步骤执行:
- 在“工程”菜单上,选择“添加类模块”,将类模块添加到工程中。将下面的代码放置到 Class1 的“声明”部分:
Public Property Get Form1() As Form1 Set Form1 = mForm1 End Property Public Property Set Form1(ByVal NewForm1 As Form1) Set mForm1 = NewForm1 End Property
如果使用过程视图,则不能同时查看属性过程。单击代码窗口左下角的“全模块视图”按钮,转换到全模块视图。单击过程视图旁边的“过程视图”按钮,可以返回过程视图。(将鼠标在各个按钮上移动一下,看看哪个是哪个。)
- 将下面的代码添加到 Form1 的“声明”部分:
Event Gong Private mc1 As Class1
因为已经创建了 Class1,所以创建 Class1 类型的变量是可能的。这个过程要在 Form1 和 Class1 之间切换几次,因为在模块中的操作步骤,需要首先给另一个模块添加代码。
- 返回 Class1,并将下面的代码添加到“声明”部分。
Private WithEvents mForm1 As Form1
就象在“向类中添加事件”所讨论的那样,WithEvents 关键字意味着 Form1 的这个实例是与事件相关联的。注意,这一步成为可能,要到已经创建了 Gong 事件。
- 在 Class1 的“代码”窗口上的左边“对象”下拉菜单上,选择“mForm1”来为 Gong 事件得到事件过程。将下面的代码添加到该事件过程中:
Private Sub mForm1_Gong() MsgBox "Gong!" End Sub
- 返回 Form1。在“对象”下拉菜单上,选择“添加窗体”,在右边“过程”下拉菜单上,选择“加载”。将下面的代码添加到事件过程中:
Private Sub Form_Load() Set mc1 = New Class1 Set mc1.Form1 = Me End Sub
第一行创建了一个 Class1 对象,而第二行则将对 Form1 (也就是说,是 Me - 在 Form1 的“代码”窗口中,Me 指的是 Form1;而在 Class1 的“代码”窗口中,Me 指的是 Class1)的引用赋给其 Form1 属性(在第一步所创建的)。
- 将三个文本框放置到 Form1 上。在“对象”和“过程”下拉菜单上,依次为每个控件选择“Change”事件过程,并将相同代码行放置到它们中的每个里面:
Private Sub Text1_Change() RaiseEvent Gong End Sub
每次当某个文本框的内容改变时,都将引发窗体的 Gong 事件。
- 按 F5 键,运行工程。每次在其中一个文本框内键入字符时,信息框都将响铃。这是很令人恼火的,但它显示了怎样将一个事件添加到窗体中,然后从几个控件得到通知。
就象在上面的“声明和引发事件”所述,可以将参数添加到事件中。例如,可能将控件名—或者更好是用对控件的引用—传递给事件的接收者。