与其它可编程对象不同,控件同时具有设计时和运行时的两种行为。 即开发者在设计时把一个控件实例放入窗体时,控件中的一些代码将会执行。
例如,放置在 UserControl_Resize 事件过程中的代码在设计和运行时都会执行。
为了调试控件设计时的行为,当放置有控件的测试窗体保持在设计模式中时,必须能够执行控件中的代码。
以下两个过程演示了这种灵活技巧。在第一个过程中,把代码添加到 ShapeLabel 控件的 Resize 事件中。在第二个过程中,当测试工程保持在设计模式中时,使 ControlDemo 的一部分进入运行模式后把 ShapeLabel控件的实例添加到测试工程的窗体中。
注意 本主题是演示创建示例性 ActiveX 控件的一系列步骤中的一部分。它是从创建 ActiveX 控件的主题开始。
要将代码添加到 Resize 事件中,请按照以下步骤执行:
Private Sub UserControl_Resize()
Static intCt As Integer
intCt = intCt + 1
Debug.Print "Resize " & intCt
End Sub
注意 事件处理过程名具有“UserControl”前缀,正如相对普通窗体的 Form_Resize 事件过程具有前缀 Form 一样。
开发普通的 Visual Basic 应用程序时,需要单击工具栏上的“启动”按钮或者按下 F5 键来运行应用程序。然而要把 ShapeLabel 控件放入Form1,只须运行此控件的代码而把其它代码保持在设计模式中。
要在设计时运行 ShapeLabel 控件,请按照以下步骤执行:
重点 不要单击工具栏上的“启动”按钮或者按下 F5 键,因为那样会使整个工程组进入运行模式从而无法把新控件添加到窗体中。
当控件进入运行模式时,如何关闭设计器窗口就是无关紧要的了。(因为控件工具箱将变成灰色,所以总知道设计器是否打开。)
在“属性”窗口可以看见新控件的默认属性。刚刚添加到窗体中的 ShapeLabel 控件已被赋予缺省名 ShapeLabel1。
注意 开始设计控件时便为其命名可避免引起混淆。假定把一个具有缺省名(比如 UserControl1)的控件放入窗体,新控件自动编号功能会把一个数字附加到这个控件名之后,得到一个象 UserControl11 这样的易混淆的名字。
如果只是在窗体里简单地移动控件,Resize 事件不会引发。
打开一个控件的设计器会使该控件的所有实例变成非活动的。 更改控件代码窗口的代码也会使控件实例变成非活动的。
如果由于改动控件的代码而使控件变成非激活状态时,那么可用鼠标右键单击测试窗体以便显示其上下文菜单,单击“更新用户控件”可重新激活控件实例。
注意 由于这些过程需要许多的窗口,经常会看到 ShapeLabel设计器隐藏在另外一个窗体的后面。 可在“工程资源管理器”窗口双击“ShapeLabel”使设计器置前。
详细信息 关于在设计时代码运行的详细信息,请参阅第九章“建立 ActiveX 控件”中的“调试控件”部分。
本主题是演示创建示例性 ActiveX 控件的一系列步骤中的一部分。
到 | 请参阅 |
转到下一步 | UserControl 对象的存活期 |
从头开始 | 创建 ActiveX 控件 |