问题描述
如标题所示,如何做一个半透明的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里就可以实现半透明。其它控件直接设置背景色即可