自定义用户控件背景透明的方法

先说几种背景透明的方法:

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;
            }
        }

,然后运行,哈哈,果断得到效果:,至此,在控件透明方面又多学会了一种方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值