Skip to main content
Email Password   helpLost your password?

Sample Image - springbutton.jpg

Introduction

In this sample is shown how to build a simple button with a nice graphic interface. using the.My control would be an example about using the drawings classes and the essentials key-words .I decide to draw an unusual button like this picture below:
Sample Image - abutton.jpg

First step

First of all I declare my new class :
public class SpringButton : Control
{}

how to expose proprieties

After that I expose some essential proprieties like the size in pixel of the triangles and the second color of the button.All the others proprieties that i need are yet behind the System.Windows.Form.Control class.

        //this variable say if the
        //mouse is over the contol
        private bool Sel = false;
        private Color BackColor2= Color.Gray;
        
        public Color BackColorEnd
        {
            get{return BackColor2; }
            set{BackColor2=value; 
                this.Invalidate();  }
        
        }
        
        int _triangle =25;
        //I add a proprety
        //that's the lenght of
        //a triangle rectangle (45�)
        
        public int Triangle
        {
            get{return _triangle;}
            set{ 
                _triangle=value;
                //if lenght change I update 
                //the control
                this.Invalidate(true);
            }
        }

Mouse "lighting"

Another important step is to set te control as �selected� when the mouse is over .So if the mouse is over the control the back color and the border color are inverted.(See the code in the OnPaint override)
    //set the button as "selected" on mouse entering
    //and as not selected on mouse leaving
        protected override void OnMouseEnter(EventArgs e)
        {
            Sel = true;
            this.Invalidate();

        }
        protected override void OnMouseLeave(EventArgs e)
        {
            Sel = false;
            this.Invalidate();

        }

The core

The main step is this override of the OnPaint procedure.In this method i draw idirectly on the control ,firstthe central rectangle ,and than the two triangle in the opposite corners. I use this code:
  protected void PaintBut(PaintEventArgs e)
          {
              //I select the rights color 
              //To paint the button...
              Color FColor = this.BackColorEnd;
              Color BColor = this.BackColor;
              if (Sel == true)
              {
                  FColor = this.BackColor;

                  BColor = this.BackColorEnd;
              }
           //and draw(see All the code...)
          

The delagate

In the end i would to explain ho to use delegate.So i declared this class that i use as EventArgs. In fact wen the use click on the control i decide if the click has been on a triangleand if yes,i do a delegate with the TriangleEventArgs that say wath triangle has been clicked.
protected override void OnMouseDown(MouseEventArgs e)
        { 
            base.OnClick(e);
            // if the user use this delegate...
            if (this.TriangleClick != null)
            {
            //check if the user click on the left triangle
            //or in the right with some geometrics  rules...
            //(is't possible to click all triangle at the same time )
            
            int x= e.X;
            int y= e.Y;
            
            if((x<_triangle)&&(y<=(_triangle-x))||
               (x>this.ClientRectangle.Width-_triangle)&&(y>=(this.ClientRectangle.Height-_triangle-x)) )
            {
                
            
                //try with right...
                TriangleClickEventArgs te= new TriangleClickEventArgs(false);
                //if not...
                if((x<_triangle)&&(y<=(_triangle-x)))
                    te= new TriangleClickEventArgs(true);
                   
                    this.TriangleClick(this,te);


                }
            }
        }

Credits

If You would see my other work please visit my home page: http://zeppaman.altervista.org

Tanks!!

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralIButtonControl Pin
gabis
21:06 15 Jul '06  
GeneralAh! It's cool! Pin
Mahesh Sapre
5:07 10 May '06  
GeneralRe: Ah! It's cool! Pin
Sir Zeppa'Man
6:04 10 May '06  
GeneralNice Pin
NinjaCross
0:51 10 May '06  
GeneralRe: Nice Pin
Sir Zeppa'Man
1:31 10 May '06  
Generaltyu Pin
pccai
2:12 24 Nov '05  
QuestionSpring Button Pin
mr chiken
6:57 23 Nov '05  
GeneralRe: Spring Button [modified] Pin
The_Mega_ZZTer
14:50 9 Jul '06  


Last Updated 7 Jul 2006 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009