Winform应用程序实现通用遮罩层二

本文介绍了如何在Winform应用程序中实现一个通用的透明遮罩层,包括设置透明Panel控件、覆盖父容器、随容器大小变化调整以及在遮罩上显示加载动图。此外,还讨论了使用BackgroundWorker进行异步操作,并提供了一个窗体基类FormBase,简化了异步加载的编码过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实现思路(解决问题顺序):

透明遮罩:

1.实现可设置透明的Panel控件(MaskPanel);

2.Panel控件(MaskPanel)能够覆盖父容器(一般是当前窗体form对象)客户区区域(即:与父容器客户区区域大小相同),并处于最上层,保证父容器上的任何控件都被盖住并保证不可用;

3.Panel控件(MaskPanel)必需实现随着父容器大小的改变而改变;

4.Panel控件(MaskPanel)上可呈现以表示正在加载的动图或者文字,并且居中;

异步:

实现的方法有很多,比如异步委托、Task等,而这是在winform项目中,此次就直接使用BackgroundWorker

二、关键解决方案:

1.可设置透明控件:通过自定义控件,并重写CreateParams(其中: cp.ExStyle |= 0x00000020;)、OnPaint(其中:labelBorderPen、labelBackColorBrush的Color=Color.FromArgb(_alpha, this.BackColor))两个方法即可;

2.能够覆盖父容器客户区区域:this.Size = this.Parent.ClientSize;this.Left = 0;this.Top = 0;

3.随着父容器大小的改变而改变:this.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;

4.呈现以表示正在加载的动图或者文字,并且居中:

添加PictureBox,设置Image为loading.gif动图,SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; Point Location = new Point(this.Location.X + (this.Width - pictureBox_Loading.Width) / 2, this.Location.Y + (this.Height - pictureBox_Loading.Height) / 2);//居中

好了,最后贴出实现的源代码:

MaskPanel:

public partial class MaskPanel : Control
{
    private System.ComponentModel.Container components = new System.ComponentModel.Container();
 
    private bool _isTransparent = true;//是否透明
    [Category("透明"), Description("是否使
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值