在Web项目中往往有非常多漂亮的弹窗控件,例如Layer。而Winform中比较常见的是用MessageBox来显示弹框,但这样的弹窗却缺少遮罩效果,今天为大家带来的就是弹框的遮罩效果Demo。
效果如下:
完成这个功能需要三个Form窗体:
MainForm主界面后台代码如下:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MessageForm form = new MessageForm();
form.HideMaskAction += () => {
//点击按钮关闭遮罩层
this.HideMask();
};
this.ShowMask();
if(form.ShowDialog() == DialogResult.OK)
{
//正常关闭
this.HideMask();
form.Dispose();
}
}
private MaskForm _maskform;
/// <summary>
/// 显示遮罩层
/// </summary>
private void ShowMask()
{
_maskform = new MaskForm(this.Location,this.Size);
_maskform.Show();
}
/// <summary>
/// 关闭遮罩层
/// </summary>
private void HideMask()
{
if(_maskform != null)
{
_maskform.Close();
}
}
}
MaskForm遮罩层代码如下:
public partial class MaskForm : Form
{
public MaskForm(Point point, Size size)
{
InitializeComponent();
this.Opacity = 0.5;
this.BackColor = Color.LightGray;
this.FormBorderStyle = FormBorderStyle.None;
this.StartPosition = FormStartPosition.Manual;
//位置和大小跟随主界面
this.Location = point;
this.Size = size;
}
private void MaskForm_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
}
}
MessageForm弹窗代码如下:
public partial class MessageForm : Form
{
public Action HideMaskAction { get; set; }
public MessageForm()
{
InitializeComponent();
}
private void MessageForm_FormClosed(object sender, FormClosedEventArgs e)
{
this.DialogResult = DialogResult.OK;
}
private void button1_Click(object sender, EventArgs e)
{
this.HideMaskAction();
}
}