在在设计时用户控件集合编辑器

编程入门 行业动态 更新时间:2024-10-12 05:45:14
本文介绍了在在设计时用户控件集合编辑器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个Windows应用程序项目中的用户控件类。其中它的性质是我定义的另一个类的集合。我似乎无法找到如何得到标准的集合编辑器在设计时为它工作一个很好的例子。

I have a UserControl class in a Windows Application project. One of the properties of it is a collection of another class that I have defined. I can't seem to find a good example of how to get the standard collection editor working for it at design time.

我得到它的工作使用一些例如code,我发现到一定程度,但在我的收藏中的数据不会被保存。当我退出的形式,并在设计时打开它备份的数据是不存在了。

I got it working using some example code I found to a degree, but the data in my collection doesn't get saved. When I exit the form and open it back up in design time the data isn't there any more.

下面是我的类:

Public Class Gauge Inherits Control Private WithEvents _Captions As New CaptionCollection <Category("Gauge"), _ TypeConverter(GetType(CaptionCollectionConverter)), _ Description("Custom text displayed on the gauge.")> _ Public Property Captions() As CaptionCollection Get Return _Captions End Get Set(ByVal value As CaptionCollection) _Captions = value End Set End Property <Category("Gauge"), _ TypeConverter(GetType(CaptionConverter)), _ Description("Custom text displayed on the gauge.")> _ Public Class Caption Private _Text As String = "" Private _Color As Color = Color.Black Private _TextIsValue As Boolean Private _Position As New Point(0, 0) Public Property Text() As String Get Return _Text End Get Set(ByVal value As String) If _Text <> value Then _Text = value End If End Set End Property Public Property Color() As Color Get Return _Color End Get Set(ByVal value As Color) If _Color <> value Then _Color = value End If End Set End Property Public Property TextIsValue() As Boolean Get Return _TextIsValue End Get Set(ByVal value As Boolean) If _TextIsValue <> value Then _TextIsValue = value End If End Set End Property Public Property Position() As Point Get Return _Position End Get Set(ByVal value As Point) If _Position <> value Then _Position = value End If End Set End Property End Class Public Class CaptionCollection Inherits CollectionBase Implements ICustomTypeDescriptor Public Sub Add(ByVal c As Caption) Me.List.Add(c) End Sub Public Sub Remove(ByVal c As Caption) Me.List.Remove(c) End Sub Default Public ReadOnly Property Item(ByVal index As Integer) As Caption Get Return DirectCast(Me.List(index), Caption) End Get End Property ' Implementation of interface ICustomTypeDescriptor Public Function GetClassName() As String Implements System.ComponentModel.ICustomTypeDescriptor.GetClassName Return TypeDescriptor.GetClassName(Me, True) End Function Public Function GetAttributes() As AttributeCollection Implements System.ComponentModel.ICustomTypeDescriptor.GetAttributes Return TypeDescriptor.GetAttributes(Me, True) End Function Public Function GetComponentName() As String Implements System.ComponentModel.ICustomTypeDescriptor.GetComponentName Return TypeDescriptor.GetComponentName(Me, True) End Function Public Function GetConverter() As TypeConverter Implements System.ComponentModel.ICustomTypeDescriptor.GetConverter Return TypeDescriptor.GetConverter(Me, True) End Function Public Function GetDefaultEvent() As EventDescriptor Implements System.ComponentModel.ICustomTypeDescriptor.GetDefaultEvent Return TypeDescriptor.GetDefaultEvent(Me, True) End Function Public Function GetDefaultProperty() As PropertyDescriptor Implements System.ComponentModel.ICustomTypeDescriptor.GetDefaultProperty Return TypeDescriptor.GetDefaultProperty(Me, True) End Function Public Function GetEditor(ByVal editorBaseType As Type) As Object Implements System.ComponentModel.ICustomTypeDescriptor.GetEditor Return TypeDescriptor.GetEditor(Me, editorBaseType, True) End Function Public Function GetEvents(ByVal attributes As Attribute()) As EventDescriptorCollection Implements System.ComponentModel.ICustomTypeDescriptor.GetEvents Return TypeDescriptor.GetEvents(Me, attributes, True) End Function Public Function GetEvents() As EventDescriptorCollection Implements System.ComponentModel.ICustomTypeDescriptor.GetEvents Return TypeDescriptor.GetEvents(Me, True) End Function Public Function GetPropertyOwner(ByVal pd As PropertyDescriptor) As Object Implements System.ComponentModel.ICustomTypeDescriptor.GetPropertyOwner Return Me End Function Public Function GetProperties(ByVal attributes As Attribute()) As PropertyDescriptorCollection Implements System.ComponentModel.ICustomTypeDescriptor.GetProperties Return GetProperties() End Function Public Function GetProperties() As PropertyDescriptorCollection Implements System.ComponentModel.ICustomTypeDescriptor.GetProperties ' Create a collection object to hold property descriptors Dim pds As New PropertyDescriptorCollection(Nothing) ' Iterate the list of employees For i As Integer = 0 To Me.List.Count - 1 ' Create a property descriptor for the caption item and add to the property descriptor collection Dim pd As New CaptionCollectionPropertyDescriptor(Me, i) pds.Add(pd) Next ' return the property descriptor collection Return pds End Function End Class ' This is a special type converter which will be associated with the Caption class. ' It converts a Caption object to string representation for use in a property grid. Friend Class CaptionConverter Inherits ExpandableObjectConverter Public Overloads Overrides Function ConvertTo(ByVal context As ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destType As Type) As Object 'Return "(Collection)" If destType Is GetType(String) AndAlso TypeOf value Is Caption Then ' Cast the value to an Caption type Dim emp As Caption = DirectCast(value, Caption) ' Return the text for display. Return emp.Text End If Return MyBase.ConvertTo(context, culture, value, destType) End Function End Class ' This is a special type converter which will be associated with the CaptionCollection class. ' It converts a CaptionCollection object to a string representation for use in a property grid. Friend Class CaptionCollectionConverter Inherits ExpandableObjectConverter Public Overloads Overrides Function ConvertTo(ByVal context As ITypeDescriptorContext, ByVal culture As System.Globalization.CultureInfo, ByVal value As Object, ByVal destType As Type) As Object If destType Is GetType(String) AndAlso TypeOf value Is CaptionCollection Then ' Return department and department role separated by comma. Return "(Collection)" End If Return MyBase.ConvertTo(context, culture, value, destType) End Function End Class Public Class CaptionCollectionPropertyDescriptor Inherits PropertyDescriptor Private collection As CaptionCollection = Nothing Private index As Integer = -1 Public Sub New(ByVal coll As CaptionCollection, ByVal idx As Integer) MyBase.New("#" & idx.ToString(), Nothing) Me.collection = coll Me.index = idx End Sub Public Overloads Overrides ReadOnly Property Attributes() As AttributeCollection Get Return New AttributeCollection(Nothing) End Get End Property Public Overloads Overrides Function CanResetValue(ByVal component As Object) As Boolean Return True End Function Public Overloads Overrides ReadOnly Property ComponentType() As Type Get Return Me.collection.[GetType]() End Get End Property Public Overloads Overrides ReadOnly Property DisplayName() As String Get Return "Caption" + (index + 1).ToString() End Get End Property Public Overloads Overrides ReadOnly Property Description() As String Get Return "Caption" + (index + 1).ToString() End Get End Property Public Overloads Overrides Function GetValue(ByVal component As Object) As Object Return Me.collection(index) End Function Public Overloads Overrides ReadOnly Property IsReadOnly() As Boolean Get Return False End Get End Property Public Overloads Overrides ReadOnly Property Name() As String Get Return "#" & index.ToString() End Get End Property Public Overloads Overrides ReadOnly Property PropertyType() As Type Get Return Me.collection(index).[GetType]() End Get End Property Public Overloads Overrides Sub ResetValue(ByVal component As Object) End Sub Public Overloads Overrides Function ShouldSerializeValue(ByVal component As Object) As Boolean Return True End Function Public Overloads Overrides Sub SetValue(ByVal component As Object, ByVal value As Object) ' this.collection[index] = value; End Sub End Class

末级

推荐答案

我发现我的答案。我缺少的东西是这个属性的字幕属性:DesignerSerializationVisibility(DesignerSerializationVisibility.Content

I found my answer. The thing I was missing was this attribute in the Captions property: DesignerSerializationVisibility(DesignerSerializationVisibility.Content

更多推荐

在在设计时用户控件集合编辑器

本文发布于:2023-11-07 19:06:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1567177.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:编辑器   控件   用户

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!