c # 窗体圆角

本文介绍了一种使用C#实现圆角窗体的方法。通过GraphicsPath和Region对象,可以轻松地为Windows窗体添加圆角效果。文章提供了具体代码示例,并说明了如何根据需要调整圆角的大小。

引用:http://www.cnblogs.com/UouHt/archive/2009/02/23/1396544.html

public   void  SetWindowRegion()
{
    System.Drawing.Drawing2D.GraphicsPath FormPath;
    FormPath  =   new  System.Drawing.Drawing2D.GraphicsPath();
    Rectangle rect  =   new  Rectangle( 0 ,  22 ,  this .Width,  this .Height  -   22 ); // this.Left-10,this.Top-10,this.Width-10,this.Height-10);                 
    FormPath  =  GetRoundedRectPath(rect,  30 );
     this .Region  =   new  Region(FormPath);
}
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  -  diameter;
    path.AddArc(arcRect,  0 ,  90 );
     //    左下角   
    arcRect.X  =  rect.Left;
    path.AddArc(arcRect,  90 ,  90 );
    path.CloseFigure();
     return  path;
}
protected   override   void  OnResize(System.EventArgs e)
{
     this .Region  =   null ;
    SetWindowRegion();
}
复制代码


教你一招:构造圆角窗体  
http://topic.youkuaiyun.com/t/20041128/19/3596094.html  

增加命名空间:using System.Drawing.Drawing2D;  
添加方法如下:当然各角的点可根据需要确定. 

复制   保存
复制代码
private   void  Type(Control sender,  int  p_1,  double  p_2)
{
    GraphicsPath oPath  =   new  GraphicsPath();
    oPath.AddClosedCurve(
         new  Point[] {
             new  Point( 0 , sender.Height  /  p_1),
             new  Point(sender.Width  /  p_1,  0 ), 
             new  Point(sender.Width  -  sender.Width  /  p_1,  0 ), 
             new  Point(sender.Width, sender.Height  /  p_1),
             new  Point(sender.Width, sender.Height  -  sender.Height  /  p_1), 
             new  Point(sender.Width  -  sender.Width  /  p_1, sender.Height), 
             new  Point(sender.Width  /  p_1, sender.Height),
             new  Point( 0 , sender.Height  -  sender.Height  /  p_1) },

        ( float ) p_2);

    sender.Region  =   new  Region(oPath);
}
复制代码

在窗体的paint和resize事件中增加:Type(this,20,0.1);  
参数20和0.1也可以根据自己的需要调整到最佳效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值