运行效果如下:
自定义控件核心代码:
/// <summary>
/// 遮罩层
/// </summary>
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(IDesigner))]
public class MaskLayer : Control
{
/// <summary>
/// 遮罩层
/// </summary>
public MaskLayer()
{
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.Opaque, true);
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
CreateControl();
Visible = false;
this.Dock = DockStyle.Fill;
this.Controls.Add(progressBar);
}
/// <summary>
/// 进度条
/// </summary>
public ProgressBar progressBar = new ProgressBar();
/// <summary>
/// 设置进度条显示值
/// </summary>
/// <param name="value"></param>
public void SetProgressBarValue(int value)
{
this.BeginInvoke(new Action(() =>
{
if (value <= progressBar.Maximum)
{
progressBar.Value = value;
}
}));
}
private int _Alpha = 125;
/// <summary>
/// 透明度<para>范围:0~255(完全透明~完全不透明)</para><para>默认:125(半透明)</para>
/// </summary>
[Category("DemoUI"), Description("透明度\r\n范围:0~255(完全透明~完全不透明)\r\n默认:125(半透明)")]
public int Alpha
{
get { return _Alpha; }
set
{
if (value < 0) value = 0;
if (value > 255) value = 255;
_Alpha = value;
Invalidate();
}
}
/// <summary>
/// 是否处于显示状态
/// </summary>
[Category("LESLIE_UI"), Description("是否处于显示状态"), Browsable(false)]
public bool IsShow { get; private set; } = true;
/// <summary>
/// OnPaint
/// </summary>
/// <param name="e"></param>
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
SolidBrush BackColorBrush = new SolidBrush(Color.FromArgb(_Alpha, BackColor));
e.Graphics.FillRectangle(BackColorBrush, e.ClipRectangle);
BackColorBrush.Dispose();
}
/// <summary>
/// 是否启用点击隐藏功能<para>默认:是</para>
/// </summary>
[Category("DemoUI"), Description("是否启用点击隐藏功能\r\n默认:否")]
public bool EnabledClickHide { get; set; } = false;
/// <summary>
/// 点击事件
/// </summary>
/// <param name="e"></param>
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
if (EnabledClickHide)
{
HideMask();
}
}
/// <summary>
/// 显示遮罩层
/// </summary>
public void ShowMask()
{
try
{
this.BeginInvoke(new Action(() =>
{
IsShow = true;
SendKeys.Send("{Tab}");
BringToFront();
this.Visible = true;
this.BackColor = Color.Black;
Show();
int x = (int)(this.Width * 0.1);
int y = this.Height / 2;
this.progressBar.Location = new System.Drawing.Point(x, y);
this.progressBar.Name = "progressBar";
int w = (int)(this.Width * 0.8);
this.progressBar.Size = new System.Drawing.Size(w, 23);
this.progressBar.TabIndex = 2;
}));
}
catch (Exception)
{
}
}
/// <summary>
/// 隐藏遮罩层
/// </summary>
public void HideMask()
{
try
{
this.BeginInvoke(new Action(() =>
{
IsShow = false;
SendToBack();
Visible = false;
Hide();
}));
}
catch (Exception)
{
}
}
}
调用控件:
public partial class Form1 : Form
{
MaskLayer lMaskLayer1 = new MaskLayer();
public Form1()
{
InitializeComponent();
this.Controls.Add(lMaskLayer1);
}
private void button1_Click(object sender, EventArgs e)
{
Thread t3 = new Thread(pShow);
t3.IsBackground = true;
t3.Start();
}
void pShow()
{
lMaskLayer1.ShowMask();
for (int i = 0; i < 100; i++)
{
lMaskLayer1.SetProgressBarValue(i);
Thread.Sleep(200);
}
lMaskLayer1.HideMask();
}
}
链接:https://pan.baidu.com/s/1gc6ofo1xT-AgNkL6BY_vuA?pwd=5shv
提取码:5shv
本文来自:罗分明博客 原文:http://www.luofenming.com/show.aspx?id=ART2022052200001
标签:遮罩,进度条,int,void,progressBar,new,true,public,WinForm From: https://www.cnblogs.com/east115/p/17305015.html