using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D ;
namespace WindowsFormsApplication6.button._03
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
protected override void OnPaint(PaintEventArgs pe)
{
GraphicsPath path = new GraphicsPath();
Rectangle rect = new Rectangle(0, 22, this.Width, this.Height-22);
path = GetRoundedRectPath(rect, 20);
Region reg = new Region(path);
this.button1.Region = reg;
base.OnPaint(pe);
}
private GraphicsPath GetRoundedRectPath(Rectangle rect, int radius)
{
int diameter = radius;
Rectangle arcRect = new Rectangle(rect.Location, new Size(diameter, diameter));
GraphicsPath path = new GraphicsPath();
// 左上角
path.AddArc(arcRect, 180, 90);
// 右上角
arcRect.X = rect.Right - diameter;
path.AddArc(arcRect, 270, 90);
// 右下角
arcRect.Y = rect.Bottom - 0;
path.AddArc(arcRect, 0, 90);
// 左下角
arcRect.X = rect.Left;
path.AddArc(arcRect, 90, 90);
path.CloseFigure();
return path;
}
private void SetWindowRegion(object sender, EventArgs e)
{
}
private void OnPaint(object sender, EventArgs e)
{
}
}
}
uj5u.com熱心網友回復:
很明顯設定 this.button1.Region 這個不對。uj5u.com熱心網友回復:
每次畫圓角的時候都用Rectangle arcRect么? 位置不改變么?uj5u.com熱心網友回復:
看錯了。這個怎么洗掉呀!!
是作業區域設定不對,你畫的時候 rect長寬-1試試?還有 設定作業區域為線條 這樣怎么點擊呀。你可以填充起來!
uj5u.com熱心網友回復:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Gid_1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Draw(Rectangle rectangle, Graphics g, int _radius, bool cusp, Color begin_color, Color end_color)
{
int span = 2;
//抗鋸齒
g.SmoothingMode = SmoothingMode.AntiAlias;
//漸變填充
LinearGradientBrush myLinearGradientBrush = new LinearGradientBrush(rectangle, begin_color, end_color, LinearGradientMode.Vertical);
//畫尖角
if (cusp)
{
span = 10;
PointF p1 = new PointF(rectangle.Width - 12, rectangle.Y + 10);
PointF p2 = new PointF(rectangle.Width - 12, rectangle.Y + 30);
PointF p3 = new PointF(rectangle.Width, rectangle.Y + 20);
PointF[] ptsArray = { p1, p2, p3 };
g.FillPolygon(myLinearGradientBrush, ptsArray);
}
//填充
g.FillPath(myLinearGradientBrush, DrawRoundRect(rectangle.X, rectangle.Y, rectangle.Width - span, rectangle.Height-1, _radius));
}
public static GraphicsPath DrawRoundRect(int x, int y, int width, int height, int radius)
{
//四邊圓角
GraphicsPath gp = new GraphicsPath();
gp.AddArc(x, y, radius, radius, 180, 90);
gp.AddArc(width - radius, y, radius, radius, 270, 90);
gp.AddArc(width - radius, height - radius, radius, radius, 0, 90);
gp.AddArc(x, height - radius, radius, radius, 90, 90);
gp.CloseAllFigures();
return gp;
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Draw(e.ClipRectangle, e.Graphics, 18,true, Color.FromArgb(90, 143, 0), Color.FromArgb(41, 67, 0));
base.OnPaint(e);
Graphics g = e.Graphics;
g.DrawString("其實我是個Panel", new Font("微軟雅黑", 9, FontStyle.Regular), new SolidBrush(Color.White), new PointF(10, 10));
}
private void panel2_Paint(object sender, PaintEventArgs e)
{
Draw(e.ClipRectangle, e.Graphics, 18, false, Color.FromArgb(113, 113, 113), Color.FromArgb(0, 0, 0));
base.OnPaint(e);
Graphics g = e.Graphics;
g.DrawString("其實我是個Panel", new Font("微軟雅黑", 9, FontStyle.Regular), new SolidBrush(Color.White), new PointF(10, 10));
}
private void button1_Paint(object sender, PaintEventArgs e)
{
Draw(e.ClipRectangle, e.Graphics, 18, false, Color.FromArgb(0, 122, 204), Color.FromArgb(8, 39, 57));
base.OnPaint(e);
Graphics g = e.Graphics;
g.DrawString("其實我是個按鈕", new Font("微軟雅黑", 9, FontStyle.Regular), new SolidBrush(Color.White), new PointF(10, 10));
}
private void label1_Paint(object sender, PaintEventArgs e)
{
Draw(e.ClipRectangle, e.Graphics, 18, false, Color.FromArgb(210, 210, 210), Color.FromArgb(242, 242, 242));
base.OnPaint(e);
Graphics g = e.Graphics;
g.DrawString("其實我是Label", new Font("微軟雅黑", 9, FontStyle.Regular), new SolidBrush(Color.Black), new PointF(10, 10));
}
}
}
圓角按鈕要設定

否則4個角還有顏色。
uj5u.com熱心網友回復:
這樣的button怎么設定點擊后背景顏色uj5u.com熱心網友回復:
改變時 四個角又有顏色了呀uj5u.com熱心網友回復:
自繪一個Button不是省事很多uj5u.com熱心網友回復:
搞個圖片完事,自己繪多麻煩
uj5u.com熱心網友回復:
確實,這樣一堆代碼,還容易出錯,要么你直接用WPF寫一個ControlTemplate,直接搞定,做WinForm的,GDI+需要掌握其中的技巧,這專案需要改變外觀的,太適合用WPF去做了WinForm畢竟,不適合做過多的外觀修改!!!WPF是做C/S的WinForm下的一個完整補充
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/131115.html
標籤:C#
上一篇:aspx web.config
