Je dois définir la propriété par défaut d'un contrôle dotNet utilisé par une application VB6.Propriété par défaut pour le contrôle utilisateur dotNet Interop
<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 here 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 me informe gentiment que le zéro DispId est réservé à la DefaultProperty. Ouais. Je le sais. Je veux cela. Mais comment?
Edit:
Default Public Property NewProperty(ByVal foo As Integer) As String
ne fonctionne que 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 est le code que je ne peux pas changer, ce qui fera quelque chose comme ceci:
aStringVariable = myUserControlInstance
This MSDN article a quelques informations à ce sujet.
Le wrapper doit-il être un contrôle utilisateur VB6? Ou puis-je faire de la magie du côté de dotNet? – dummy
Votre choix. L'encapsuleur dupliquera à peu près le contrôle d'origine, sauf que la propriété par défaut fonctionnera comme vous le souhaitez. Si vous voulez utiliser une propriété par défaut sans paramètres, vous devrez utiliser le contrôle utilisateur vb6. –
Nous vous remercions de votre compréhension. J'accepterai cette réponse dans quelques jours, si personne d'autre ne répond. – dummy