C# 遮罩层

本文介绍了在C# Winform应用中创建遮罩层遇到的问题及解决方案。当面板内添加子面板后,原有的遮罩层无法完全覆盖,通过调整Form属性和使用ShowDialog()方法实现了基本的遮罩效果。此外,还提出了为每个子面板添加单独遮罩的思路,以确保完全遮盖。

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

问题

记录制造遮罩层时遇到的问题,语言是C#。
初次制作遮罩层时用的是网上的代码,出处不知,代码也很好找,就不贴了,如图。
在这里插入图片描述
看上去很不错,都遮住了,但是这是在这个panel中没有其他panel的情况。拉入一个新的panel,把button3放入。
在这里插入图片描述
问题出现了,button3没被遮住。 有人说,可能是Z-index的问题,反正我用这个思路没解决问题。

解决问题

思路1(浅谈)

论坛有人说用form解决了,没详细说,我就尝试了一下,基本可行。
新建一个Form, 修改属性,
StartPosition ->CenterParent
Opacity ->50%
ShowInTaskbar -> false
FormBorderStyle -> None
Text -> 清空
修改一下背景颜色
在show的点击事件加入以下代码:

        Form form = new opa();
        form.Location = this.Location;
        form.Size = this.Size;
        form.ShowDialog();

效果图:
在这里插入图片描述
这结果看起来还行,修改一下遮罩Form的Location和Size或许就可以使用了。注意,form建议使用ShowDialog(),使用Show(),主窗口最小化时,遮罩层还在。form的解决思路到这里就没有继续研究了。

2021_4_20编辑:关于Form实现 推荐
https://blog.csdn.net/weixin_42535339/article/details/89637743

思路2

既能有弹出窗口,又能遮罩完全的方法是自己想的,略有些笨拙,但好歹能实现预期效果。
在这里插入图片描述
问题看起来是因为button3在panel1的panel2中,所以没法遮住,那就把panel2也加个遮罩吧。

代码

代码(在原代码上修改)
namespace都修改一致,当前namespace是OpaLayer
OpaqueCommand.cs:

List<MyOpaqueLayer> layerList = new List<MyOpaqueLayer>();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值