[C#] (原创)一步一步教你自定义控件——06,MaskLayer(遮罩层)
一、前言
技术没有先进与落后,只有合适与不合适。
本篇的自定义控件是:遮罩层(MaskLayer)。
遮罩层对软件的美观与易用性上的提高是很大的,在日常使用过程中也会经常看到各种遮罩层,虽然WinForm本身没有原生的遮罩层控件,但实现起来并不麻烦。
遮罩层的实现方式一般有两种:一种是基于自定义控件,一种是基于Form窗体。两种方式并无优劣之分。
本篇采用的方式是自定义控件,同之前一样,继承Control去实现遮罩层。
相信看完的你,一定会有所收获。
本文地址:https://www.cnblogs.com/lesliexin/p/14436312.html
二、前期分析
(一)实现目标及特点
1,支持透明度
透明度是遮罩层的灵魂所在。
2,支持添加控件
支持添加控件可以实现更多的功能效果,除最常用的进度显示外,还可以当作特殊的弹出窗口使用。
示例如下:
(1)添加GIF图

(2)添加进度条

(3)添加自定义控件

(4)随意添加控件

3,支持点击关闭
遮罩层在日常使用中,往往是“挥之取去”,很轻便。所以需要支持点击关闭。

三、开始实现
(一)前期准备。
此处仅作提纲,具体操作见前篇。
新建类:LMaskLayer.cs
添加继承:Control(需要添加引用:System.Windows.Forms.dll)
修改可访问性为:public
(二)添加属性
1,透明度
用来控制遮罩层的透明度。

2,显示状态
用于获取遮罩层是否处于显示状态。

3,是否单击关闭
是否支持单击关闭

(三)重写方法
1,OnPaint
用于绘制带透明度的背景。

2,OnClick
用于实现单击关闭。

(四)添加方法
1,显示遮罩层

2,隐藏遮罩层

(五)其他
1,构造函数
用于设置一些控件的样式和行为。

2,特性标签
使遮罩层支持像Panel等容器控件那样在设计器中添加其它控件。

示例如下:
(注:因为未对进行是否处于设计器状态进行判断,所以在设计器中添加控件时会发生重绘,进而导致背景越来越黑,但并不影响运行时效果。)

四、效果演示
遮罩层的使用方式有两种,一种是使用设计器,直接在设计器上添加想要的控件,再进行调用。一种是在代码中手动实现。
设计器方式优点:直观、简单;缺点:占用空间,影响布局效果。
代码方式优点:灵活,无累赘;缺点:效果不够直观,需要一定经验。
本次演示,使用设计器方式。
1,总体设计预览

2,相关说明
(1)上图右侧5个为5个遮罩层。
(2)在上节中“构造函数”中,我们设置了遮罩层默认的Visible=false,即:不可见。所以在运行时,这5个控件是看不见的。
3,演示

五、结束语
本文只是起一个抛砖引玉的作用,读者不要被我的思路所限制,你可以尽情的去实现你想要的效果。
技术并没有先进和落后,只有合适与不合适。
所以,对自己掌握的知识多抱有一些信心,尽情释放自己的想像力,并在实践中提升自己。
六、源代码及工程下载
https://files.cnblogs.com/files/lesliexin/07,MaskLayer.7z
[C#] (原创)一步一步教你自定义控件——06,MaskLayer(遮罩层)的更多相关文章
- [C#] (原创)一步一步教你自定义控件——01,TrackBar
一.前言 技术没有先进落后之分,只有合不合适. WinForm有着非常多的优点,在使用WinForm久了之后,难免会觉得WinForm自带的某些控件外观上有些许朴素.或者功能上有些不如意,自然而然便想 ...
- [C#] (原创)一步一步教你自定义控件——04,ProgressBar(进度条)
一.前言 技术没有先进与落后,只有合适与不合适. 本篇的自定义控件是:进度条(ProgressBar). 进度条的实现方式多种多样,主流的方式有:使用多张图片去实现.使用1个或2个Panel放到Use ...
- Ace教你一步一步做Android新闻客户端(一)
复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...
- 一步一步教你如何在linux下配置apache+tomcat(转)
一步一步教你如何在linux下配置apache+tomcat 一.安装前准备. 1. 所有组件都安装到/usr/local/e789目录下 2. 解压缩命令:tar —vxzf 文件名(. ...
- 一步一步教你将普通的wifi路由器变为智能广告路由器
一步一步教你将普通的wifi路由器变为智能广告路由器 相信大家对WiFi智能广告路由器已经不再陌生了,现在很多公共WiFi上网,都需要登录并且验证,这也就是WiFi广告路由器的最重要的功能.大致就是下 ...
- 一步一步教你使用Git
一步一步教你使用Git 互联网给我们带来方便的同时,也时常让我们感到困惑.随便搜搜就出一大堆结果,然而总是有大量的重复和错误.小妖发出的内容,都是自己实测过的,有问题请留言. 现在,你已经安装了Git ...
- 微凉大大,教你一步一步在linux中正确的安装Xcache加速php。
首先,强烈吐槽,百度上的教程,都左复制右复制的,乱七八糟,缺东缺西的.借此微凉大大我提供我苦心整理好的教程.以便各位小菜能顺利的使用Xcache加速php,假设看完了,也操作了,还是失败了的话,请联系 ...
- 使用WPF教你一步一步实现连连看
使用WPF教你一步一步实现连连看(一) 第一步: 问题,怎样动态的建立一个10*10的grid(布局) for (int i = 0; i < 10; i++){ RowDefinition r ...
- (原创)超详细一步一步在eclipse中配置Struts2环境,无基础也能看懂
(原创)超详细一步一步在eclipse中配置Struts2环境,无基础也能看懂 1. 在官网https://struts.apache.org下载Struts2,建议下载2.3系列版本.从图中可以看出 ...
随机推荐
- Hive 使用总结
1 带分区列的表更改列类型 常见的一个场景是Hive里面一个带分区的表,原来是int类型的字段,后来发现数据超过了int的最大值,要改成bigint.或者是bigint要改string或decimal ...
- chm打开看不到内容时好时坏
右击chm文件,属性====>解除锁定 再打开 ok
- 利用PWM脉宽调制实现呼吸灯
1.设计目标 完成一个呼吸灯,从亮到灭的时间为2秒,从灭到亮的时间为2秒,以此不断往复. 2.设计步骤 2.1设计分析 利用PWM(脉冲宽度调制)实现led灯亮度的变化,只需要改变占空比就可以实现,具 ...
- git从安装到多账户操作一套搞定(二)多账户使用
作者:良知犹存 转载授权以及围观:欢迎添加微信:Allen-Iverson-me-LYN 总述 GIT是当今热门代码管理技术,但是如此火的系统,竟然是大神林纳斯花了两周用C写出来的一个分布式版 ...
- 洛谷P4719 【模板】"动态 DP"&动态树分治
[模板]"动态 DP"&动态树分治 第一道动态\(DP\)的题,只会用树剖来做,全局平衡二叉树什么的就以后再学吧 所谓动态\(DP\),就是在原本的\(DP\)求解的问题上 ...
- Educational Codeforces Round 91 (Rated for Div. 2) B. Universal Solution
题目链接:https://codeforces.com/contest/1380/problem/B 题意 你在和一个机器人玩石头剪刀布,给出一个长为 $n$ 的出拳序列,机器人会从某一处开始出拳 $ ...
- CodeForces - 220B 离散化+莫队算法
莫队算法链接:传送门 题意: 有n个数,m个区间.问区间内有多少个x,x满足x的个数等于x的值的个数(如果x是3,区间内要存在3个3). 题解: 因为a[i]太大,所以要离散化一下,但是不能用map容 ...
- python代理池的构建1——代理IP类的构建,以及配置文件、日志文件、requests请求头
一.整体结构 二.代理IP类的构建(domain.py文件) ''' 实现_ init_ 方法, 负责初始化,包含如下字段: ip: 代理的IP地址 port:代理IP的端口号 protocol: 代 ...
- python中schedule模块的简单使用 || importlib.import_module动态导入模块
1 import schedule 2 import time 3 4 def start(): #定义一个函数 5 print("****") 6 7 8 if __name__ ...
- 四、Jmeter 集合点(实际场景应用)
一.jmeter集合点的作用域及作用范围 先明确一些概念:1)定时器是在每个sampler(采样器)之前执行的,而不是之后: 是的,你没有看错,不管这个定时器的位置放在sampler之后,还是之下,它 ...