2009-03-11 5 views
1

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.

Répondre

2

parce qu'il ya un code que je ne peux pas changement

Si ce le cas, vous devez créer une classe wrapper autour de la classe .NET d'origine et à l'exportation que le contrôle utilisé par VB6 . Vous pouvez ensuite marquer la propriété par défaut en utilisant le mot-clé par défaut.

+0

Le wrapper doit-il être un contrôle utilisateur VB6? Ou puis-je faire de la magie du côté de dotNet? – dummy

+0

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. –

+0

Nous vous remercions de votre compréhension. J'accepterai cette réponse dans quelques jours, si personne d'autre ne répond. – dummy

1

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 utilisateurs interopérationnels et c'était la raison principale pour laquelle nous devions à nouveau encapsuler un contrôle d'interopérabilité .Net dans VB6 (pour éviter beaucoup de changement de code et d'effort de test énorme).

Questions connexes