控件的版本问题

在创建控件的新版本时,需要考虑到一些向后兼容性问题:

接口兼容性

可以增加新属性、方法和事件而不破坏使用控件部件早期版本编译的应用程序。然而,不能从接口中删除成员,或改变成员的参数。

可以使用 Visual Basic 的“版本兼容”功能避免创建不兼容的接口。在“工程属性”对话框的“部件”选项卡上,单击“版本兼容”框中的“二进制兼容”。这将激活一个文本框,可以在其中输入部件早期版本的路径和文件名。

该文本框的缺省值是最后一次构造该部件时的位置。如果要继续使用该位置来构造控件部件的新版本,则把以前版本的副本放到另一个位置是很好的,然后在文本框中输入此位置。

详细信息 关于接口兼容性和“版本兼容部件”框的使用,请参阅“部件设计的一般准则”中的“版本兼容性”。

UserControl 属性

改变 UserControl 对象的属性时要小心,例如 ControlContainer。如果控件的早期版本已将该属性设置为 True,以便开发者可以使用该控件包含其它控件,而在后继版本中该属性被设置为 False,那么如果该新版本被安装到同一台计算机上,现存的应用程序将不再会正常工作。

保存和获取属性值

为了保持向后兼容性,可以保留某个属性,但是应该停止在 Help 文件中提到它,并用“过程属性”对话框将其标记为“Hidden”。

然后,可以停止在 WriteProperties 事件中保存这种过时的属性的值,但是在 ReadProperties 事件中应继续加载它们的值。如果停止加载属性的值,将会破坏以前编译的、使用该属性的应用程序。

过程属性设置值

改变过程的属性可能会破坏用控件部件的以前版本编译的应用程序。例如,如果用“过程属性”对话框改变控件的缺省属性或方法,那么依靠这些缺省值的代码将不能正常工作。

编译之后的应用程序

在某些情况下,对控件的新版本中的属性进行修改将不会影响编译之后的、使用早期版本控件的应用程序。原因在于,某些服务是由容器提供的,而且在编译应用程序的时候已经被设置。即使这些设置在新版本的控件中被修改了,容器将不会初始化这些属性。

由容器提供的属性可能包括 Alignable、CanGetFocus、ControlContainer、DefaultCancel、ForwardFocus、Public、ToolboxBitmap 和 Visible。如果您在控件较晚的版本中修改了这些属性中的任何一个,那么使用这些控件的应用程序可能需要重新进行编译。