PropertyGrid是一個特別的大元件,[Category][Description][DisplayName]這些都是配合的特殊語法,他有一些限制條件,就是必須放在Member的上一行。搭配.NET3.5的封裝寫法,可以很簡單的撰寫,如下例
[Category( "Font" ), Description( "Font Size" )]
public int FontSize { get; set; }
但是,如果你需要在 set 或 get 函式做一些判斷,那就不能用.NET3.5的簡易寫法了,你必須定義一個 Private 的 Member,然後透過封裝的 get, set 將 Member給外面使用,但,這時候就要注意,[Category][Description][DisplayName]這一行,必須要寫在 private 跟 public 的中間囉,否則你會得到這樣的訊息:
屬性 'xxxxxxxx' 在此宣告型別上無效。它只在 'class, method, property, indexer, event' 宣告上有效
---錯誤寫法---
[Category( "Font" ), Description( "Size of the font" ), DisplayName( "Font Size" ]
[Editor( typeof( System.Windows.Forms.Design.FolderNameEditor ), typeof( System.Drawing.Design.UITypeEditor ) )]
private int _FontSize;
public int FontSize
{
get
{
return _FontSize ;
}
set
{
if ( 0 < _FontSize )
{
_FontSize = value
}
}
}
---正確寫法---
private int _FontSize;
[Category( "Font" ), Description( "Size of the font" ), DisplayName( "Font Size" ]
[Editor( typeof( System.Windows.Forms.Design.FolderNameEditor ), typeof( System.Drawing.Design.UITypeEditor ) )]
public int FontSize
{
get
{
return _FontSize ;
}
set
{
if ( 0 < _FontSize )
{
_FontSize = value
}
}
}
沒有留言:
張貼留言