我有一個PropertyGrid
,我用它在助手類中顯示屬性。我給你的助手類的PropertyGrid
這樣的:在PropertyGrid中動態設置屬性的只讀屬性
myPropertyGrid.SelectedObject = mySettingsHelper;
在輔助類我分配ReadOnlyAttribute
在設計時是這樣的:
[DisplayName("DisplayExA"),
Description("DescriptionExA"),
ReadOnlyAttribute(true)]
public string PropertyA { get; set; }
[DisplayName("DisplayExB"),
Description("DescriptionExB"),
ReadOnlyAttribute(false)]
public string PropertyB { get; set; }
[DisplayName("DisplayExC"),
Description("DescriptionExC"),
ReadOnlyAttribute(true)]
public string PropertyC { get; set; }
但現在我需要能夠改變這一屬性在運行時動態地顯示各個屬性。根據某些標準,這些屬性中的某些屬性可能需要是隻讀的或不是隻讀的。我如何在運行時動態地進行更改?
編輯:
我試着下面的代碼,但這個設置只讀屬性爲對象的每個實例!我想按照每個對象來做。有時一個對象可能具有PropertyA只讀,而另一個對象具有PropertyA而不是隻讀。
public static class PropertyReadOnlyHelper
{
public static void SetReadOnly(object container, string name, bool value)
{
try
{
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(container.GetType())[name];
ReadOnlyAttribute attribute = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo fieldToChange = attribute.GetType().GetField("isReadOnly",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
fieldToChange.SetValue(attribute, value);
}
catch { }
}
}
PropertyGrid'多少'你在你的應用程序中使用?如果一次只使用1個'PropertyGrid',我認爲你的目的可以實現,我們仍然需要改變'Attribute'類型,但是在選擇一個對象之前,我們將相應地切換'ReadOnly',並且應該這樣做招。 –