using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms; namespace DynamicLink.Controls { public class MyButton : Button { private readonly Color ColorNormal1 = Color.FromArgb(0xff, 0xee, 0xee, 0xee); private readonly Color ColorNormal2 = Color.FromArgb(0xff, 0xbb, 0xbb, 0xbb); private readonly Color ColorFocus1 = Color.FromArgb(0xff, 0xff, 0xff, 0xff); private readonly Color ColorFocus2 = Color.FromArgb(0xff, 0xc8, 0xc8, 0xc8); private readonly Color ColorPressed1 = Color.FromArgb(0xff, 0xbb, 0xbb, 0xbb); private readonly Color ColorPressed2 = Color.FromArgb(0xff, 0xdd, 0xdd, 0xdd); public bool IsMouseOver { get; private set; } public bool IsPressed { get; private set; } public MyButton() : base() { this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.SetStyle(ControlStyles.Opaque, false); //this.Paint += new PaintEventHandler(MyButton_Paint); this.MouseEnter += new EventHandler(MyButton_MouseEnter); this.MouseLeave += new EventHandler(MyButton_MouseLeave); this.MouseDown += new MouseEventHandler(MyButton_MouseDown); this.MouseUp += new MouseEventHandler(MyButton_MouseUp); } #region Mouse input void MyButton_MouseUp(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { IsPressed = false; this.Invalidate(); } } void MyButton_MouseDown(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { IsPressed = true; this.Invalidate(); } } void MyButton_MouseLeave(object sender, EventArgs e) { IsMouseOver = false; this.Invalidate(); } void MyButton_MouseEnter(object sender, EventArgs e) { IsMouseOver = true; this.Invalidate(); } #endregion protected override void OnPaint(PaintEventArgs e) { // base.OnPaint(pevent); //InvalidateEx(); // Create gradient LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, this.Width, this.Height), ColorNormal1, ColorNormal2, 90); if (this.IsMouseOver) brush = new LinearGradientBrush(new Rectangle(0, 0, this.Width, this.Height), ColorFocus1, ColorFocus2, 90); if (this.IsPressed) brush = new LinearGradientBrush(new Rectangle(0, 0, this.Width, this.Height), ColorPressed1, ColorPressed2, 90); // Set up graphics // e.Graphics.Clear(this.BackColor); e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; // Draw rectangle RoundedRectangle.FillRoundedRectangle(e.Graphics, new Rectangle(0, 0, this.Width - 1, this.Height - 1), brush, 4); e.Graphics.DrawPath(Pens.Gray, RoundedRectangle.GetPath(new Rectangle(0, 0, this.Width - 1, this.Height - 1), 4)); // Draw text SizeF size = e.Graphics.MeasureString(this.Text, this.Font); e.Graphics.DrawString(this.Text, this.Font, Brushes.Black, (this.Width - size.Width) / 2, (this.Height - size.Height) / 2); } private void InitializeComponent() { this.SuspendLayout(); // // MyButton // this.BackColor = System.Drawing.Color.Transparent; this.UseVisualStyleBackColor = false; this.ResumeLayout(false); } } }