自定义控件中的组属性

时间:2009-04-16 09:40:45

标签: .net vb.net custom-controls

在我们的IDE中,例如,Visual Studio,如果我们显示System.Windows.Forms.Button控件的属性,我们会看到一些公开一组属性的属性。例如: FlatAppearance,Font,Location,Margin 等。

我想在自定义控件中做类似的事情。

我知道背后的代码是错误的,但这是我尝试做的一个例子:

Public Class StateOfMyCustomControl

    Public Enum EnumVisibility
        Visible
        NonVisible
    End Enum

    Public Enum EnumEventManagement
        Automatic
        Manual
    End Enum

    Private mAssociatedControl As MyCustomControl
    Private mVisibility As EnumVisibility
    Private mEventManagement As EnumEventManagement

    Public Sub New(ByVal AssociatedControl As MyCustomControl)
        mAssociatedControl = AssociatedControl
    End Sub

    Public Property Visibility() As EnumVisibility
        Get
            Return mVisibility
        End Get
        Set(ByVal value As EnumVisibility)

            mVisibility = value

            mAssociatedControl.Visible = False
            If mVisibility = EnumVisibility.Visible Then
                mAssociatedControl.Visible = True
            End If

        End Set
    End Property

    Public Property EventManagement() As EnumEventManagement
        Get
            Return mEventManagement
        End Get
        Set(ByVal value As EnumEventManagement)
            mEventManagement = value
        End Set
    End Property

End Class

Public Class MyCustomControl

    ' ...

    Private mState As StateOfMyCustomControl

    Public Sub New()
        mState = New StateOfMyCustomControl(Me)
    End Sub

    Public Property State() As StateOfMyCustomControl
        Get
            Return mState
        End Get
        Set(ByVal value As StateOfMyCustomControl)
            mState = value
        End Set
    End Property

    ' ...

End Class

在我的IDE中,在我的自定义控件的属性窗口中,我希望看到我的属性 State ,可以显示它来设置属性 Visibility EventManagement

非常感谢

1 个答案:

答案 0 :(得分:3)

您需要告诉它ExpandableObjectConverter使用StateOfMyCustomControl(或自定义转换器)。在C#中,这是:

[TypeConverter(typeof(ExpandableObjectConverter))]
public class StateOfMyCustomControl {...}

但是你在VB中应用属性,请执行此操作;-p

可能:

<TypeConverter(GetType(ExpandableObjectConverter))> _
Public Class StateOfMyCustomControl
...