博客轉移到 http://jacean.github.io/ 繼續分享編程經驗
因為要做流體布局,但兩個控件沒辦法組合,就做自定義控件。這個控件需要一個text設置文本,一個pic設置圖片顯示,圖片通過選擇獲取,在屬性面板里能夠修改。
添加用戶控件之后就可以自己隨意設置控件內容了,這里說下關於屬性的一些設置。
- 自定義控件顯示在工具箱的開關:
將true改為false就可以不顯示了。
[ToolboxItem(true)] public partial class UserControl1 : UserControl
- 自定義控件在工具箱中的圖標顯示:
可以使用已有控件的圖標,
1 [ToolboxBitmap(typeof(System.Windows.Forms.PictureBox))] 2 public partial class UserControl1 : UserControl
如果不想用系統的圖標,要使用自己的圖標,可以這樣(這部分未測試,源於參考文章)
1 [ToolboxBitmap(typeof(MyPanel), "WindowsApplication1.Images.MyPanel.bmp")] 2 public class MyPanel : UserControl
不過,一定要注意路徑,WindowsApplication1.Images.MyPanel.bmp表示,解決方案是WindowsApplication1,目錄是Images,文件名是MyPanel.bmp,同時,這個圖片必須是“嵌入的資源”(點擊文件,右鍵,屬性,有一個文件屬性,其中,在生成操作中,可以選擇"嵌入的資源")
- 自定義控件在屬性面板上的顯示開關:
1 [Browsable(true)] 2 [Description("屬性描述"), Category("屬性類別"), DefaultValue("屬性默認值,重置時使用")] 3 public override string Text 4 { 5 get { return label1.Text; } 6 set { label1.Text = value; } 7 }
category設定的是屬性在屬性面板上顯示的類別,當使用了類別時,組件屬性和事件可以按邏輯分組顯示在屬性瀏覽器中。Category("Appearance")就可以把屬性從雜項轉移到外觀。
(摘抄自參考文章)用於設置默認的值,對於string,bool,int,可以直接寫出來,如[DefaultValue(10)],這是可以的,不過,不是這三種類型的話,就比較麻煩,一定要先轉化為string才能設置成功。如上面的DarkGray,這是系統定義的顏色,這還是比較好處理的。不過,如果是一些自定義的顏色,如顏色是128,0,128,你應該將128轉為16進制,寫成0x800080,前綴0x是一定要加的。最后就這樣[DefaultValue(typeof(Color), "0x800080")]
還有一種[DefaultValue(typeof(Color), "0, 70, 213")]
如果是字體的話需要[DefaultValue(typeof(Font), "宋體, 9pt")]
這兩種特殊情況三種方法本人均未測試。 - 自定義控件屬性選擇資源:
如果自定義的屬性不是文本等輸入,是圖片之類的就需要類似於picturebox的資源選擇了,所以在設置屬性的時候使用文件類型來定義,如選擇圖片的例下
1 [Browsable(true)] 2 [Description("設置控件圖片"), Category("setPic"), DefaultValue(" ")] 3 public Bitmap setPic 4 { 5 get { return (Bitmap)this.pictureBox1.Image; } 6 set 7 { 8 this.pictureBox1.Image = value; 9 } 10 }
這樣的話就會在屬性面板的設置中出現選擇資源的對話框來選擇。
- 自定義控件屬性選擇下拉列表:
在定義屬性的時候需要先設置好枚舉值,通過枚舉來定義屬性,如例下
1 public enum indexEnum 2 { 3 a, 4 b, 5 c 6 } 7 public indexEnum index; 8 [Browsable(true)] 9 [Description("設置index"), Category("Index"), DefaultValue("屬性默認值")] 10 public indexEnum Index 11 { 12 get { return index; } 13 set { index = value; } 14 }
附:
參考文章:常用Design屬性 【C#】媽媽再也不用擔心自定義控件如何給特殊類型的屬性添加默認值了,附自定義GroupBox一枚