参考了这篇文章:

http://www.cnblogs.com/qianlifeng/archive/2010/04/13/1710869.html

 

我的代码:

JButton.cs

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.ComponentModel; 
  4. using System.Drawing; 
  5. using System.Data; 
  6. using System.Linq; 
  7. using System.Text; 
  8. using System.Windows.Forms; 
  9. using System.Reflection; 
  10.  
  11. namespace JiaYiControls 
  12.     [DefaultEvent("Click")] 
  13.     public partial class JButton : UserControl 
  14.     { 
  15.         private Image _normalImage = null
  16.         private Image _hoverImage = null
  17.         private Image _downImage = null
  18.  
  19.         public JButton() 
  20.         { 
  21.             _normalImage=Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(@"JiaYiControls.assert.button.normal.bmp")); 
  22.             (_normalImage as Bitmap).MakeTransparent(Color.FromArgb(255, 0, 255)); 
  23.             _hoverImage = Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(@"JiaYiControls.assert.button.hover.bmp")); 
  24.             (_hoverImage as Bitmap).MakeTransparent(Color.FromArgb(255, 0, 255)); 
  25.             _downImage = Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(@"JiaYiControls.assert.button.down.bmp")); 
  26.             (_downImage as Bitmap).MakeTransparent(Color.FromArgb(255, 0, 255)); 
  27.  
  28.             InitializeComponent(); 
  29.             this.BackgroundImage = _normalImage; 
  30.         } 
  31.  
  32.         [Category("JiaYiControls")] 
  33.         public Image NormalImage 
  34.         { 
  35.             get { return _normalImage; } 
  36.             set { _normalImage = value; } 
  37.         } 
  38.  
  39.         [Category("JiaYiControls")] 
  40.         public Image HoverImage 
  41.         { 
  42.             get { return _hoverImage; } 
  43.             set { _hoverImage = value; } 
  44.         } 
  45.  
  46.         [Category("JiaYiControls")] 
  47.         public Image DownImage 
  48.         { 
  49.             get { return _downImage; } 
  50.             set { _downImage = value; } 
  51.         } 
  52.  
  53.         [Category("JiaYiControls")] 
  54.         public string Caption 
  55.         { 
  56.             get { return this.label1.Text; } 
  57.             set { this.label1.Text = value; } 
  58.         } 
  59.  
  60.         private void label1_Click(object sender, EventArgs e) 
  61.         { 
  62.             this.OnClick(e); 
  63.         } 
  64.  
  65.         private void label1_MouseUp(object sender, MouseEventArgs e) 
  66.         { 
  67.             this.BackgroundImage = _normalImage; 
  68.         } 
  69.  
  70.         private void label1_MouseDown(object sender, MouseEventArgs e) 
  71.         { 
  72.             this.BackgroundImage = _downImage; 
  73.         } 
  74.  
  75.         private void label1_MouseHover(object sender, EventArgs e) 
  76.         { 
  77.             this.BackgroundImage = _hoverImage; 
  78.         } 
  79.  
  80.         private void label1_MouseLeave(object sender, EventArgs e) 
  81.         { 
  82.             this.BackgroundImage = _normalImage; 
  83.         } 
  84.  
  85.  
  86.     } 

设计器产生的代码:

 

  1. namespace JiaYiControls 
  2.     partial class JButton 
  3.     { 
  4.         /// <summary> 
  5.         /// 必需的设计器变量。 
  6.         /// </summary> 
  7.         private System.ComponentModel.IContainer components = null
  8.  
  9.         /// <summary> 
  10.         /// 清理所有正在使用的资源。 
  11.         /// </summary> 
  12.         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> 
  13.         protected override void Dispose(bool disposing) 
  14.         { 
  15.             if (disposing && (components != null)) 
  16.             { 
  17.                 components.Dispose(); 
  18.             } 
  19.             base.Dispose(disposing); 
  20.         } 
  21.  
  22.         #region 组件设计器生成的代码 
  23.  
  24.         /// <summary> 
  25.         /// 设计器支持所需的方法 - 不要 
  26.         /// 使用代码编辑器修改此方法的内容。 
  27.         /// </summary> 
  28.         private void InitializeComponent() 
  29.         { 
  30.             this.label1 = new System.Windows.Forms.Label(); 
  31.             this.SuspendLayout(); 
  32.             //  
  33.             // label1 
  34.             //  
  35.             this.label1.BackColor = System.Drawing.Color.Transparent; 
  36.             this.label1.Dock = System.Windows.Forms.DockStyle.Fill; 
  37.             this.label1.Location = new System.Drawing.Point(0, 0); 
  38.             this.label1.Name = "label1"
  39.             this.label1.Size = new System.Drawing.Size(78, 30); 
  40.             this.label1.TabIndex = 0; 
  41.             this.label1.Text = "label1"
  42.             this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 
  43.             this.label1.MouseLeave += new System.EventHandler(this.label1_MouseLeave); 
  44.             this.label1.Click += new System.EventHandler(this.label1_Click); 
  45.             this.label1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.label1_MouseDown); 
  46.             this.label1.MouseHover += new System.EventHandler(this.label1_MouseHover); 
  47.             this.label1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.label1_MouseUp); 
  48.             //  
  49.             // JButton 
  50.             //  
  51.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 
  52.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
  53.             this.BackColor = System.Drawing.Color.Transparent; 
  54.             this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; 
  55.             this.Controls.Add(this.label1); 
  56.             this.Name = "JButton"
  57.             this.Size = new System.Drawing.Size(78, 30); 
  58.             this.ResumeLayout(false); 
  59.  
  60.         } 
  61.  
  62.         #endregion 
  63.  
  64.         private System.Windows.Forms.Label label1; 
  65.     } 

 

 

只是测试用的代码而已。

注意在ps里图片,透明部分,这里颜色是RGB(255,0,255).

 

测试下控件: