protected override void OnPaint(PaintEventArgs pe)
{
//first, paint the control with parent form's background color
pe.Graphics.FillRectangle(new SolidBrush(Parent.BackColor),
pe.ClipRectangle);
//if the button is disabled, draw the disable style
if (Enabled == false)
{
DrawDisableButton(pe.Graphics);
}
else if (mouseDown)
{
//when mouse down, draw the mouse down style
DrawMouseDownButton(pe.Graphics);
}
else if (mouseHover)
{
//when mouse hover, draw the mouse hover style
DrawMouseHoverButton(pe.Graphics);
}
else if (Focused)
{
//when mouse is focused but not mouse hover,
//draw the focus style
DrawContainFocusButton(pe.Graphics);
}
else//else, draw the normal style
{
DrawNormalButton(pe.Graphics);
}
WriteText(pe.Graphics);//write text
}
private void OnMouseDown(object sender,MouseEventArgs e)
{
mouseDown=true; //mouse is down now
}
private void OnMouseUp(object sender,MouseEventArgs e)
{
mouseDown=false; //mouse is up now
//call paint action
PaintEventArgs pe =
new PaintEventArgs(CreateGraphics(),ClientRectangle);
OnPaint(pe);
}
private void OnMouseEnter(object sender,EventArgs e)
{
mouseHover=true; //mouse hover on
//call paint action
PaintEventArgs pe =
new PaintEventArgs(CreateGraphics(),ClientRectangle);
OnPaint(pe);
}
private void OnMouseLeave(object sender,EventArgs e)
{
mouseHover=false; //mouse is not hover on
//call paint action
PaintEventArgs pe =
new PaintEventArgs(CreateGraphics(),ClientRectangle);
OnPaint(pe);
}
private void DrawBorder(Graphics g,int state)
{
if (state==1)//draw normal style broder
{
Pen p = new Pen(SystemColors.ControlLightLight,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==2)//draw hover style border
{
Pen p = new Pen(Color.Yellow,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==3)//draw pressed style border
{
Pen p = new Pen(SystemColors.ControlDark,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==4)//draw disabled style border
{
Pen p = new Pen(SystemColors.ControlLight,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
else if (state==5)//draw default style border
{
Pen p = new Pen(Color.SkyBlue,2);
g.DrawLine(p,1,1,1,Height-2);
g.DrawLine(p,1,1,Width-2,1);
g.DrawLine(p,Width-1,2,Width-1,Height-2);
g.DrawLine(p,2,Height-1,Width-2,Height-1);
}
if (state==4)//draw disable style border
{
Pen p = new Pen(Color.FromArgb(161,161,146),1);
g.DrawLine(p,0,2,0,Height-3);
g.DrawLine(p,2,0,Width-3,0);
g.DrawLine(p,Width-1,2,Width-1,Height-3);
g.DrawLine(p,2,Height-1,Width-3,Height-1);
g.DrawLine(p,0,2,2,0);
g.DrawLine(p,0,Height-3,2,Height-1);
g.DrawLine(p,Width-3,0,Width-1,2);
g.DrawLine(p,Width-3,Height-1,Width-1,Height-3);
}
else//draw normal style border
{
g.DrawLine(Pens.Black,0,2,0,Height-3);
g.DrawLine(Pens.Black,2,0,Width-3,0);
g.DrawLine(Pens.Black,Width-1,2,Width-1,Height-3);
g.DrawLine(Pens.Black,2,Height-1,Width-3,Height-1);
g.DrawLine(Pens.Black,0,2,2,0);
g.DrawLine(Pens.Black,0,Height-3,2,Height-1);
g.DrawLine(Pens.Black,Width-3,0,Width-1,2);
g.DrawLine(Pens.Black,Width-3,Height-1,
Width-1,Height-3);
}
}
private void DrawNormalButton(Graphics g)//draw normal style button
{
//draw normal style border
DrawBorder(g,1);
//paint background area of the button
private void PaintBack(Graphics g,Color c)
{
g.FillRectangle(new SolidBrush(c),3,3,
Width-6,Height-6);
}
private void WriteText(Graphics g)
{
//calculate the text position
int x=0,y=0;
Size s = g.MeasureString(Text,Font).ToSize();
x=(Width-s.Width)/2;
y=(Height-s.Height)/2;
//draw text
if (Enabled) //is enabled, draw black text
g.DrawString(Text,Font,Brushes.Black,x,y);
else //not enabled, draw gray text
g.DrawString(Text,Font,Brushes.Gray,x,y);
}
}
}