我想在运行时为某些BrowsableAttribute
实例的属性设置MyClass
的值:
public class MyClass
{
[Browsable(true)]
public int P1 { get; set }
...
}
如果此属性不存在,请告知如何完成此操作以及如何在运行时将BrowsableAttribute
添加到MyClass
实例的属性。
答案 0 :(得分:5)
你不能 - 除非你拦截加载程序集。属性存储在元数据中,并使用程序集加载,属性通常应该是不可变的(如BrowsableAttribute
所示)。
基本上,属性不是意味着在执行时被修改。
答案 1 :(得分:2)
答案 2 :(得分:1)
你可以。我正在尝试这样的事情,我设法使用CategoryAttribute。但是,这会阻止属性网格一起工作,即使这是在按钮的构造函数中调用的:
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
希望这有帮助