0

使用 TypeConverter 类的 CreateInstance 方法,可以编辑不可变对象的属性 - 例如字体。

但是,与字体类不同,我的类中有一些属性我希望可以浏览但只读-即使支持 CreateInstance。

是否有支持这一点的属性?

ETA:我已经回答了下面的问题。但是,如果有人有任何想法,仍然有轻微改进的空间。

4

2 回答 2

1

TypeConverter.CreateInstance() 不会更改Font 类的属性。它只是创建它的一个新实例。这里没有魔法,它只是使用类构造函数。

只需省略属性设置器,就可以了。

如果您想阻止任何人使用反射来戳您的私有字段,那么您需要使用 [ReflectionPermission] 属性。

于 2010-01-17T19:11:24.200 回答
0

要使属性只读,请继承类型转换器并重写 CanConvertFrom 方法。例如:

Public Class ReadOnlyStringConverter
    Inherits StringConverter

    Public Overrides Function CanConvertFrom(ByVal context As System.ComponentModel.ITypeDescriptorContext, ByVal sourceType As System.Type) As Boolean
        Return (sourceType IsNot GetType(String)) AndAlso MyBase.CanConvertFrom(context, sourceType)
    End Function

End Class

唯一的缺点是文本不会显示为只读,因此人们可能希望能够对其进行编辑。

如果它是一次性的,则可以嵌套该类并将其设为私有,这样它就不会弄乱您的智能感知。

要禁用编辑器,请添加以下属性:

<Editor(GetType(UITypeEditor), GetType(UITypeEditor))> _

仅添加以下内容是不够的:

<Editor()> _

如果你这样做了,那么现有的编辑器仍然会被选中。

于 2010-01-18T00:48:24.783 回答