【发布时间】:2014-12-10 13:21:56
【问题描述】:
问题
我的自定义用户控件的属性组显示类型名称如下:
问题
如何删除它们?
我希望得到与任何其他随机(和专业)用户控件相同的结果,例如不显示垃圾的 krypton 工具集:
代码
这是我如何装饰属性网格的代码示例:
Public Class ElektroListBox : Inherits ListBox
<Category("Appearance")>
<Description("Enabled state.")>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
Public ReadOnly Property StateEnabled() As StateLayout
Get
Return Me.stateEnabled1
End Get
End Property
Private ReadOnly stateEnabled1 As StateLayout
Public Sub New()
Me.stateEnabled1 = New StateLayout(Me)
End Sub
End Class
<ToolboxItem(False)>
Public Class StateLayout : Inherits Component
<Category("Appearance")>
<Description("The item foreground.")>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
Public ReadOnly Property Items As ItemLayout
Get
Return Me.items1
End Get
End Property
Private ReadOnly items1 As ItemLayout
Public Sub New(ByVal listBox As ElektroListBox)
Me.items1 = New ItemLayout(listBox1)
End Sub
End Class
【问题讨论】:
-
我敢打赌,如果您在对象浏览器中查看 Krypton.StateCommon,它不会继承 Component。组件可以为您做一些事情,但它也有代价。
-
属性继承自自定义类型,继承自其他氪自定义类型,最后主类型继承自System.Object。
-
System.Object表示不是从 Component 继承的类。组件为您处理诸如命名和序列化之类的事情,但这种权宜之计是有代价的。使用嵌套 4 深的类型,您的事情也非常复杂。 -
使用
ExpandableObjectConverter并没有看起来那么难:i.imgur.com/za8Dr3s.jpg(使用之前的一些代码和一个新的 TypeConverter 需要 20 分钟)。另外,您可以摆脱需要引用主机控件的分组类型(这意味着它们与该控件紧密相关)。 -
谢谢@Plutonix,那么,如果我理解得很好,如果我想通过我想要的自定义来做到这一点,我应该重写所有代码以删除
Component类并“翻译”该类进入ExpandoObject课程?最后在那些ExpandoObject类上使用TypeConverter来自定义(或完全删除,如我所愿)属性网格中显示的信息。我是正确的?我有点迷路了。
标签: .net vb.net winforms class user-controls