请问如何在vb的Collection对象中加入自定义的Type变量?

QDash 2002-03-22 03:39:29
我在Module中声明了一个Type类型,但在窗体模块的一个Collection对象中使用Add加入一个Type变量时,会报错:Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions .请问我如何解决?
...全文
715 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
acptvb 2002-03-25
  • 打赏
  • 举报
回复
感谢您使用微软产品。

您在标准的Exe工程中无法将一个用户自定义类型(UDT)添加到Collection对象中,原因在于如果要将UDT添加到Collection对象中,那么这个UDT必须是写在公共对象模块中,且声明为Public。而在标准的Exe工程中,所添加的Module或ClassModule并非是公共对象模块,所以Collection对象无法将您的用户类型添加进去。

您可以查看以下信息了解错误产生的原因。
Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vamsgprivtypeinpubfunc.asp

您可以尝试将您的UDT类型写在ActiveX Dll工程或者Active Exe工程中,且这个工程的Instancing属性必须被设置为"MultiUse" 或者"GlobalMultiUse",然后在您的标准Exe工程中引用这个Dll,就可以把UDT添加到Collection中了。

微软全球技术中心 VB技术支持
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
QDash 2002-03-22
  • 打赏
  • 举报
回复
benbenc(王豫翔)兄,你解决了这个问题吗?我的type 是在Module中定义为public的,但是仍然报错。你给的只是msdn上的帮助信息,我也知道,但解决不了问题。继续期待!
benbenc 2002-03-22
  • 打赏
  • 举报
回复
只有在公共对象模块中定义的公共用户定义类型可以被使用为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段


这个错误的原因与解决方法如下:
试图使用一个公共用户定义类型作为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段。只有在公共对象模块中定义的公共用户定义类型才可以这样使用。
net的最近面试经典试题ASP.NET面试题集合 1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在同一命名空间内可以访问。 2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } } 4.C#的委托是什么?事件是不是一种委托? 答 : 委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托 5.override与重载的区别 答 : override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类函数的重写。为了适应需要。 6.如果在一个B/S结构的系统需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理? 答 : this.Server.Transfer 7.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty? 答: foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } 8.请编程实现一个冒泡排序算法? 答: int [] array = new int ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array) { temp = array ; array = array[j] ; array[j] = temp ; } } } 9.描述一下C#索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型。 10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m [Page] 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; for (int i = 0 ; i < Num + 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - I ; } } System.Console.WriteLine(Sum.ToString()); System.Console.ReadLine() ; 11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。 表示层为了与用户交互例如用户添加表单。 优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。 12.在下面的例子里 using Sy

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧