milani_lucie
asked on
C# - How to Add Round Corner to Button ?
Hi,
I have the following code:
I have "button1" on the form. Now i want Round Corner for this. Can you please FIX the above program and make it working ?
Thanks
I have the following code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace WindowsFormsApplication1
{
public static class Class1
{
public static void DrawRoundedRectangle(this Graphics g, Color color, Rectangle rec, int radius, RoundedCorners corners)
{
using (var b = new SolidBrush(color))
{
int x = rec.X;
int y = rec.Y;
int diameter = radius * 2;
var horiz = new Rectangle(x, y + radius, rec.Width, rec.Height - diameter);
var vert = new Rectangle(x + radius, y, rec.Width - diameter, rec.Height);
g.FillRectangle(b, horiz);
g.FillRectangle(b, vert);
if ((corners & RoundedCorners.TopLeft) == RoundedCorners.TopLeft)
g.FillEllipse(b, x, y, diameter, diameter);
else
g.FillRectangle(b, x, y, diameter, diameter);
if ((corners & RoundedCorners.TopRight) == RoundedCorners.TopRight)
g.FillEllipse(b, x + rec.Width - (diameter + 1), y, diameter, diameter);
else
g.FillRectangle(b, x + rec.Width - (diameter + 1), y, diameter, diameter);
if ((corners & RoundedCorners.BottomLeft) == RoundedCorners.BottomLeft)
g.FillEllipse(b, x, y + rec.Height - (diameter + 1), diameter, diameter);
else
g.FillRectangle(b, x, y + rec.Height - (diameter + 1), diameter, diameter);
if ((corners & RoundedCorners.BottomRight) == RoundedCorners.BottomRight)
g.FillEllipse(b, x + rec.Width - (diameter + 1), y + rec.Height - (diameter + 1), diameter, diameter);
else
g.FillRectangle(b, x + rec.Width - (diameter + 1), y + rec.Height - (diameter + 1), diameter, diameter);
}
}
public enum RoundedCorners
{
None = 0x00,
TopLeft = 0x02,
TopRight = 0x04,
BottomLeft = 0x08,
BottomRight = 0x10,
All = 0x1F
}
public static void DrawRoundedBorder(this Graphics g, Color color, Rectangle rec, int radius, int borderWidth, RoundedCorners corners)
{
using (Bitmap b = new Bitmap(rec.Width, rec.Height))
{
using (Graphics gb = Graphics.FromImage(b))
{
var gfRec = new Rectangle(0, 0, rec.Width, rec.Height);
gb.Clear(Color.Green);
gb.DrawRoundedRectangle(color, gfRec, radius, corners);
gfRec.Height -= borderWidth << 1;
gfRec.Width -= borderWidth << 1;
gfRec.X += borderWidth;
gfRec.Y += borderWidth;
gb.DrawRoundedRectangle(Color.Green, gfRec, radius - borderWidth, corners);
var maskAttr = new ImageAttributes();
maskAttr.SetColorKey(Color.Green, Color.Green);
g.DrawImage(b, rec, 0, 0, b.Width, b.Height, GraphicsUnit.Pixel, maskAttr);
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
button1.DrawRoundedRectangle(Color.Blue, button1, 10, RoundedCorners.All);
}
}
}
I have "button1" on the form. Now i want Round Corner for this. Can you please FIX the above program and make it working ?
Thanks
Is using WPF instead of WinForms an option? Round corners is a piece of cake in WPF.
ASKER
I am using Windows Forms using C# - Thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
No exactly what i want ....
public static void DrawRoundedRectangle(this Graphics g, Color color, Rectangle rec, int radius,
RoundedCorners corners)
{
using (var b = new SolidBrush(color))
{
int x = rec.X;
int y = rec.Y;
int diameter = radius * 2;
var horiz = new Rectangle(x, y + radius, rec.Width, rec.Height - diameter);
var vert = new Rectangle(x + radius, y, rec.Width - diameter, rec.Height);
g.FillRectangle(b, horiz);
g.FillRectangle(b, vert);
if ((corners & RoundedCorners.TopLeft) == RoundedCorners.TopLeft)
g.FillEllipse(b, x, y, diameter, diameter);
else
g.FillRectangle(b, x, y, diameter, diameter);
if ((corners & RoundedCorners.TopRight) == RoundedCorners.TopRight)
g.FillEllipse(b, x + rec.Width - (diameter + 1), y, diameter, diameter);
else
g.FillRectangle(b, x + rec.Width - (diameter + 1), y, diameter, diameter);
if ((corners & RoundedCorners.BottomLeft) == RoundedCorners.BottomLeft)
g.FillEllipse(b, x, y + rec.Height - (diameter + 1), diameter, diameter);
else
g.FillRectangle(b, x, y + rec.Height - (diameter + 1), diameter, diameter);
if ((corners & RoundedCorners.BottomRight) == RoundedCorners.BottomRight)
g.FillEllipse(b, x + rec.Width - (diameter + 1), y + rec.Height - (diameter + 1), diameter, diameter);
else
g.FillRectangle(b, x + rec.Width - (diameter + 1), y + rec.Height - (diameter + 1), diameter,
diameter);
}
}
public enum RoundedCorners
{
None = 0x00,
TopLeft = 0x02,
TopRight = 0x04,
BottomLeft = 0x08,
BottomRight = 0x10,
All = 0x1F
}
That way you can specify which corners you want rounded.And if you want to have a border around it, use this method:
public static void DrawRoundedBorder(this Graphics g, Color color, Rectangle rec,
int radius, int borderWidth, RoundedCorners corners)
{
using (Bitmap b = new Bitmap(rec.Width, rec.Height))
using (Graphics gb = Graphics.FromImage(b))
{
var gfRec = new Rectangle(0, 0, rec.Width, rec.Height);
gb.Clear(Color.Green);
gb.DrawRoundedRectangle(color, gfRec, radius, corners);
gfRec.Height -= borderWidth << 1;
gfRec.Width -= borderWidth << 1;
gfRec.X += borderWidth;
gfRec.Y += borderWidth;
gb.DrawRoundedRectangle(Color.Green, gfRec, radius - borderWidth, corners);
var maskAttr = new ImageAttributes();
maskAttr.SetColorKey(Color.Green, Color.Green);
g.DrawImage(b, rec, 0, 0, b.Width, b.Height, GraphicsUnit.Pixel, maskAttr);
}
}