Winform 简单实现关机背景变灰效果的对话框

来源:互联网 发布:网络名称大全 编辑:程序博客网 时间:2024/05/01 00:48

声明:这个方法是我自己想到的,没有借助任何其他文章,所以无论前人有没有相同或相似的实现方式,对我而言是原创。


进入正题:

最近在写框架,虽然控件写过不少,单对话框的风格没有做过。今天和同事聊天,说起关机背景变灰式的对话框感觉效果蛮不错的。回家后思考片刻有了下面的文章。


其实思路相当简单,在窗体和对话框之间再加一层透明的灰色层就ok了。这一层用什么来做,方法很多,panel、picturebox等都可以,我选择使用form来做,form自带Opacity属性,简单、方便。


实现步骤:

1、添加一个窗体,取名为MiddleLayer。将BackColor改为Gray;将FormBorderStyle设置为None;将Opacity设置为35%(根据自己喜好自己设置透明度);将ShowIcon和ShowInTaskbar设置为False,使该窗体不会在桌面窗体栏出现;将StartPosition设置为Manual。

然后在MiddleLayer.cs中添加如下代码:

private Form dlg = null;               public MiddleLayer(Form dlg)        {            InitializeComponent();            this.dlg = dlg;        }        private void MiddleLayer_Load(object sender, EventArgs e)        {            Thread t = new Thread(() =>            {                this.Invoke(new Action(                    () =>                     {                        this.DialogResult = dlg.ShowDialog(this);                     }));            });            t.IsBackground = true;            t.Start();        }

2、添加DialogHelper类,该类中有一个静态方法:

public static DialogResult ShowDialog(Form caller, Form dlg)        {            MiddleLayer layer = new MiddleLayer(dlg);            layer.Location = caller.PointToScreen(caller.ClientRectangle.Location);            layer.Size = new System.Drawing.Size(caller.ClientRectangle.Width, caller.ClientRectangle.Height);            //整个桌面变灰            //layer.WindowState = FormWindowState.Maximized;            return layer.ShowDialog();        }


3、使用DialogHelper的ShowDialog方法弹出对话框

private void button2_Click(object sender, EventArgs e)        {            DialogResult dr = DialogHelper.ShowDialog(this, new Dialog());            MessageBox.Show(dr.ToString());        }


搞定!很方便吧 嘿嘿

0 0
原创粉丝点击