在运行时更改.NET Property Grid readonly属性

时间:2014-02-27 05:50:09

标签: c# winforms propertygrid

我有一个属性网格,我想在运行时更改其某些项目的readonly属性。 只读简单项目的readonly很容易,我没有问题,我的问题是我无法更改readonly为下面的图片中的纬度和经度等分层项目。我甚至试图让整个"位置"类别只读,但它似乎没有帮助。

hirarchy

附带问题:有没有办法将一些项目放在一个组中(比如这个位置项目)而不将它们包装在一个类中?

1 个答案:

答案 0 :(得分:1)

是的!这可能会有所帮助!

public class Member
{
string name;
bool isMarried;
string spouseName;

public string Name
{
get { return name; }
set { name = value; }
}

[System.ComponentModel.RefreshProperties(RefreshProperties.All)]
public bool IsMarried
{
get { return isMarried; }
set
{
isMarried = value;
bool newValue = !value;
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.GetType())["SpouseName"];
ReadOnlyAttribute attrib = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo isReadOnly = attrib.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
isReadOnly.SetValue(attrib, newValue);
}
}

[ReadOnly(true)]
public string SpouseName
{
get { return spouseName; }
set
{
spouseName = value;
}
}
}