提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
实现下图中panel控件半透明效果之前在别的项目用无边框窗体的Opacity属性实现过这种效果;现在想就一个窗体中实现,网上搜到用户控件的方法尝试了下,透明可以实现但是里面的button按钮无法实现透明;网上案例大部分提到利用颜色达到透明效果这种只是颜色透明;也搜到使用 Transparent 在碰到窗体有 PictureBox 控件时无法通明显示 PictureBox 的画面;搜到这里我想到 PictureBox 主要是放图片,而 Panel 也可以放图片,并且 Panel 控件是用来分组,它可以和内部的控件形成父子层关系。
基本思路:
用两个Panel控件组成父子关系即一个包含在另一个里面,两个BorderColor 属性都设置成 Transparent 达到子 Panel 控件在父 Panel 控件中全透明,这时候给父 Panel 控件设置一个背景图片,再给子 Panel 控件弄一个半通明图片的背景图。
下图是实现效果:
提示:这种方式就是用窗体控件自带的属性弄的,没什么代码,下面是我中途碰到的问题的解决代码
Panel 设置 Transparent 属性之后会出现闪烁情况
解决方法:创建一个NewPanel类,把下面代码黏贴到类中
代码如下(示例):
//窗体设计代码中将this.panel1 = new System.Windows.Forms.Panel(); 替换成 NewPanel(); 方式panel控件闪烁
public class NewPanel : Panel
{
public NewPanel()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.UserPaint, true);
}
}
按注释代码,找到窗体设计代码将Panel修改成NewPaenl
窗体加载防闪烁代码优化
我之前用的窗体加载防闪烁代码,必须在每个窗体中复制防闪烁的代码
代码如下(示例):
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
按照上面类的写进行了一下优化
代码如下(示例):
public class NewForm : Form
{
public NewForm()
{
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000;
return cp;
}
}
}
优化后项目中那个窗体要加防闪烁功能采用继承即可实现
总结
以上就是今天要讲的内容,本文仅仅简单介绍了BorderColor中Transparent 的使用,中途网上搜索的时候被颜色透明,自定义控件,用户控件等很多五花八门的答案给迷惑了。有时候还是要静下心捋一捋,解决问题的思路很重要。
用户控件和组件类实现控件半透明