先说几种背景透明的方法:
1、Color.Transparent,这个普遍大家都知道,但是,这个对于如果在用户控件上进行控件的组合,但是却需要背景透明的时候,却是办不到的,可能会出现几种情况:完全变成窗体背景色,却覆盖掉窗体上的其他控件;当设置parent属性时,的确使其透明了,但是全部透明 了,就如同窗体把Opacity属性设置成0一样,使上面的控件也透明,所以用这个来实现,pass
2、有人可能会想到,用TransparencyKey来实现,但是,自定义控件和自定义用户控件都不是窗体,所以没有这个属性(这里说句后话,其实TransparentKey属性实现窗体透明和Opacity属性实现窗体透明的原理都是调用API 函数SetLayeredWindowAttributes,只是其中的参数不同而已,所以在此提供一种可能可行的办法,即在自定义控件和用户控件中导入该API,使用相应的参数,也许可以实现如题效果,我没有试过,只想过)
现在说说我的解决办法:
细心的人可能可以发现,在自定义控件的时候,你会发现有一个SetStyle函数,来设置控件的样式,里面就可以使用一个参数:ControlStyles.Opaque,当我发现的时候,看到这个属性貌似也可以实现透明,当时我就觉得,嘿,这个没见过,也许有戏,然后就按照这个方法的参数进行填写:SetStyle(ControlStyles.Opaque,true),然后生成,调用的时候,发现,在把控件拉进设计器的时候,嘿,竟然可以做到要的效果:,不错,于是就果断运行,看看能不能真的成功,之后发现,仅仅这样,还不行,可能需要某一些别的东西,后来仔细得找了msdn中关于SetStyle使控件透明的信息,发现还是不行,最后没办法了,度娘么,找了千辛万苦,终于找到一片类似的帖子,说用图片使控件透明的,里面就有一部分SetStyle的用法,最重要的是,我发现还需要重写CreateParams属性:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = 0x00000020;
return cp;
}
}
,然后运行,哈哈,果断得到效果:,至此,在控件透明方面又多学会了一种方法