是否可以在运行时应用EditableAttribute?我想仅在用户具有某个角色时才使某些属性可编辑。不幸的是EdiatbleAttribute是密封的。我可以尝试通过反射在运行时应用它,但也许有更合适的方法来做到这一点。感谢您的任何建议。
祝你好运
答案 0 :(得分:1)
hack 可在以下网址找到:How to Set Attribute Value at Runtime-- and How to Work around a Silly Bug
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
,即您可以修改现有对象的属性。
另外,请看一下类似的问题:Change Attribute's parameter at runtime
答案 1 :(得分:0)
我认为一个很好的选择是为你需要使用的控件(TextBox等)创建一个扩展助手,如果IsReadOnly属性为true(可编辑(false)),则生成一个禁用的文本框。