Свойство по умолчанию для пользовательского интерфейса взаимодействия с dotNet
-
10-07-2019 - |
Вопрос
Мне нужно установить свойство по умолчанию для элемента управления 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 .Да.Я знаю это.Я хочу этого.Но как?
Редактировать:
Default Public Property NewProperty(ByVal foo As Integer) As String
Работает, поскольку свойство теперь отображается как свойство по умолчанию в VB6.Но это не решит мою проблему, потому что есть код, который я не могу изменить, который будет делать что-то вроде этого:
aStringVariable = myUserControlInstance
Эта статья MSDN имеет некоторую информацию по этому поводу.
Решение
потому что есть код, который я не могу изменить
Если это так, то вам нужно создать класс-оболочку вокруг исходного класса .NET и экспортировать его в качестве элемента управления, используемого VB6.Затем вы можете пометить свойство по умолчанию как использующее ключевое слово default.
Другие советы
Нет другого способа, кроме как создать оболочку в VB6, имитирующую поведение свойств VB6 по умолчанию.Мне пришлось создать несколько пользовательских элементов управления взаимодействием, и это было основной причиной, по которой нам пришлось снова обернуть элемент управления взаимодействием .Net в VB6 (чтобы избежать большого изменения кода и огромных усилий по тестированию).