我正在定義一個與PropertyGrid控件一起使用的自定義類。說,其中一個屬性的定義是這樣的:如何動態地或在運行時設置PropertyGrid的DefaultValueAttribute?
[CategoryAttribute("Section Name"),
DefaultValueAttribute("Default value"),
DescriptionAttribute("My property description")]
public string MyPropertyName
{
get { return _MyPropertyName; }
set { _MyPropertyName = value; }
}
private string _MyPropertyName;
正如你看到DefaultValueAttribute
定義屬性的默認值。這種默認值在兩種情況下使用:
如果該屬性的值從默認值之一
PropertyGrid
控制將以粗體顯示它改變,並且如果我稱之爲
PropertyGrid
的ResetSelectedProperty
方法, 它會將該默認值應用於選定的單元格。
這個概念正常工作,除了DefaultValueAttribute
的一個限制。它只接受一個常數值。所以我很好奇,我可以從構造函數或後來的代碼中動態地設置它嗎?
編輯:我能找到this code,讓我讀DefaultValueAttribute
:
AttributeCollection attributes = TypeDescriptor.GetProperties(this)["MyPropertyName"].Attributes;
DefaultValueAttribute myAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
string strDefaultValue = (string)myAttribute.Value;
是,你怎麼設置的問題?
的DefaultValueAttribute不設置該屬性的值,它是純粹的信息...檢查這個http://stackoverflow.com/questions/705553/net-defaultvalueattribute-on-properties。 – Mate
@Mate:好的。那麼如何設置默認值呢? 「ResetSelectedProperty」方法使用的那個。 – c00000fd
您不能使用該屬性來執行此操作,屬性適用於類型而不是對象。你將不得不提供一個自定義的PropertyDescriptor。覆蓋它的CanResetValue,ResetValue和ShouldSerializeValue成員。儘管它們都只是一行,但需要大量的代碼,一個體面的谷歌查詢是「.net custom propertydescriptor」。 –