我想设置的值BrowsableAttribute
对于一些MyClass
在运行实例的属性:
public class MyClass
{
[Browsable(true)]
public int P1 { get; set }
...
}
请指教它是如何做,以及如何添加BrowsableAttribute
到MyClass
在运行实例的属性如果此属性不存在。
我想设置的值BrowsableAttribute
对于一些MyClass
在运行实例的属性:
public class MyClass
{
[Browsable(true)]
public int P1 { get; set }
...
}
请指教它是如何做,以及如何添加BrowsableAttribute
到MyClass
在运行实例的属性如果此属性不存在。
您可以实现自定义类型说明符 - 它拦截的方式无论是用它的属性。 因此,具有看起来像属性被改变的效果。
见- 第1部分 , 第2部分
你不能 - 除非你进行拦截加载程序集。 的属性被存储在元数据中,并装载有该组件,和属性通常应该是不可变(如BrowsableAttribute
是)。
基本上属性不意味着在执行时进行修改。
你那种可以。 我想的那一刻,我设法用的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
希望这可以帮助