假设同一个工程内,有以下文件:TestClass.cls -> 测试类
HostClass.cls -> 宿主类
HostControl.ctl -> 宿主用户控件
MainForm.frm -> 主窗体HostClass 和 HostControl 有同样一个函数:
'返回一个TestClass类型的数组
public function GetArray() as TestClass()
dim ret() as TestClass
redim ret(2) as TestClass
set ret(0) = new TestClass
set ret(1) = new TestClass
set ret(2) = new TestClass
GetArray = ret
end function
MainForm 窗体中放置一个 HostControl 控件 进行如下测试:
Private Sub Command1_Click() dim x() as TestClass
dim y() as TestClass dim MyHostClass as HostClass
set MyHostClass = new HostClass ' 该代码执行成功,x 正确获取 TestClass 数组
x = MyHostClass.GetArray() ' 该代码执行失败! 提示:不能为数组赋值。
y = HostControl1.GetArray()end sub
为何同样一个函数写在用户控件里就编译错误?请求各位大虾指点同样一个类似疑问:如果将TestClass数组作为一个函数的参数,外部调用时用户控件中的代码就会提示类型不符,类中却正常。另外,如果在相关代码上按 Ctrl+I 键弹出代码提示, MyHostClass.GetArray() 显示返回类型为 TestClass() 正常,HostControl1.GetArray() 显示返回类型为 _TestClass() 为什么多出一个下划线?其他不涉及数组返回TestClass实例的函数也会提示返回类型为_TestClass,却不影响使用。
解决方案 »
- 副的msflexgrid读取多行数据到主的msflexgrid上的问题
- 我是新手!vbd问题!
- 在SQL2000里字段名用中文是否不太好?
- 【问】如何让电脑进入休眠状态?
- 代码在不同的机器上运行出问题 ?急急急急急急急急
- 麻烦大家了,请问大家有没有开发连锁销售管理程序的经验,联网的方法有多少种?
- 为什么我的adoRS明明取回了记录,而adoRS。recordcount总是=-1呢?
- toolbar问题!
- 控件属性声明无效的几个原因可能有哪些?
- !!!!!请教VB多线程的问题!!!!!!
- 求:(实时错误 '1004' 对象 'Range' 的方法 '_Global' 失败) 的解决方法
- 如何获取当前活动窗体中插入符(键盘光标Caret)的高度?
控件里你可以改成这样:public function GetArray() as Object() '该这里的类型
dim ret() as Object '该这里的类型
redim ret(2) as TestClass
set ret(0) = new TestClass
set ret(1) = new TestClass
set ret(2) = new TestClass
GetArray = ret
end function测试这样Private Sub Command1_Click() dim x() as TestClass
dim y() as Object '该这里的类型
dim MyHostClass as HostClass
set MyHostClass = new HostClass ' 该代码执行成功,x 正确获取 TestClass 数组
x = MyHostClass.GetArray() ' 该代码执行失败! 提示:不能为数组赋值。
y = HostControl1.GetArray()end sub
改成这样
redim ret(2)
经常看到这个:
'注意!不要删除或修改下列被注释的行!
'MemberInfo=0
使用Object的确可以解决问题,但同时也失去了代码智能提示。1、为什么只有控件会发生该错误,而类里同样的函数却可行?2、控件里引用自定义类时,类名前会自动加一个下划线?
来传递参数,非标的东西是不符合 COM 标准的,所以不能直接传递,这就是为什么不能用自
定义类对象传递问题的根本。
用户控件生成OCX可以被其它程序使用,自定义类生成DLL也可以被其它程序使用,该OCX和DLL应该都符合COM标准才对,为何只有OCX不支持非标自定义数组赋值?实验发现通过下面的函数却可以变通处理'利用Variant类型给数组赋值
Public Sub SetArray(Target() As Class1, Source)
Target = Source
End Sub'出错的代码改成如下,便可正常传值,说明GetArray的确已经返回Class1数组类型的数据
SetArray y, HostControl1.GetArray()这又是为什么呢?^_^