none
请教VB引用C#组件的问题 RRS feed

  • 问题

  • 我用C#做了一个组件DllTest在VB中调用。在VB引用中添加DllTest.tlb文件,使用以下命令:

    Dim obj As Object,i as integer
    Set obj = Me.Controls.Add("DllTest.UserControl1", "obj")    '控件名为DllTest
        With obj
            .Left = 0
            .Top = 0
            .Width = 6000
            .Height = 4000
            .Visible = True
            .Show
        End With

    'i=obj.add(2,3)  '访问控件的公共函数


     如果不访问控件方法,如“i=obj.add(2,3)”这句, 在VB运行后能看到控件界面,各种鼠标键盘操作也能正常响应,只要一加“i=obj.add(2,3)”就是无法调用控件的函数,一调用就提示“对象不支持该属性和方法”。

    另外,如果在VB中这样写:

    Dim obj As DllTest.UserControl1 ,i as integer
    Set obj= New DllTest.UserControl1

    With obj
            .Left = 0
            .Top = 0
            .Width = 6000
            .Height = 4000
            .Visible = True
            .Show
        End With
        i= obj.Add(2, 3)    '访问控件的公共函数

    这样可以访问控件函数,I的返回值为5,但控件界面无法在VB窗内显示。

    2010年9月21日 14:50

全部回复

  • 你好:

    首先请确认是不是因为vb.net的变量名有冲突的问题,尝试修改为obj的变量名,

    另外请参考http://www.cnblogs.com/tianya/archive/2007/11/07/952083.html

    希望对你有所帮助。

    2010年9月23日 6:58
    版主
  • 您想使用 VB 6.0 的晚期绑定来调用 C# 控件的方法。此时控件方法的大小写是有关系的,试图将 add 改成 Add 试试看?


    Mark Zhou
    2010年9月24日 10:00
  • 首先谢谢各位帮助,add 改成Add是我的笔误, 不是这个问题。而且在使用

    Dim obj As DllTest.UserControl1 ,i as integer
    Set obj= New DllTest.UserControl1

    方法时是可以正常访问函数的。这两种方式一种可以访问函数但无界面,一种有界面但无法访问函数,真是头疼。

    1楼说的变量冲突应该也不成立,我同时还有多个无冲突函数,也无法访问。

    另外,我的C#控件中没做接口,好像控件无法继承接口,总报错。

    2010年9月25日 3:06