WinForm 窗体圆角、平角(不规则窗体)实现的几种方法
以下代码均是写在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 窗体圆角、平角(不规则窗体)实现的几种方法相关推荐
- access窗体转换html,Access窗体之间控件的传值三种方式
Access窗体间的数据是如何传递的?前面有发过子窗体的数据传递.今天讲解3种方法传递窗体里的数据: 如有窗体"传递窗体"和"接收窗体"两个窗体,通过" ...
- [转]Winform不规则窗体的实现心得
本文转自:http://www.cnblogs.com/haiq/articles/1751777.html Winform窗体通常都是矩形的,而本人在需要将一幅图片作为窗体背景,并且窗体边框呈现为图 ...
- 一起谈.NET技术,C#创建不规则窗体的几种方式
现在,C#创建不规则窗体不是一件难事,下面总结一下: 一.自定义窗体,一般为规则的图形,如圆.椭圆等. 做法:重写Form1_Paint事件(Form1是窗体的名字),最简单的一种情况如下 ...
- [转][小结][三种方法]实现WPF不规则窗体
实现WPF不规则窗体的三种常用的方法如下: 1.使用Blend等工具绘制一个不规则xaml,然后作为窗体的背景.这个可以参考xiaowei0705的这篇博文:WPF制作不规则的窗体 . 2.给wind ...
- Qt中不规则窗体和部件的实现
Qt中不规则窗体和部件的实现 描述:a.png 窗口背景图 图片: 描述:mask.png 窗口掩码图 图片: 描述:toolbutton.png 按钮背景图 图片: 描述:toolbutton_ma ...
- winform父窗体实现多个子窗体只能显示一个
一.前言 当一个父窗体中包含多个动能的时候可能会存在很多子窗体,那么当每个都去打开的时候就会都显示在父窗体上,这样给用户的视觉肯定很不舒服.所以当出现这种情况的时候肯定也会有解决方法,以下就是一种解决 ...
- C# WinForm 在窗口菜单上显示已打开窗体的标题及其窗体的排列
1. C# WinForm 在窗口菜单上显示已打开窗体的标题 设置窗体菜单的MdiList属性为 True 2.窗体的排列 Code // // 平铺 base.LayoutMdi(MdiLayou ...
- C# WinForm只允许运行一个窗体实例
大概看了看别人的方法,都是从语法的角度巧妙实现的. 我要实现的目的是dialogForm.Show(); 点击按钮显示对话框窗体,如果窗体没有关闭,再次点击,不重复显示. 我用了个笨方法,就是用一个静 ...
- 事件过滤器及不规则窗体
事件过滤器及不规则窗体 文章目录 事件过滤器及不规则窗体 一.事件过滤器 二.不规则窗体 一.事件过滤器 有时候, 对象需要查看. 甚至要拦截发送到另外对象的事件. 例如, 对话框可能 想要拦截按键事 ...
最新文章
- PaddleHub 口罩检测
- ZYNQ UARTLite接收不定长数据
- boost::hana::capture用法的测试程序
- Java开发笔记(三十三)字符包装类型
- c++ printf怎么用_【经典】把脉printf中的C进阶技巧
- MySQL 字段默认值该如何设置
- 大数据开发 | MapReduce介绍
- nginx配置注意事项1
- 关于git push报hook declined
- DPDK 无锁ring, 详解
- 整理了25个Python文本处理案例,收藏!
- 电子计算机技术人才需求,电子与信息技术专业人才需求调研报告.pdf
- git push 提交失败
- win10语言栏不见了_当我把电脑的系统语言改成了西班牙语,从此打开了新世界的大门!...
- 华为2017年实习招聘上机题
- GFCTF2021 部分WP
- 小灰整理了一套Java学习路线图,面试和实战都能用得上!
- 硅谷课堂第十一课-公众号消息和微信授权
- 现代人工智能走在仿生学的大道上
- 使用正则表达式实现注册表单验证(包括下拉列表二级联动、密码显示和隐藏)...