【发布时间】:2014-12-09 22:07:54
【问题描述】:
场景
我对控件进行了子分类,我想在控件的属性网格中添加一个StringFormat 可扩展组,以便在设计时设置其值。
问题
我无法将 StringFormat 属性正确添加到属性网格中,这是我得到的:
问题
将StringFormat 实现为PropertyGrid 的最简单方法是什么?
代码
我在这里尝试了@Plutonix 的建议:Create an expandable group in a property grid?(确定我做错了什么)
我宁愿避免使用TypeConverter,因为我不确定这种实现是否需要这种令人头疼的问题。
Public Class MyControl: Inherits ListBox
Public Property MyProperty As MyStringFormat = New MyStringFormat
End Class
<TypeConverter(GetType(StringFormatConverter))>
Public Class MyStringFormat
<Browsable(True)>
<NotifyParentProperty(True)>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Property myStringFormat As StringFormat
Public Sub New()
' default values, if any
myStringFormat = New StringFormat
End Sub
End Class
Public Class StringFormatConverter : Inherits ExpandableObjectConverter
Public Overrides Function ConvertTo(context As ITypeDescriptorContext,
culture As Globalization.CultureInfo,
value As Object,
destinationType As Type) As Object
Return MyBase.ConvertTo(context, culture, value, destinationType)
End Function
End Class
【问题讨论】:
-
你能让你的例子不那么抽象吗?看起来你不需要一个可扩展的转换器来做一件事,而你的转换器什么也没做。我不确定是否需要它,因为道具网格的大多数转换器都是 ToString 和 FromString。我正在尝试弄清楚您到底在追求什么 - 字符串格式掩码或格式标志?
-
感谢您的评论。我希望可能继承所需的类(或其他东西),我可以立即将组内
StringFormat类的所有属性成员添加到网格中,而不需要更多的努力,因为如果我需要手动实现它,创建每个属性每一个一个地分开然后我已经可以自己做到了,我在问是否可以动态地做到这一点,但是如果一次将整个StringFormat类属性实现到网格中比看起来更困难,那么这些是我更需要的道具吗:Alignment,FormatFlags,LineInputAlignment,Trimming -
好的,所以你可以把它变成一个包含这 4 个道具的扩展。没有为 StringFormat 定义 TypeConverter 或 UITypeEditor,因此您需要编写自己的类(除了它是一个密封类)。但由于 FormatFlags 是按位枚举,您可能必须为其实现 UITypeEditor。 (我假设 LineInputAlignment == LineAlignment)。
-
“expando”是这个意思吗?:msdn.microsoft.com/en-us/library/…,我以前从未见过,哈哈。
-
无论是 TypeConverter 还是继承组件,因为您的 Type 将包含 4 个要编辑的内容。
标签: .net vb.net winforms class user-controls