调试控件与调试其它对象最重要的区别是:当控件实例所在的窗体处于设计模式时,控件中的一些代码是必须执行的。
例如,当使用控件的开发者通过“属性”窗口设置其属性时,实现控件属性的属性过程中的代码是必须执行的。
在设计时,保存和获取属性值的代码也是必须运行的,例如加载具有该控件实例的窗体、把工程置于 Run 模式,或把工程保存到磁盘上时。
Resize 事件(或 Paint 事件,用于用户绘制控件)中的代码在设计时也必须运行,从而为控件提供设计时的外观。
在“创建一个 ActiveX 控件”的“在设计时运行 ShapeLabel 控件”的详细步骤中,可以看出这一特性。
详细信息 关于部件调试的一般信息,请参阅“调试、测试和部署部件”。
为了使正在制作的控件进入可以在设计时执行代码的状态,必须关闭控件的可视设计器,这可以通过单击 Close 框或按 CTRL+F4 键来完成。
当设计器关闭后,Visual Basic 使“工具箱”中该控件的图标成为活动的,从而可以在窗体中添加控件实例来进行测试。
在设计时,如果控件中的代码碰到了断点,例如在“属性”窗口调用“Property Let”期间,Visual Basic 会进入中断模式,正如工程运行时所做的那样。当按 F5 键继续执行时,控件中的代码将恢复执行。Visual Basic 保持在设计模式。
要观察到这一点,可以在某个属性过程中设一断点,然后把控件的一个实例放置在测试窗体上。
当为某个控件打开 UserControl 设计器时,Visual Basic 将禁止该控件的所有实例,并使该控件在“工具箱”中的图标变灰。如果某个打开的窗体上有该控件的实例,Visual Basic 就会用交叉线阴影覆盖被禁止的控件实例。
对控件代码窗口中的代码进行一些修改也可以禁止控件实例,例如添加新的属性或方法,或者在以前不使用的事件过程中添加代码。
一旦控件实例被以这种方式被禁止,它就不能执行代码了。它甚至不能接收到 Terminate 事件。
在关闭 UserControl 设计器时,被禁止的控件实例被销毁(它们不会得到更多的事件),并被新的实例取代。要看到这一点,可以在某个控件的初始化和 Terminate 事件中放入 Debug.Print 语句。
用右键单击测试窗体,并从上下文菜单选择“更新用户控件”,也可以刷新控件实例。如果有打开的控件设计器,则在控件实例被刷新前被关闭。
详细信息 关于部件调试的一般信息,请参阅“调试、测试和部署部件”。