как сделать поля редактируемыми во время выполнения - PullRequest
2 голосов
/ 27 мая 2011

Можно ли применить EditableAttribute во время выполнения?Я хочу сделать некоторые свойства редактируемыми только тогда, когда у пользователя есть роль.К сожалению, EdiatbleAttribute запечатан.Я могу попытаться применить его во время выполнения путем отражения, но, возможно, есть более правильный способ сделать это.Спасибо за любые советы.

С уважением

Ответы [ 2 ]

1 голос
/ 27 мая 2011

Существует хак , доступный по адресу: Как установить значение атрибута во время выполнения - и как обойти глупую ошибку

private void SetPropertyGrid() 
{ 
     PropertyDescriptor descriptor = TypeDescriptor.GetProperties(typeof(Student))["Address"];
     ReadOnlyAttribute attrib = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
     FieldInfo isReadOnly = attrib.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
        isReadOnly.SetValue(attrib,true);

     propertyGrid1.SelectedObject = new Student();  
}

Я былвозможность этого кода изменить значение атрибута ReadOnly свойства.Оператор propertyGrid1.SelectedObject = new Student(); можно заменить на propertyGrid1.SelectedObject = myStudent, т. Е. Вы можете изменить свойства существующего объекта.

Также взгляните на аналогичный вопрос: Изменить параметр атрибута во время выполнения

0 голосов
/ 27 мая 2011

Я думаю, что хорошим вариантом является создание помощника расширения для элемента управления, который вам нужно использовать (TextBox и т. Д.), И если свойство IsReadOnly имеет значение true (Editable (false)), то создайте отключенное текстовое поле.

...