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); } } }
using System; using System.Windows; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows .Forms ;