Свойство по умолчанию для dotNet Interop Usercontrol - PullRequest
1 голос
/ 11 марта 2009

Мне нужно установить свойство по умолчанию элемента управления dotNet, используемого приложением 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

Атрибут DefualtProperty не работает.

Я прочитал здесь , что ручная установка DispId в ноль должна помочь. Но если я сделаю это:

<DispId(0)> Public Property NewProperty() As String

Visual Basic любезно сообщает мне, что ноль DispId зарезервирован для свойства DefaultProperty. Да уж. Я знаю это. Я хочу чтобы. Но как?

Edit:

Default Public Property NewProperty(ByVal foo As Integer) As String

Работает, так как свойство теперь отображается как свойство по умолчанию в VB6. Но это не решит мою проблему, потому что есть код, который я не могу изменить, который будет делать что-то вроде этого:

aStringVariable = myUserControlInstance

Эта статья MSDN содержит некоторую информацию об этом.

Ответы [ 2 ]

2 голосов
/ 11 марта 2009

потому что есть код, который я не могу изменить

Если это так, то вам нужно создать класс-оболочку вокруг исходного класса .NET и экспортировать его в качестве элемента управления, используемого VB6. Затем вы можете пометить свойство по умолчанию как ключевое слово по умолчанию.

1 голос
/ 29 июня 2009

Нет другого способа, кроме как создать оболочку в VB6 для имитации поведения свойства по умолчанию VB6. Мне пришлось создать несколько пользовательских элементов управления взаимодействием, и это было главной причиной, по которой нам пришлось снова обернуть элемент управления взаимодействием .Net в VB6 (чтобы избежать большого изменения кода и огромных усилий по тестированию).

...