拖一个label 控件到用户控件上面并设置label的属性
AutoSize = false;
Dock:fill
TextAlign:MiddleCenter
BackColor:TransParent
Font:宋体,9pt
先贴代码
namespace button_add { [DefaultEvent("Click")] //默认的点击事件 public partial class button: UserControl { public button() { this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer,true); downImage = Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(@"button_add.button.FixAllButton_down.png")); moveImage = Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(@"button_add.button.FixAllButton_highlight.png")); normalIamge = Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(@"button_add.button.FixAllButton_normal.png")); MakeTransParens(normalIamge); MakeTransParens(downImage); MakeTransParens(moveImage); InitializeComponent(); this.BackgroundImage = normalIamge; } #region Image normalIamge = null; Image moveImage = null; Image downImage = null; #endregion [Category("QLFSkinDll")]//将属性分类 public Image NormalImage { get { return normalIamge; } set { normalIamge = value; } } [Category("QLFSkinDll")]//将属性分类 public Image DownImage { get { return downImage; } set { downImage = value; } } [Category("QLFSkinDll")]//将属性分类 public Image MoveImage { get { return moveImage; } set { moveImage = value; } } public string Caption { get { return this.label1.Text; } set { this.label1.Text = value; } } #region 辅助函数 private void MakeTransParens( Image image) { Bitmap bitmap = image as Bitmap; bitmap.MakeTransparent(Color.FromArgb(255,0,255)); } #endregion #region 事件 private void label1_MouseLeave(object sender, EventArgs e) { this.BackgroundImage = normalIamge; } private void label1_MouseEnter(object sender, EventArgs e) { this.BackgroundImage = moveImage; } private void label1_MouseDown(object sender, MouseEventArgs e) { this.BackgroundImage = downImage; } private void label1_Click(object sender, EventArgs e) { this.OnClick(e); } #endregion } }1: [DefaultEvent("Click")] //默认的是Click事件,如果携程【DefaultEvent("MouseEnter") 就是MouseEnter事件】
三个按钮分别对应normal,mouseMove,MouseDown
2:具体要解释的即是【Category("QLFSkinDll")】,这句话的意思是将这些属性分类.
3: public button() 第一句话的意思开始了窗体的双缓冲。 接下来的三句是给三个状态的图像赋值,在项目中的图片点击之后将“生成操作”改为嵌入的资源。
Assembly.GetExecutingAssembly.GetManifestResourceStream(@QLFUI.Res.button.btnnomal.bmp) 黑体的规则为: 命名空间+文件夹名+ 资源名称。
容易出错的地方:
当时也是找到了类似的一片文章,完全照搬之后发现一个问题是拖拽自定义的控件之后发现点击按钮没有反应。原因是事件没有关联。其中的 label1_MouseLeave label1_MouseEnter label1_MouseDown 这三个函数应该是要和label 控件关联起来。