dotNet Interop Usercontrol的默认属性

时间:2009-03-11 13:41:06

标签: vb.net vb6 com-interop

我需要设置VB6应用程序使用的dotNet控件的默认属性。

<ComClass(myControl.ClassId, myControl.InterfaceId, myControl.EventsId)> _
<DefaultProperty("NewProperty")> _
Public Class myControl

    Public Const ClassId As String = "86252de2-ca87-4468-adbe-ad7c47747759"
    Public Const InterfaceId As String = "c1cbf1a1-24bb-46c3-88a4-813eb4917845"
    Public Const EventsId As String = "954ed890-011c-4908-ab33-610159fe6eb1"

    Private newPropertyValue As String
    Public Property NewProperty() As String
        Get
            Return newPropertyValue
        End Get
        Set(ByVal value As String)
            newPropertyValue = value
        End Set
    End Property
End Class

DefualtProperty属性不起作用。

我已阅读here手动将DispId设置为零应该可以解决问题。但如果我这样做:

<DispId(0)> Public Property NewProperty() As String

Visual Basic告诉我,DispId Zero是为DefaultProperty保留的。是啊。我知道。我要那个。但是怎么样?

编辑:

Default Public Property NewProperty(ByVal foo As Integer) As String

作为属性的工作现在显示为VB6中的默认属性。但这不能解决我的问题,因为有些代码我无法改变,这将做类似的事情:

aStringVariable = myUserControlInstance

This MSDN article有一些相关信息。

2 个答案:

答案 0 :(得分:2)

  

因为有代码我不能   变化

如果是这种情况,则需要在原始.NET类周围创建一个包装类,并将其导出为VB6使用的控件。然后,您可以使用default关键字将默认属性标记为。

答案 1 :(得分:1)

除了在VB6中创建一个包装器来模仿VB6的默认属性行为之外别无他法。我不得不创建几个互操作用户控件,这是我们必须在VB6中再次包装.Net互操作控件的主要原因(以避免大量的代码更改和巨大的测试工作)。