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

Pat*_*ins 1 oop vb6 user-controls

由于未知原因,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
'...
Run Code Online (Sandbox Code Playgroud)

调用无法编译的类:

Set myObject.GUI = new ucMyUserControl
Run Code Online (Sandbox Code Playgroud)

任何的想法?

rav*_*ven 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)
Run Code Online (Sandbox Code Playgroud)

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

Load ucMyUserControl(2) 
Load ucMyUserControl(3)
...  
Run Code Online (Sandbox Code Playgroud)

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

Unload ucMyUserControl(3)
Unload ucMyUserControl(2)
...
Run Code Online (Sandbox Code Playgroud)