我需要设置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有一些相关信息。
答案 0 :(得分:2)
因为有代码我不能 变化
如果是这种情况,则需要在原始.NET类周围创建一个包装类,并将其导出为VB6使用的控件。然后,您可以使用default关键字将默认属性标记为。
答案 1 :(得分:1)
除了在VB6中创建一个包装器来模仿VB6的默认属性行为之外别无他法。我不得不创建几个互操作用户控件,这是我们必须在VB6中再次包装.Net互操作控件的主要原因(以避免大量的代码更改和巨大的测试工作)。