即使在winforms,.net中GetCreateInstanceSupported = true,如何将属性标记为ReadOnly

时间:2010-01-17 19:03:35

标签: .net winforms typeconverter createinstance

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

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

是否有支持此功能的属性?

ETA:我已经回答了以下问题。但是,如果有人有任何想法,仍然有一些改善的空间。

2 个答案:

答案 0 :(得分:1)

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

只要省略属性设置器,你就没事了。

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

答案 1 :(得分: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()> _

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