我有一项服务,它在运行时将属性的 ReadOnly 属性设置为 true/false,因此用户将无法更改 propertyGrid 中的属性值。
当在文本编辑器中编辑属性时,该服务很有用。但是,我的一些编辑器是组合框。当我将属性设置为只读时,我希望禁用下拉菜单 - 这意味着用户将能够在组合框中看到选定的项目,但是当他单击组合框旁边的箭头以查看选项时,什么都不会发生。这不适用于当前的实现。我想我需要对该属性使用不同的属性。我试图更改属性的“EditableAttribute”,但它不起作用....我用来更改只读属性的代码:
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(obj)[property];
ReadOnlyAttribute attribute = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo fieldInfo = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
fieldInfo.SetValue(attribute, value);
有任何想法吗?