WinForm实现半透明遮罩层

553 阅读3分钟

在Winform窗体中实现半透明遮罩层比在网页中通过div+css实现半透明效果更复杂更难,网上方法有很多,但是我用的解决方法是弹出一个新窗口并且调整它的透明度,然后遮罩住原来的窗口,使用户不能对原来的窗口进行操作,即鼠标不能穿透,但是在窗体上调Opacity属性的值后在此窗体上的所有控件和内容也会产生透明效果,无法单独控制,所有我是再新建一个窗体来放置要显示的内容的。

效果如下图:

image.png

  1. 第一步:新建一个和要遮盖的窗体的宽高相同的form窗体。

image.png

  • 设置需要透明的背景色BackColor,我这里是黑色Black;
  • 设置窗体系统菜单框ControlBox为False;
  • 设置窗体的边框FormBorderStyle为FixedSingle;
  • 设置窗体透明度Opacity为50%(透明值可根据自己需求调);
  • 设置ShowInTaskbar为False,使窗体不在Windows任务栏显示;
  • 设置窗体第一次出现时的位置StarPosition为CenterScreen,并且把要遮罩的原来的窗体这个属性也设置同样的值。

      2.第二步:新建一个放置显示内容的form窗体。

image.png

  • 设置ShowInTaskbar为False,使窗体不在Windows任务栏显示;
  • 设置窗体第一次出现时的位置StarPosition为CenterScreen。

      3.第三步:因为遮罩层窗体和内容显示窗体需要同时打开和同时关闭的,所以我是先通过一个button来点击打开遮罩层窗体,然后再在遮罩层窗体load加载时打开显示内容的窗体(Load事件);在关闭时我是在显示内容的窗体上点击关闭按钮,再在显示内容窗体关闭了的时候关闭遮罩层窗体(FormClosed事件);而且窗体如果可以手动移动的话还要给遮罩层窗体一个相对于原来窗体的定位。

  • 原来窗体点击button显示遮罩层的代码:
//点击生成按钮打开遮罩层

        private void btnGenerate_Click(object sender, EventArgs e)

        {

            Popup2 popup2 = new Popup2();

            //show(this)相对定位于原来的窗体Form1来打开,与遮罩层里的定位代码相关

            popup2.Show(this);

        }
  • 遮罩层窗体里的代码:
PopupContent popcontent = null;

        private void Popup2_Load(object sender, EventArgs e)

        {

            //遮罩层相对Form1定位

            Form1 f = Owner as Form1;

            Location = new Point(f.Location.X, f.Location.Y);

            //生成成功弹窗

            popcontent = new PopupContent();

            popcontent.TopMosttrue;//设置内容窗体显示在最顶层窗体

            popcontent.Show();

        }
  • 弹窗内容窗体里的代码:
//关闭内容弹窗

        private void btnSearch2_Click(object sender, EventArgs e)

        {

            this.Close();

        }

        //生成内容弹窗关闭事件

        private void PopupContent_FormClosed(object sender, FormClosedEventArgs e)

        {

            //这里不直接用Form.Close()是因为关闭时窗体会出现闪烁直接隐藏

            Application.OpenForms["Popup2"].Close();

        }

步骤到此全部结束,代码仅供参考,要用时还需按自己的命名和编写。下面是窗体透明的拓展:

设置窗体的 TransparencyKey属性 (TransparencyKey是根据颜色来透明的,而且是100%透明):

比如:

this.BackColor =Color.Black;

this.TransparencyKey = Color.Black;

这样TransparencyKey会把背景色为黑色的窗体变为100%透明,就像是把窗体给隐藏了,但是窗体上的控件和内容并不会跟着有透明效果。

原文链接:来源网络 www.likecs.com/show-204077…