如何在VB6中创建UserControl的Setter / Getter?

时间:2009-09-15 13:45:07

标签: vb6 user-controls oop

由于未知原因,VB6与UserControl的交互方式与其他对象不同。

我有一个类需要保存图形界面,用户控件并需要设置为稍后从get方法使用。我尝试过很多东西,比如使用特殊类VBControlExtender但没有任何成功。

这是我到目前为止所做的:

保存变量和用户控件的类:

'...
Private WithEvents m_uGUI As VBControlExtender

Public Property Get GUI() As VBControlExtender
    Set GUI = m_uGUI
End Property

Public Property Set GUI(ByVal uValue As VBControlExtender)
    Set m_uGUI = uValue
End Property
'...

调用无法编译的类:

Set myObject.GUI = new ucMyUserControl

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

从此错误的帮助(它提到ListBox和Form,但同样适用于UserControls):

  

New关键字只能应用于   一个可创造的对象......你试过   实例化一个Automation对象,但是   它不是一个可创造的对象。对于   例如,您尝试创建一个新的   通过指定列表框的实例   ListBox中的一个语句就好了   以下:[示例代码剪辑]   ListBox和Form是类名,而不是   特定的对象名称。您可以使用   他们指定一个变量   是某个对象的引用   类型...但你不能使用它们   实例化对象本身   一个Set语句。你必须指定一个   具体对象,而不是   通用类名,在Set中   语句:

您要做的是创建一个UserControl数组并根据需要加载新的UserControl。将UserControl的Index属性设置为0以使其成为一个数组,然后使用Load语句创建新实例:

Load ucMyUserControl(1) 
Set myObject.GUI = ucMyUserControl(1)

当您需要更多时,只需指定一个新的上限:

Load ucMyUserControl(2) 
Load ucMyUserControl(3)
...  

当你完成它们后,卸载它们:

Unload ucMyUserControl(3)
Unload ucMyUserControl(2)
...

答案 1 :(得分:0)

我相信VBControlExtender can only be used with dynamically added controls(即Controls.Add)不是内在控件。为什么不能使用ucMyUserControl作为类型?