[非高手勿入] 用VB编写OCX控件,如何解决对象的永久存储问题?
众所周知,VB中的PropertyBag对象可以提供对用户自定义控件的属性存储功能,并且,帮助文挡也指出,存取值可以为对象,但仅限于方法。
原文如下
The ReadProperty method of the PropertyBag object is used to read a value for a property, while the WriteProperty method of the PropertyBag object is used to write a value of a property. The value of a property can itself be an object; in that case the PropertyBag object will attempt to save it. (PropertyBag Object)
在实际应用中发现,试图存取一个对象时,产生运行时错误:非法调用,控件不支持永久存储。但是,当试图采用Content属性存储二进制数据时,不能适用于UserControl 和 UserDocument 中的 PropertyBag对象。请参阅帮助文档
再看COM原理的时候,COM规范曾提到过永久存储的概念,而且也讲了不少,但是那都是用VC++写的代码。
我主要是想实现图片的存储,自定一个控件,写上一个ProperPage,编辑时通过属性页浏览图片,然后设法保存,待以后程序运行时就不用设置了。以前用过内置ImageList控件,但总觉得不是一个好主意,起码,应用程序必须引用该控件,起码,它不能编译到我的OCX中,它应该是属于COM中的聚合和包容概念。
然而,Visual C++ 中的一些MFC类提供序列化方法,这其实也算是一种永久存储的范畴,但却不能算是COM的办法。
不知道大家是否遇到过如此的困挠,还望大家一起讨论。