C#控件背景透明的几种解决方案
已经很少做winform程序了,最新参与了一个小项目,遇到了控件背景透明的功能要求,特在此总结一下,供有需要的同行参考。
0、背景透明的概念和分类
背景透明是啥意思呢,就是背景透明。哈哈,废话了。其实你想过没有,要求不一样,实现的难道和技术手段也不一样。
最基本的就是不显示控件自己的背景,那,那显示谁的背景?
背景透明后,透过去显示谁,也就是说后面的谁不透明,这是问题的关键,换句话说,透明控件的parent是一个还是多个。
1、简单的背景透明,parent是一个的情况
a、自然透明,如图label1
实现:把控件背景色设置成窗口背景色
b、需要把picture设为parent才能透明的label2
实现:this.label2.Parent = this.pictureBox1;
c、本身就是label,只不过设置了Image属性,相当于加了背景图,自然也背景透明
this.label3.Image = Image.FromFile("xfb.jpg");
d、普通的label是不能跨控件透明的

小结:对于背景是单一控件来说,背景透明都好实现,但是对背景是多对象来说说,要实现背景透明就比较难。
2、背景是多个控件背景的透明
说实话,很少有这种要求,更多的,是下面第三中情况。
3、透明文字,半透明背景,最后后的背景任意

这个效果类似于千千静听的桌面歌词,文字背景是全透明的,可以设置一个带颜色和透明度的背景。
其实实现很简单,原理就是用了两个窗口,文字是一个透明窗口,带颜色和透明度的背景是一个打底窗口,应用的时候把这两个窗口的不要的属性都去掉,如边框,状态栏图标等,最后就是设置好两个窗口的大小和位置以及层级关系就Ok了。
文字窗口背景透明this.TransparencyKey = this.BackColor; 显示文字 直接在 paint事件中drawstring
带颜色和透明度背景窗口:直接用 backcolor 和 Opacity
C#控件背景透明的几种解决方案的更多相关文章
- MFC解决Static控件背景透明时文本覆盖重影
通过映射OnCtlColor消息,而后在该函数中使用pDC->SetBkMode(TRANSPARENT)使Static控件背景透明时会出现:文本覆盖重影的问题,当改变控件的文本就会发生新文本与 ...
- MFC 添加背景图片并让控件背景透明
/*添加背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CDialog::OnEraseBkg ...
- MFC 加入背景图片并让控件背景透明
/*加入背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 在此加入消息处理程序代码和/或调用默认值 CDialog::OnEraseB ...
- winform控件背景透明问题(label..等)
在使用winform写界面的时候,要想label这种控件实现对背景色透明,并且也懒得每次拖动一次控件都要在后台写一遍label1.Parent=PictureBox1 那么下面方法就介绍了比较简单便捷 ...
- VC++ CStatic控件背景透明且改变其文本时,文字重叠解决方法
最近在项目中将CStatic控件设置为背景透明且在一个定时器函数改变其文本,结果CStatic的文字重叠了.解决该问题的方案是:从CStatic类派生自己的静态文本控件. 其实设置背景透明,也就是在C ...
- delphi中的Label控件背景透明
Label1.Transparent:=true;你在它的属性窗口把它的Transparent属性改成TRUE就行了 来自为知笔记(Wiz)
- delphi 控件背景透明代码
procedure DrawParentBackground(Control: TControl; DC: HDC; R: PRect = nil; bDrawErasebkgnd: Boolean ...
- VC窗体透明而控件不透明以及Static文本背景透明方法
出自http://my.oschina.net/ypimgt/blog/60951 优点: 1.Dialog 窗体完全透明. 2. 窗体上的控件不透明. DC 绘制的图形不透明. ...
- 修改static控件背景颜色和文字颜色
当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息.如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄, ...
随机推荐
- Arcgis 10.1中空间连接功能
空间链接的作用:将面上的所有点的值加起来取平均值.赋值给面属性.(我们可以定义右击——定义合并规则 连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 ( ...
- html input type="button" 页面跳转
<div class="message_text"> <p>你的申请已提交,请耐心等候哦!~</p><br /> <input ...
- EXTJS 4.2 资料 控件之radiogroup 的用法
最近在EXTJS4.2开发项目,radiogroup的用法,主要是和grid之间的编辑功能:看了好多资料都不对,特此在这里备注记录 代码如下, 1.这是一段Win窗体上的两个单选按钮,设置单选按钮都是 ...
- ajax,json和$.each()
json返回的时候,只需要展示部分字段,如果是 ajax从后台获取结果处理,可以使用.select() 等处理结合匿名类,生成需要的字段的匿名类json字符串,返回前端,可以使用$.parseJson ...
- js 获取 input file 文件 附给 image src
var a=document.querySelector('input[type=file]'); a.onchange = function (e) { //var reader = new Fil ...
- iOS 10 的适配问题-b
随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出. 1.系统判断方法失效: 在你的项目中,当需要判断系统版本的话,不要使 ...
- WCF入门教程一[什么是WCF]--转载只为学习收藏
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
- java当中的定时器的4种使用方式
import java.util.Calendar;import java.util.Date;import java.util.Timer;import java.util.TimerTask; p ...
- PD 脚本中列名注释用Name属性
操作步骤:Database=>Generate Datatabase=>Format选项卡=>勾选 Generate name in empty comment项
- httpmime-session 会话保持
sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,做 ...