0% found this document useful (0 votes)
6 views3 pages

Figurer

The document defines a custom button class, RJButton, that inherits from the standard Button class in C#. It includes properties for border size, border radius, border color, background color, and text color, along with methods to handle painting and resizing the button with rounded corners. The button is designed to have a flat style and allows for customization of its appearance through the defined properties.

Uploaded by

ahmedkasse13
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views3 pages

Figurer

The document defines a custom button class, RJButton, that inherits from the standard Button class in C#. It includes properties for border size, border radius, border color, background color, and text color, along with methods to handle painting and resizing the button with rounded corners. The button is designed to have a flat style and allows for customization of its appearance through the defined properties.

Uploaded by

ahmedkasse13
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.ComponentModel;

namespace CustomControls.RJControls
{
public class RJButton : Button
{
//Fields
private int borderSize = 0;
private int borderRadius = 0;
private Color borderColor = Color.PaleVioletRed;

//Properties
[Category("RJ Code Advance")]
public int BorderSize
{
get { return borderSize; }
set
{
borderSize = value;
this.Invalidate();
}
}

[Category("RJ Code Advance")]


public int BorderRadius
{
get { return borderRadius; }
set
{
borderRadius = value;
this.Invalidate();
}
}

[Category("RJ Code Advance")]


public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
this.Invalidate();
}
}

[Category("RJ Code Advance")]


public Color BackgroundColor
{
get { return this.BackColor; }
set { this.BackColor = value; }
}

[Category("RJ Code Advance")]


public Color TextColor
{
get { return this.ForeColor; }
set { this.ForeColor = value; }
}

//Constructor
public RJButton()
{
this.FlatStyle = FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
this.Size = new Size(150, 40);
this.BackColor = Color.MediumSlateBlue;
this.ForeColor = Color.White;
this.Resize += new EventHandler(Button_Resize);
}

//Methods
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
{
GraphicsPath path = new GraphicsPath();
float curveSize = radius * 2F;

path.StartFigure();
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270,
90);
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize,
curveSize, 0, 90);
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90,
90);
path.CloseFigure();
return path;
}

protected override void OnPaint(PaintEventArgs pevent)


{
base.OnPaint(pevent);

Rectangle rectSurface = this.ClientRectangle;


Rectangle rectBorder = Rectangle.Inflate(rectSurface, -borderSize, -
borderSize);
int smoothSize = 2;
if (borderSize > 0)
smoothSize = borderSize;

if (borderRadius > 2) //Rounded button


{
using (GraphicsPath pathSurface = GetFigurePath(rectSurface,
borderRadius))
using (GraphicsPath pathBorder = GetFigurePath(rectBorder,
borderRadius - borderSize))
using (Pen penSurface = new Pen(this.Parent.BackColor, smoothSize))
using (Pen penBorder = new Pen(borderColor, borderSize))
{
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//Button surface
this.Region = new Region(pathSurface);
//Draw surface border for HD result
pevent.Graphics.DrawPath(penSurface, pathSurface);

//Button border
if (borderSize >= 1)
//Draw control border
pevent.Graphics.DrawPath(penBorder, pathBorder);
}
}
else //Normal button
{
pevent.Graphics.SmoothingMode = SmoothingMode.None;
//Button surface
this.Region = new Region(rectSurface);
//Button border
if (borderSize >= 1)
{
using (Pen penBorder = new Pen(borderColor, borderSize))
{
penBorder.Alignment = PenAlignment.Inset;
pevent.Graphics.DrawRectangle(penBorder, 0, 0, this.Width -
1, this.Height - 1);
}
}
}
}
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
this.Parent.BackColorChanged += new
EventHandler(Container_BackColorChanged);
}

private void Container_BackColorChanged(object sender, EventArgs e)


{
this.Invalidate();
}
private void Button_Resize(object sender, EventArgs e)
{
if (borderRadius > this.Height)
borderRadius = this.Height;
}
}

You might also like