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.

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top