各位牛人请帮帮忙,关于winform控件透明背景色的问题!

zhmvb 2008-07-03 04:49:05
在使用.net 控件背景透明色时发现一个问题,.net 控件背景透明色并非真正透明,而是将其父容器的背景填充了控件的背景,造成透明的假相。当有两个控件透明且有重叠部分时,透明效果就会出现破绽,透明的区域居然能挡下面的控件,不能达到叠加透明的效果。

在.net3.5下(不使用wpf)如何解决这个问题?
...全文
910 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
q329497980 2009-06-15
  • 打赏
  • 举报
回复
支持,
zhmvb 2008-07-11
  • 打赏
  • 举报
回复
谢谢viki117,我先试一下
viki117 2008-07-09
  • 打赏
  • 举报
回复
2个叠加后,的确会出现一些问题。。
在pictureBox的Paint事件中写下如下代码

private void pictureBox1_Paint(object sender, PaintEventArgs e)

{

foreach (Control C in this.Controls)

{

if (C is Label)

{

Label L = (Label)C;

L.Visible = false;

e.Graphics.DrawString(L.Text, L.Font, new

SolidBrush(L.ForeColor), L.Left - pictureBox1.Left, L.Top - pictureBox1.Top);

}

}

}

或者在载入页面的时候在LOAD中写入下面代码:

pictureBox1.SendToBack();

label1.BackColor = Color.Transparent;

label1.Parent = pictureBox1;

label1.BringToFront();

这里是2种方法。。
zhmvb 2008-07-08
  • 打赏
  • 举报
回复
有具体的代码吗?
jsjhj2008 2008-07-06
  • 打赏
  • 举报
回复
this.pictureBox1.Controls.Add(this.label1);//在窗体设计器生成的构造函数里
this.label1.BackColor = Color.Transparent;
自己做了个相对于图片上是透明的
Deathsign 2008-07-06
  • 打赏
  • 举报
回复
override OnPaint()
{
}
yatobiaf 2008-07-04
  • 打赏
  • 举报
回复
这只能自己写混合函数了,参见DirectX的实现。其实混合写也不是很难。比如三种颜色ABC,A为背景,B为中间透明色,opacity = 50%,C为最外层,opacity = 60%,就可以这么写。

C.A = C.A * 0.6 + (A.A*0.5+B.A*0.5)*0.4;
C.R = C.R * 0.6 + (A.R*0.5+B.R*0.5)*0.4;
C.G = C.G * 0.6 + (A.G*0.5+B.G*0.5)*0.4;
C.B = C.B * 0.6 + (A.B*0.5+B.B*0.5)*0.4;
烈火焚身 2008-07-04
  • 打赏
  • 举报
回复

mark ~
zhmvb 2008-07-04
  • 打赏
  • 举报
回复
各位高手请帮忙啊
grearo 2008-07-04
  • 打赏
  • 举报
回复
.net的TK其实就是颜色的过滤透明效果,有个不透明的,颜色不等于TK,那么肯定不会被过滤。
wdgphc 2008-07-04
  • 打赏
  • 举报
回复
刚试了一下,的确是.想想主意中... ...
wumingbing_8027 2008-07-04
  • 打赏
  • 举报
回复
mark ~
zhmvb 2008-07-03
  • 打赏
  • 举报
回复
有具体的代码吗?
楼外楼 2008-07-03
  • 打赏
  • 举报
回复
那就自己写Graphics,截取背景,然后填充
pinhailinfeng 2008-07-03
  • 打赏
  • 举报
回复
关注,顶起来。。。。。
dyshadow 2008-07-03
  • 打赏
  • 举报
回复
支持一下。帮顶。
我尝试了一下,的确如LZ所说,而且并不需要两个都透明,一个透明的遮住一个不透明的,就能够看出来问题了。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧