Propriété par défaut pour dotNet Interop Usercontrol
-
10-07-2019 - |
Question
Je dois définir la propriété par défaut d'un contrôle dotNet utilisé par une application VB6.
<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
L'attribut DefualtProperty ne fait pas l'affaire.
J'ai lu ici que le réglage manuel de DispId à zéro devrait faire l'affaire. Mais si je fais ceci:
<DispId(0)> Public Property NewProperty() As String
Visual Basic m'informe aimablement que DispId Zero est réservé à DefaultProperty. Ouais. Je le sais. Je veux cela. Mais comment?
Modifier:
Default Public Property NewProperty(ByVal foo As Integer) As String
Fonctionne comme la propriété apparaît maintenant comme la propriété par défaut dans VB6. Mais cela ne résoudra pas mon problème, car il existe un code que je ne peux pas modifier, ce qui fait quelque chose comme ceci:
aStringVariable = myUserControlInstance
Cet article MSDN contient des informations. à ce sujet.
La solution
car il y a du code que je ne peux pas changer
Si tel est le cas, vous devez créer une classe wrapper autour de la classe .NET d'origine et l'exporter en tant que contrôle utilisé par VB6. Ensuite, vous pouvez marquer la propriété par défaut comme utilisant le mot-clé par défaut.
Autres conseils
Il n'y a pas d'autre moyen que de créer un wrapper dans VB6 pour imiter le comportement de propriété par défaut de VB6. J'ai dû créer plusieurs contrôles d'utilisateur interop et c'est la raison principale pour laquelle nous avons dû intégrer un contrôle d'interopérabilité .Net à nouveau dans VB6 (pour éviter de nombreuses modifications de code et des efforts de test considérables).