.Net2.0 半透明控件实现?需求请进来见详细描述!

惜玉 2009-12-11 11:11:42
我的想法是: 自己建立一个UserControl,这个控件背景半透明,并且控件上的其它控件最好也能半透明,然后这个UserControl被放到窗体上用的时候,要求透过这个UserControl可以看到窗体上任何东西,包括背景和窗体上被这个UserControl所盖住的所有控件!我目前实现的最大程度就是透明窗体的背景,但是窗体上被盖住的控件看不到。 虽然我实现过可以看到所有东西,但是有很多小BUG,不太理想, 想寻求一种全新的方法, 希望高手能赐教!谢谢!
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
windxx 2009-12-11
  • 打赏
  • 举报
回复
所有控件指定成一种颜色还有什么应用价值。。。.net 2.0是不能透视控件的(自带功能),只能透视背景,可尝试其他公司提供的控件,另外如果重绘也很难解决,因为很多.net 2.0的控件不支持onPaint或者重绘效果不理想,要是透明,暂时只能自己定义控件,用dx做,可以加入dx的精灵或者干脆就自己写一个类,基本就是一个图片或者什么的,实现你的功能,然后定义半透明,dx透明还是比较容易的,不过你后边的控件也要是使用dx做的,否则也不行,所以非常麻烦,这个问题很多人遇到,说明真的应用很多的,为什么ms不做好了呢,太郁闷了。
cstester 2009-12-11
  • 打赏
  • 举报
回复
把所有控件的颜色 都指向同一个颜色 比如是 Control

假设窗体上有button1,panel1,事例代码:
把所有控件都设置成SystemColors.Control 背景颜色。

public UserControl1()
{
InitializeComponent();
//设置背景颜色的透明度 。值:0-255。
this.BackColor = Color.FromArgb(112, SystemColors.Control);
button1.BackColor =Color.FromArgb(80,SystemColors.Control);
panel1.BackColor =Color.FromArgb(90,SystemColors.Control);
}




惜玉 2009-12-11
  • 打赏
  • 举报
回复
网上很多方式都只是透了窗体的背景, 但是窗体上的控件还是看不到, 会被挡. 没有一种方法能让自己的控件透掉窗体上所有的东西?
guanmingle 2009-12-11
  • 打赏
  • 举报
回复
试试DotNetBar2
wartim 2009-12-11
  • 打赏
  • 举报
回复
换成form,边框none,透明度0.5
dylike 2009-12-11
  • 打赏
  • 举报
回复
如果不是做特效,还是省点内存吧.
惜玉 2009-12-11
  • 打赏
  • 举报
回复
拼死拼活搞出来的这个效果, 因为一些小问题, 不能用上, 遗憾.
惜玉 2009-12-11
  • 打赏
  • 举报
回复
全透代码其实很简单,我把代码发出来:
1.新建一个UserControl后, 设置控件风格

//设置控件的风格
this.SetStyle(
ControlStyles.Opaque |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.SupportsTransparentBackColor |
ControlStyles.OptimizedDoubleBuffer
, true);


2.重载OnPaint事件:

using (SolidBrush brush = new SolidBrush(Color.FromArgb(128, this.BackColor)))
{
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}



3.最后重载构建参数属性:
        
/// <summary>
/// 重载窗体风格参数构建
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= (int)Global.WS_EX_TRANSPARENT; //这个值为:0x00000020
return cp;
}
}


4. 生成, 并把控件放到窗体上,不出意外的应该是透到了窗体上所有被这个控件盖住的东西.
wangkuang5 2009-12-11
  • 打赏
  • 举报
回复
可以给份代码不?学习了,谢谢!
wangkuang5@163.com
惜玉 2009-12-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 windxx 的回复:]
所有控件指定成一种颜色还有什么应用价值。。。.net 2.0是不能透视控件的(自带功能),只能透视背景,可尝试其他公司提供的控件,另外如果重绘也很难解决,因为很多.net 2.0的控件不支持onPaint或者重绘效果不理想,要是透明,暂时只能自己定义控件,用dx做,可以加入dx的精灵或者干脆就自己写一个类,基本就是一个图片或者什么的,实现你的功能,然后定义半透明,dx透明还是比较容易的,不过你后边?-
[/Quote]

这位兄台说的太对了, 虽然我不知道怎么用DX做, 但是你说的.Net不好做, 我非常同意, 我用.Net全透是实现了的, 但是怎么样都会有点小BUG,不完美. 期待真正的高手出现.

110,567

社区成员

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

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

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