winform 自定義控件屬性在屬性面板中顯示的問題

我們做了自定義控件,在工具箱裏拖出來的時候,想要直接在屬性面板中直接編輯控件的自定義屬性

我們可以用如下標籤

 

 

        [Browsable(true)]
        [Description("屬性描述"), Category("屬性卡名稱"),DefaultValue("屬性默認值")]
        public string TextEdit
        {
            set
            {
                this.textEdit1 = value;
            }
            get
            {
                return this.textEdit1;
            }
        }


以下爲其他博友關於自定義控件屬性的文章

轉自:  http://www.myfirm.cn/News/DotNetUserInterface/20080228083019417.html

在開發自定義控件件時,有好些Design屬性是要使用的,如ToolboxItem, ToolboxBitmap, Category, Description等等,不知道這些屬性其實也可以將控件搞出來,不過,知道了,會令事件更加簡單,令控件更加專業和實用。有時,不知道用法,會令到項目的其他同事好煩,因爲這個控件是你提供的。下面對一些常用的Design屬性做一個簡單的生產介紹。

ToolboxItem
有沒有試過寫一個用戶控件後,想它不出現在工具箱中,當然有,有時候是控件的Designer部分沒有寫好或沒寫,有時候是控件一拖出來就報錯,有時候是內部使用的控件,不想別人一引用DLL就出現控件。其它設置方法可以很簡單。
[ToolboxItem(false)]
public class MyPanel : UserControl
這樣就可以了。“可惡”的用戶控件就自動隱藏了,不出現在工具箱中。不過,如果你不知道這樣的話,可以會引來一大堆的煩事。

ToolboxBitmap
寫好一個用戶控件後,在工具箱中出來的是一個藍色的齒輪,這就不是很漂亮了,也不能夠直觀地表達自己的意圖。如果更不幸的你的控件的名稱好難認的話,其它的開發者會很麻煩的。怎樣才能讓用戶控件在工具箱中顯示不同的圖標呢?
[ToolboxBitmap(typeof(System.Windows.Forms.Panel))]
public class MyPanel : UserControl
這樣就可以了,表示,你所做的用戶控件使用的圖標是Panel的圖標。
如果不想用系統的圖標,要使用自己的圖標,可以這樣
[ToolboxBitmap(typeof(MyPanel), "WindowsApplication1.Images.MyPanel.bmp")]
public class MyPanel : UserControl
不過,一定要注意路徑,WindowsApplication1.Images.MyPanel.bmp表示,解決方案是WindowsApplication1,目錄是Images,文件名是MyPanel.bmp,同時,這個圖片必須是“嵌入的資源”(點擊文件,右鍵,屬性,有一個文件屬性,其中,在生成操作中,可以選擇"嵌入的資源")

Category與Description
[Category("Appearance"), Description("陰影色")]
public System.Drawing.Color ShadowColor { get { …} set { …} }
這兩個是經常都會寫在一起的屬性,Category表示類型,如屬性框中所顯示的外觀,佈局等,當然,你可以自己寫一個,叫“自定義屬性”,而Description就是這個屬性的描述,用來說明屬性有什麼用途。這兩個的設置相對都比較簡單,可以說,一看就知道,不過提一下,Appearance是特殊的詞,在屬性面板中,它就是外觀一欄。

DefaultValue
[DefaultValue(typeof(Color), "DarkGray")]
public System.Drawing.Color ShadowColor { get { …} set { …} }
用於設置默認的值,對於string,bool,int,可以直接寫出來,如[DefaultValue(10)],這是可以的,不過,不是這三種類型的話,就比較麻煩,一定要先轉化爲string才能設置成功。如上面的DarkGray,這是系統定義的顏色,這還是比較好處理的。不過,如果是一些自定義的顏色,如顏色是128,0,128,你應該將128轉爲16進制,寫成0x800080,前綴0x是一定要加的。最後就這樣
[DefaultValue(typeof(Color), "0x800080")]

Browsable
表示,是否在屬性面板中顯示這個屬性
[Browsable(true)]
表示,將在屬性面板中顯示這個屬性。

DesignerSerializationVisibility
表示,是否在*.Designer.cs文件中將設置的代碼寫出來,也就是是否要實現序列化
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
表示需要實現序列化。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章