Winform 遮罩懒人处理法
  dlXIUGPeV4Rb 2023年11月02日 44 0

前言

之前有个项目需要执行一个略微耗时的操作大概五六七八九十秒这样子,这个时候程序不能做其他操作,只能等待操作完成。为了提升一丝使用体验同时让Winform程序看上去高级一点🎃🎃🎃,就想到加一个遮罩层(MaskLayer)。虽然Winform没有原生的遮罩层,但是实现起来也不是很麻烦。

遮罩层在Winform的实现方式一般分为两种:

  • 自定义控件,继承Contorl重写来实现遮罩层
  • 新建一个假窗体来达到同样的效果

懒人懒人,当然要用最少代码干最多的活喽🥂🥂🥂,我们来通过新窗体来实现。

功能介绍以及代码实现

原理很简单,就是新建一个有一定透明度的空白窗体,边框样式设置为无边框,启动位置设置为手动设置(这样我们就可以顺便指定他出现的位置了),最后再给它整个遮罩背景色就万事大吉了🧨🧨🧨

新建一个窗体MaskForm

public partial class MaskForm : Form
{
  public MaskForm(Point point, Size size)
  {
    InitializeComponent();
    Opacity = 0.8;
    BackColor = Color.LightSlateGray;
    FormBorderStyle = FormBorderStyle.None;
    StartPosition = FormStartPosition.Manual;
    //位置和大小跟随主界面
    Location = point;
    Size = size;
  }
  private void MaskForm_FormClosed(object sender, FormClosedEventArgs e)
  {
    Dispose();
  }
}

这样就能实现遮罩层效果了,调用也很简单,在想添加遮罩效果的Form里面创建一个MaskForm对象,直接Show就可以了。举个简单的例子,比如我想在Form1里加个遮罩效果,我加个button点击之后就显示遮罩,然后五秒之后关闭遮罩:

private void button1_Click(object sender, EventArgs e)
{
  MaskForm mask = new MaskForm(this.Location, this.Size);
  mask.Show();
  DateTime now = DateTime.Now;
  while (now.AddSeconds(5) > DateTime.Now) { }
  mask.Close();
}

MaskForm

遮罩实际比窗体大点可不是我的锅啊🤡,我在我的自定义窗体上没这问题,严丝合缝的!!!

进阶玩法

上面是最简单的遮罩效果使用,我们还可以来个进阶版 - 随意控制MaskForm的显示位置、大小。显然我们可以通过实例化MaskForm窗体的时候控制它,比如我们想要个全屏的:

MaskForm mask = new MaskForm(new Point(0,0), new Size(1920,1080));

image-20230513094851517

🎉🎉🎉

完结撒花,就这样吧,有帮助到你的话记得点个赞哈,比心💗💗💗

有疑问的话可以评论留言哈。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  NPQODODLqddb   2024年05月17日   69   0   0 .NET
  mVIyUuLhKsxa   2024年05月17日   52   0   0 .NET
  XkHDHG7Y62UM   2024年05月17日   45   0   0 .NET
  f18CFixvrKz8   2024年05月18日   86   0   0 .NET
  rBgzkhl6abbw   2024年05月18日   78   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   41   0   0 .NET
  S34pIcuyyIVd   2024年05月17日   60   0   0 .NET
  gKJ2xtp6I8Y7   2024年05月17日   50   0   0 .NET
  MYrYhn3ObP4r   2024年05月17日   39   0   0 .NET
dlXIUGPeV4Rb