如何设计像ListView.Items这样的属性和生成的代码
我自己做的一个控件里面有一个集合类,通过Property在设计时显示到PropertyGrid里面,点击右面的"..."按钮进行设定。现在的问题是,我希望设计器在代码页里面生成的代码,要像ListView.Items这样的属性一样,写成Items.AddRange(New ....)这种自定义的代码。
目前我已经可以正确将集合内容从设计器里面返回,但是不能把它序列化为我要的形式。
不知道如何能够实现。
自定义的控件
Public Class MyComponent
Inherits ComponentModel.Component
Private m_cl As CompCollection
<ComponentModel.Editor(GetType(MyValueEditor), GetType(Drawing.Design.UITypeEditor)), _
ComponentModel.TypeConverter(GetType(MyValueTypeConvertor)), _
ComponentModel.DesignerSerializationVisibility(ComponentModel.DesignerSerializationVisibility.Content)> _
Public Property Comps() As CompCollection
Get
Return m_cl
End Get
Set(ByVal Value As CompCollection)
m_cl = Value
Dim c As ComponentModel.Component
For Each c In m_cl.Items
MsgBox(c.Site.Name)
Next
End Set
End Property
Public Sub New()
m_cl = New CompCollection
End Sub
End Class
集合类
Public Class CompCollection
Inherits Object
Private m_list As ArrayList
Public ReadOnly Property Items() As ComponentModel.Component()
Get
Return m_list.ToArray(GetType(ComponentModel.Component))
End Get
End Property
Public Sub New()
m_list = New ArrayList
End Sub
Public Sub Add(ByVal c As ComponentModel.Component)
m_list.Add(c)
End Sub
Public Sub Remove(ByVal c As ComponentModel.Component)
m_list.Remove(c)
End Sub
Public Sub AddRange(ByVal cs() As ComponentModel.Component)
m_list.AddRange(cs)
End Sub
Public Overrides Function ToString() As String
Return "(Collection)"
End Function
End Class
TypeConvertor类
Public Class MyValueTypeConvertor
Inherits ComponentModel.TypeConverter
Public Overloads Overrides Function GetPropertiesSupported(ByVal context As System.ComponentModel.ITypeDescriptorContext) As Boolean
Return True
End Function
Public Overloads Overrides Function GetProperties(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal value As Object, ByVal attributes() As System.Attribute) As System.ComponentModel.PropertyDescriptorCollection
Return ComponentModel.TypeDescriptor.GetProperties(GetType(CompCollection))
End Function
End Class
还有自定义的UIEditor就不贴出来了,因为和问题本身没什么关系。