C#如何做一个半透明的panel,使得可以透出窗体的背景

问题描述

如标题所示,如何做一个半透明的panel,使得可以透出窗体的背景。本人是想在别人做好的UI按钮上直接画个panel或者picturebox点击或者鼠标移动到那里的时候使panel,的背景色改变,如何实现?或者各位大侠,能告诉我在别人做好的整张图片上怎么实现点击按钮处,按钮有反应,这个按钮没有抠出来哦,是在窗口背景的整张图片中的。

解决方案

解决方案二:
button.bringtofront??没理解你的需求
解决方案三:
谢谢回复,就是给整个窗口设置张图片作为背景,这张图片上有按钮这些,我在按钮这个地方画个picturebox,点击picturebox就相当于点击了这个按钮事件,这个好处就是不用我重绘界面了,用背景就可以了,有个问题就是,我点击这个按钮的时候,图片是没反应的,所以我想做个控件,设置其半透明,点击这个picturebox的时候使按钮看起来有反应,不知道我说明白了没有
解决方案四:
控件的BackColor=Transparent
解决方案五:
可以重绘Panel,参考下这个代码usingSystem;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Drawing;usingSystem.Data;usingSystem.Windows.Forms;usingSystem.Drawing.Drawing2D;usingSystem.Drawing.Imaging;namespaceMonitor{publicpartialclassPanelEx:System.Windows.Forms.Panel{privatestringm_strInfo;publicvoidShowInfo(stringstrInfo){m_strInfo=strInfo;this.Invalidate();}privatevoidPanelEx_MouseEnter(objectsender,EventArgse){this.Visible=true;}publicbooldrag=false;publicboolenab=false;privateColorfillColor=Color.White;privateintopacity=50;privateintalpha;publicTransparentInfo(){SetStyle(ControlStyles.SupportsTransparentBackColor,true);SetStyle(ControlStyles.Opaque,true);this.BackColor=Color.Transparent;}publicColorFillColor{get{returnthis.fillColor;}set{this.fillColor=value;if(this.Parent!=null)Parent.Invalidate(this.Bounds,true);}}publicintOpacity{get{if(opacity>100){opacity=100;}elseif(opacity<1){opacity=1;}returnthis.opacity;}set{this.opacity=value;if(this.Parent!=null)Parent.Invalidate(this.Bounds,true);}}//protectedoverrideCreateParamsCreateParams//{//get//{//CreateParamscp=base.CreateParams;//cp.ExStyle|=0x20;//returncp;//}//}石头16:55:08protectedoverridevoidOnPaint(PaintEventArgse){Graphicsg=e.Graphics;Rectanglebounds=newRectangle(0,0,this.Width-1,this.Height-1);ColorfrmColor=this.Parent.BackColor;BrushbrushColor;BrushbckColor;alpha=(opacity*255)/100;if(drag){ColordragFillColor;ColordragBckColor;if(BackColor!=Color.Transparent){intRb=BackColor.R*alpha/255+frmColor.R*(255-alpha)/255;intGb=BackColor.G*alpha/255+frmColor.G*(255-alpha)/255;intBb=BackColor.B*alpha/255+frmColor.B*(255-alpha)/255;dragBckColor=Color.FromArgb(Rb,Gb,Bb);}elsedragBckColor=frmColor;if(fillColor!=Color.Transparent){intRf=fillColor.R*alpha/255+frmColor.R*(255-alpha)/255;intGf=fillColor.G*alpha/255+frmColor.G*(255-alpha)/255;intBf=fillColor.B*alpha/255+frmColor.B*(255-alpha)/255;dragFillColor=Color.FromArgb(Rf,Gf,Bf);}elsedragFillColor=dragBckColor;alpha=255;brushColor=newSolidBrush(Color.FromArgb(alpha,dragFillColor));bckColor=newSolidBrush(Color.FromArgb(alpha,dragBckColor));}else{Colorcolor=fillColor;brushColor=newSolidBrush(Color.FromArgb(alpha,color));bckColor=newSolidBrush(Color.FromArgb(alpha,this.BackColor));}if(this.BackColor!=Color.Transparent|drag){g.FillRectangle(bckColor,bounds);}if(m_strInfo!=null&&m_strInfo.Length>0){g.DrawString(m_strInfo,this.Font,newSolidBrush(this.ForeColor),10,10);}brushColor.Dispose();bckColor.Dispose();g.Dispose();base.OnPaint(e);}protectedoverridevoidOnBackColorChanged(EventArgse){if(this.Parent!=null)Parent.Invalidate(this.Bounds,true);base.OnBackColorChanged(e);}protectedoverridevoidOnParentBackColorChanged(EventArgse){this.Invalidate();base.OnParentBackColorChanged(e);}}}

解决方案六:
上面的publicTransparentInfo()改成publicPanelEx()
解决方案七:
panel1.BackColor=Color.FromArgb(80,255,0,0);

前面的80设置255为不透明。ARGB后面3位是rgb值不谢
解决方案八:
picturebox需要放在容器控件里面才能实现半透明。比如picturebox背景是0,0,0把他放在背景是80,0,0,0的panel里就可以实现半透明。其它控件直接设置背景色即可

时间: 2024-08-24 12:06:07

C#如何做一个半透明的panel,使得可以透出窗体的背景的相关文章

如何做一个类似QQ空间消息的弹出框 不依附于网页的那种

问题描述 各位大侠我想做一个消息提示弹出框就是在不管浏览器是否最小化的时候都能弹出的那种像QQ空间信息弹出的那种完全独立于网页上的那种 解决方案 解决方案二:顶...解决方案三:http://blog.csdn.net/zhaogaohong/archive/2011/01/06/6120592.aspx解决方案四:引用2楼zhaogaohong的回复: http://blog.csdn.net/zhaogaohong/archive/2011/01/06/6120592.aspx 有没有完整的

使用netbeans和SQLserver做一个银行管理系统

问题描述 使用netbeans和SQLserver做一个银行管理系统 需要有完整的代码以及窗体,分为登录,用户,账户,转账,存款,取款 面向对象是银行前台工作人员 解决方案 窗体只需要最简单的设计就可以,不需要背景图什么的 解决方案二: 把这里当外包了么?楼主想多了吧. 解决方案三: 哪里去弄?JavaEE教程这本书有完整例子

Swing生成一个半透明的窗口

要生成一个半透明的成形窗口,而又要避免使用本地的编码,唯有灵活地应用screenshot(屏幕快照). 半透明窗口是大众对Swing最为渴求的特性之一. 也可以称之为定形窗口,这种窗口有一部分是透明的,可以透过它看到桌面背景和其它的程序.如果不通过JNI(Java Native Interface 本地接口)Java是无法为我们生成一个半透明的窗口的(即使我们可以那样做,还得本地操作平台好支持半透明窗口才行).然而这些现状无法阻止我们对半透明窗口的渴求,通过一个我最喜欢的手段screenshot

在做一个游戏,想问java有没有类似图层功能

问题描述 在做一个游戏,想问java有没有类似图层功能 目前已知情报 1.好像有个叫JlayerdPane的 2.我的目标是顶层游戏主体用panel话,中层添加视频,底层添加图片 3.问题有两个: 一是用media只能放在frame上面?我想加在panel上,否则添加panel的时候就被覆盖掉了 二是把panel设置成背景透明的,通过 panel.setBackground(null); // 把背景设置为会 panel.setOpaque(false); // 设置为透明 不知道在一的条件下能

如何用swing做一个报表式的录入窗体

问题描述 如何用swing做一个报表式的录入窗体,而不是一个一个swing控件的堆积,要是一个整体,像在excel模板中录入数据一样 解决方案 解决方案二:jtable~但是如果你想把jtable做成比較炫的效果(和元件堆疊一樣的效果)可能有些困難解决方案三:沒明白元件堆疊有什么不好的地方嗎?你可以把那些元件放到一個panel中啊然后把這個panel做成一個類就好了-解决方案四:1.6可以帮你,因为1.6对JTable进行了改进,但是要想实现楼主的那个东西的话,的确有难度解决方案五:JTable

for语句-c#winform做一个动画()来监视for循环

问题描述 c#winform做一个动画()来监视for循环 类似看视频加载时的加载圈,当for执行的时候开始转动 当for语句结束时 停止转动 能不能做?求大神解惑?怎么做,求资料方法链接 解决方案 在for循环开始前加上 this.Cursor = Cursors.WaitCursor; 在For循环最后加上 this.Cursor = Cursors.Default; 如果是win7以上,会显示滚动的圈,xp以前是沙漏. 解决方案二: 如果不要鼠标效果,就自己做一个panel啥的显示,完了隐

更新-有一个关于gui的问题,楼主在做一个进销存的管理系统!大神求救

问题描述 有一个关于gui的问题,楼主在做一个进销存的管理系统!大神求救 具体情况是这样的,用的是cardlayout布局,在一个新增物品的panel里加了一个物品,怎么样才能让另一个显示所有物品的panel里动态的更新呢,这两个jpanel是在同一层的!

我想做一个管理控制台应用程序的程序,应该用什么写?

问题描述 我的服务器上平时开着10多个控制台应用程序,都是用来抽取数据接收数据的,因为太多了不好管理,经常有一个挂掉了自己也没发现.现在想做一个可以监视所有应用程序,并且能在这程序上运行这些应用程序,现在只是有这么一个思路,该怎么做大家说说啊,有什么想法建议都可以说. 解决方案 解决方案二:写个程序看进程?解决方案三:每个客户端开启后有个进程,或者你暴漏一个GUID,然后写个监听程序可以试试解决方案四:监视进程呗.每个程序的进程名你应该都知道的吧解决方案五:可以在webform里写吗解决方案六:

想做一个如图所示的界面,该用什么控件?

问题描述 想做一个这样的界面,该用哪些控件?1."操作按钮区域"的边框,用的什么控件?2.内里有两个虚线框用的什么控件? 解决方案 解决方案二:按钮背后的边框,你可以使用Panel填上背景色,Panel的大小比Button稍微大一点点即可.至于说虚线框,看看你的开发工具有没有GroupBox之类的.当然使用普通的Rectangle控件直接画也是可以(例如).解决方案三:DevExpress.解决方案四:你都没说用的什么框架啊,WPF的话太简单了,Border就能搞定,重写Button的