以下代码均是写在partial class Form1 : Form{}代码块之间,废话不多说直接上代码。

第一种方法是通过OnResize方法来实现

第一种方法

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, 10);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();
}

第二种方法是通过Point方法来实现

第二种方法

private SetFormCircle()
{int radian = 4; //圆弧角的比率,可以自己改变这个值看具体的效果int w = this.Width; //窗体宽int h = this.Height; //窗体高//对于矩形的窗体,要在一个角上画个弧度至少需要2个点,所以4个角需要至少8个点Point p1 = new Point(radian, 0);Point p2 = new Point(w - radian, 0);Point p3 = new Point(w, radian);Point p4 = new Point(w, h - radian);Point p5 = new Point(w - radian, h);Point p6 = new Point(radian, h);Point p7 = new Point(0, h - radian);Point p8 = new Point(0, radian);System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath();Point[] p = new Point[] { p1, p2, p3, p4, p5, p6, p7, p8 };shape.AddPolygon(p);//将窗体的显示区域设为GraphicsPath的实例this.Region = new System.Drawing.Region(shape);
}
private void Form1_Load(object sender, EventArgs e)
{SetFormCircle();
}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也可以根据自己的需要调整到最佳效果)

转载于:https://www.cnblogs.com/zxin/archive/2012/12/07/2806406.html

WinForm 窗体圆角、平角(不规则窗体)实现的几种方法相关推荐

  1. access窗体转换html,Access窗体之间控件的传值三种方式

    Access窗体间的数据是如何传递的?前面有发过子窗体的数据传递.今天讲解3种方法传递窗体里的数据: 如有窗体"传递窗体"和"接收窗体"两个窗体,通过" ...

  2. [转]Winform不规则窗体的实现心得

    本文转自:http://www.cnblogs.com/haiq/articles/1751777.html Winform窗体通常都是矩形的,而本人在需要将一幅图片作为窗体背景,并且窗体边框呈现为图 ...

  3. 一起谈.NET技术,C#创建不规则窗体的几种方式

    现在,C#创建不规则窗体不是一件难事,下面总结一下:       一.自定义窗体,一般为规则的图形,如圆.椭圆等. 做法:重写Form1_Paint事件(Form1是窗体的名字),最简单的一种情况如下 ...

  4. [转][小结][三种方法]实现WPF不规则窗体

    实现WPF不规则窗体的三种常用的方法如下: 1.使用Blend等工具绘制一个不规则xaml,然后作为窗体的背景.这个可以参考xiaowei0705的这篇博文:WPF制作不规则的窗体 . 2.给wind ...

  5. Qt中不规则窗体和部件的实现

    Qt中不规则窗体和部件的实现 描述:a.png 窗口背景图 图片: 描述:mask.png 窗口掩码图 图片: 描述:toolbutton.png 按钮背景图 图片: 描述:toolbutton_ma ...

  6. winform父窗体实现多个子窗体只能显示一个

    一.前言 当一个父窗体中包含多个动能的时候可能会存在很多子窗体,那么当每个都去打开的时候就会都显示在父窗体上,这样给用户的视觉肯定很不舒服.所以当出现这种情况的时候肯定也会有解决方法,以下就是一种解决 ...

  7. C# WinForm 在窗口菜单上显示已打开窗体的标题及其窗体的排列

    1. C# WinForm 在窗口菜单上显示已打开窗体的标题 设置窗体菜单的MdiList属性为 True 2.窗体的排列 Code // //  平铺 base.LayoutMdi(MdiLayou ...

  8. C# WinForm只允许运行一个窗体实例

    大概看了看别人的方法,都是从语法的角度巧妙实现的. 我要实现的目的是dialogForm.Show(); 点击按钮显示对话框窗体,如果窗体没有关闭,再次点击,不重复显示. 我用了个笨方法,就是用一个静 ...

  9. 事件过滤器及不规则窗体

    事件过滤器及不规则窗体 文章目录 事件过滤器及不规则窗体 一.事件过滤器 二.不规则窗体 一.事件过滤器 有时候, 对象需要查看. 甚至要拦截发送到另外对象的事件. 例如, 对话框可能 想要拦截按键事 ...

最新文章

  1. PaddleHub 口罩检测
  2. ZYNQ UARTLite接收不定长数据
  3. boost::hana::capture用法的测试程序
  4. Java开发笔记(三十三)字符包装类型
  5. c++ printf怎么用_【经典】把脉printf中的C进阶技巧
  6. MySQL 字段默认值该如何设置
  7. 大数据开发 | MapReduce介绍
  8. nginx配置注意事项1
  9. 关于git push报hook declined
  10. DPDK 无锁ring, 详解
  11. 整理了25个Python文本处理案例,收藏!
  12. 电子计算机技术人才需求,电子与信息技术专业人才需求调研报告.pdf
  13. git push 提交失败
  14. win10语言栏不见了_当我把电脑的系统语言改成了西班牙语,从此打开了新世界的大门!...
  15. 华为2017年实习招聘上机题
  16. GFCTF2021 部分WP
  17. 小灰整理了一套Java学习路线图,面试和实战都能用得上!
  18. 硅谷课堂第十一课-公众号消息和微信授权
  19. 现代人工智能走在仿生学的大道上
  20. 使用正则表达式实现注册表单验证(包括下拉列表二级联动、密码显示和隐藏)...

热门文章

  1. ***程序一般的启动方式
  2. pycharm如何修改背景成护眼色和字体大小
  3. STL标准库六大组件
  4. 安装带有调试信息的C库
  5. 《中国人工智能学会通讯》——11.72 结束语
  6. LeetCode Decode Ways
  7. 推荐一个在线json数据格式化网站
  8. windwos -- bat脚本
  9. 防火墙x86架构和ASIC架构和NP架构的区别
  10. 109. Convert Sorted List to Binary Search Tree