2012年1月31日 星期二

PropertyGrid的[Category][Description][DisplayName][Editor]注意事項

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]
[Editortypeof( System.Windows.Forms.Design.FolderNameEditor ), typeof( System.Drawing.Design.UITypeEditor ) )]
public  int FontSize
{
    get
    {
        return  _FontSize ;
    }
    set
    {
       if ( 0 < 
_FontSize )

       {
            _FontSize  = value
       }
    }
}

沒有留言:

張貼留言