在运行时设置BrowsableAttribute的价值(Setting value of Brows

2019-07-18 09:56发布

我想设置的值BrowsableAttribute对于一些MyClass在运行实例的属性:

 public class MyClass
{
     [Browsable(true)]
     public int P1 { get; set } 
     ...
}

请指教它是如何做,以及如何添加BrowsableAttributeMyClass在运行实例的属性如果此属性不存在。

Answer 1:

您可以实现自定义类型说明符 - 它拦截的方式无论是用它的属性。 因此,具有看起来像属性被改变的效果。

见- 第1部分 , 第2部分



Answer 2:

你不能 - 除非你进行拦截加载程序集。 的属性被存储在元数据中,并装载有该组件,和属性通常应该是不可变(如BrowsableAttribute是)。

基本上属性不意味着在执行时进行修改。



Answer 3:

你那种可以。 我想的那一刻,我设法用的CategoryAttribute工作这样的事情。 目前,虽然,这将停止从propertiesgrid一起工作,虽然,虽然这是被称为一个按钮的构造函数:

Dim PC As PropertyDescriptorCollection = TypeDescriptor.GetProperties(Me)
For i As Integer = 0 To PC.Count - 1
        Dim att As BrowsableAttribute = DirectCast(PC(i).Attributes(GetType(BrowsableAttribute)), BrowsableAttribute)
        If Not att Is Nothing Then
            If att.Browsable = True Then
                Dim cat As Reflection.FieldInfo = att.GetType.GetField("Browsable", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.Static Or Reflection.BindingFlags.IgnoreCase)
                If Not cat Is Nothing Then
                    cat.SetValue(att, False)
                End If
            End If
        End If
Next

希望这可以帮助



文章来源: Setting value of BrowsableAttribute at runtime