Установка значения BrowsableAttribute во время выполнения - PullRequest
3 голосов
/ 17 сентября 2009

Я хотел установить значение BrowsableAttribute для некоторых свойств экземпляра MyClass во время выполнения:

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

Пожалуйста, сообщите, как это можно сделать, а также как добавить BrowsableAttribute к свойству MyClass экземпляра во время выполнения, если этот атрибут не существует.

Ответы [ 3 ]

5 голосов
/ 17 сентября 2009

Вы не можете - если вы не перехватите загрузку сборки. Атрибуты хранятся в метаданных и загружаются вместе со сборкой, а атрибуты обычно должны быть неизменными (как BrowsableAttribute).

В основном атрибуты не означают , которые должны быть изменены во время выполнения.

2 голосов
/ 20 сентября 2009

Вы можете реализовать собственный дескриптор типа - который перехватывает атрибут на пути к тому, кто его использует. Таким образом, эффект, который выглядит как атрибут, меняется.

См. - Часть 1 , Часть 2

1 голос
/ 12 октября 2010

Вы вроде можете. Я пытаюсь что-то подобное в данный момент, что мне удалось получить работать с 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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...