Custom Gradient Button with hover Effect C#.NET

No.of Views1908
Bookmarked0 times
Downloads 
Votes0
By  jalpesh   On  21 Jun 2010 11:06:28
Tag : CSharp , Owner-draw buttons
In this code snippet, i have describe to create a custom button with hover effect.
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

Introduction

one create a gradient button with this example. Which have hover effect.

Code snippet

class CustomButton:Button
{
#region Fields
private Color _StartColor;
private Color _EndColor;
private Color _StartHoverColor;
private Color _EndHoverColor;
private bool bMouseHover;
private Brush _paintBrush;
private PointF _centerPoint;
StringFormat _sf = new StringFormat();
#endregion#region Properties
public Color StartColor
{
get{
return _StartColor;
}
set{
if (value == Color.Empty)
{
_StartColor = Color.FromArgb(251,250,249);
}
else{
_StartColor = value;
}
}
}
public Color StartHoverColor
{
get{
return _StartHoverColor;
}
set{
if (value == Color.Empty)
{
_StartHoverColor =Color.White;
}
else{
_StartHoverColor = value;
}
}
}
public Color EndHoverColor
{
get{
return _EndHoverColor;
}
set{
if (value == Color.Empty )
{
_EndHoverColor = Color.FromArgb(255,255,207) ;
}
else{
_EndHoverColor = value;
}
}
}
public Color EndColor
{
get{
return _EndColor;
}
set{
if (value == Color.Empty)
{
_EndColor = Color.FromArgb(224,220,207);
}
else{
_EndColor = value;
}
}
}
#endregion#region Constructor
public CustomButton()
{
InitializeComponent();
bMouseHover = false;
_sf.Alignment = StringAlignment.Center;
_sf.FormatFlags = StringFormatFlags.DirectionRightToLeft;
}
#endregion#region Methods
private void OnMouseEnter(object sender, System.EventArgs e)
{
bMouseHover = true;
Invalidate();
}
private void OnMouseLeave(object sender, System.EventArgs e)
{
bMouseHover = false;
Invalidate();
}
private void InitializeComponent()
{
this.MouseEnter += new System.EventHandler(this.OnMouseEnter);
this.MouseLeave += new System.EventHandler(this.OnMouseLeave);
}
protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
Graphics g = pevent.Graphics;
if (bMouseHover == true)
{
_paintBrush = new LinearGradientBrush(this.ClientRectangle,this.StartHoverColor,this.EndHoverColor,LinearGradientMode.Vertical);
}
else{
_paintBrush = new LinearGradientBrush(this.ClientRectangle, this.StartColor, this.EndColor, LinearGradientMode.Vertical);
}
g.FillRectangle(_paintBrush, this.ClientRectangle);
_paintBrush = new SolidBrush(this.ForeColor);
//this._centerPoint = new PointF((this.ClientRectangle.Left + this.ClientRectangle.Right) / 2,// (this.ClientRectangle.Top + this.ClientRectangle.Bottom) / 2);this._centerPoint = new PointF(this.Width / 2, this.Height / 2);
g.DrawString(this.Text,this.Font,_paintBrush, _centerPoint.X, _centerPoint.Y-5, _sf);
paint_Border(pevent);
}
private void paint_Border(PaintEventArgs e)
{
if (e == null)
return;
if (e.Graphics == null)
return;
Pen pen = new Pen(this.ForeColor, 1);
Point[] pts = border_Get(0, 0, this.Width - 1, this.Height - 1);
e.Graphics.DrawLines(pen, pts);
pen.Dispose();
}
private Point[] border_Get(int nLeftEdge, int nTopEdge, int nWidth, int nHeight)
{
int X = nWidth;
int Y = nHeight;
Point[] points =
{
new Point(1 , 0 ),
new Point(X-1 , 0 ),
new Point(X-1 , 1 ),
new Point(X , 1 ),
new Point(X , Y-1),
new Point(X-1 , Y-1),
new Point(X-1 , Y ),
new Point(1 , Y ),
new Point(1 , Y-1),
new Point(0 , Y-1),
new Point(0 , 1 ),
new Point(1 , 1 )
};
for (int i = 0; i < points.Length; i++)
{
points[i].Offset(nLeftEdge, nTopEdge);
}
return points;
}
#endregion}

I hope this is help to you all.

 
Sign Up to vote for this article
 
About Author
 
jalpesh
Occupation-Software Engineer
Company-DotNetJaps
Member Type-Expert
Location-India
Joined date-08 May 2010
Home Page-http://www.dotnetjalps.com
Blog Page-http://www.dotnetjalps.com
I am jalpesh vadgamaa an Microsoft MVP for Visual C# and BrainBench Certified ASP.NET Developer having experience of five year in Microsoft .NET Technology.I am working as Project Leader in Mid Size company.My work area comprises of Enterprise Level projects using ASP.NET and other Microsoft .NET Technologies.Please feel free to contact me for any queries via posting comments on my blog I will try to reply as early as possible.
 
 
Other popularSectionarticles
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top