Использование IExtenderProvider и ProvideProperty с пользовательскими классами

Я реализовал компонент, который наследуется от IExtenderProvider, чтобы расширить любой элемент управления в форме. Он отлично работает для базовых типов, таких как String или Integer. Теперь я хотел бы сгруппировать предоставленные свойства в один класс. Я создал класс и использую ProvideProperty, чтобы сделать его доступным для элементов управления. Свойство отображается в конструкторе, но я не могу развернуть его, чтобы редактировать открытые свойства класса.

Вот небольшой пример кода (vb.net), чтобы проиллюстрировать, что я сделал (DynamicCaptionInfo - это пользовательский класс, который я хотел бы использовать для предоставленного свойства):

<ProvideProperty("CustomCaption", GetType(Control))> _
Public Class DynamicCaptionController
    Implements IExtenderProvider

    Private _CaptionInfos As Hashtable

    <System.Diagnostics.DebuggerNonUserCode()> _
    Public Sub New()
    MyBase.New()

    'Dieser Aufruf ist für den Komponenten-Designer erforderlich.
    InitializeComponent()
    _CaptionInfos = New Hashtable()
    End Sub

    Public Function CanExtend(extendee As Object) As Boolean Implements IExtenderProvider.CanExtend
    Return TypeOf (extendee) Is Control
    End Function

    Public Function GetCustomCaption(ByVal ctrl As Control) As DynamicCaptionInfo
    Return _CaptionInfos(ctrl)
    End Function

    Public Sub SetCustomCaption(ByVal ctrl As Control, ByVal value As DynamicCaptionInfo)
    If value Is Nothing Then
        _CaptionInfos.Remove(ctrl)
    Else
        _CaptionInfos(ctrl) = value
    End If
    End Sub

    Public Class DynamicCaptionInfo
      Public Property DefaultCaption As String
      Public Property CustomCaption As String

      Public Sub New()
        DefaultCaption = ""
        CustomCaption  = ""
      End Sub
    End Class
End Class

Приведенный выше код работает, если я заменяю, например, String на DynamicCaptionInfo.

Спасибо за помощь.

0 ответов

Другие вопросы по тегам