C#如何做一个半透明的panel,使得可以透出窗体的背景 c#图片 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 button.bringtofront ??没理解你的需求 谢谢回复,就是给整个窗口设置张图片作为背景,这张图片上有按钮这些,我在按钮这个地方画个picturebox,点击picturebox就相当于点击了这个按钮事件,这个好处就是不用我重绘界面了,用背景就可以了,有个问题就是,我点击这个按钮的时候,图片是没反应的,所以我想做个控件,设置其半透明,点击这个picturebox的时候使按钮看起来有反应,不知道我说明白了没有 可以重绘Panel,参考下这个代码using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Data;using System.Windows.Forms;using System.Drawing.Drawing2D;using System.Drawing.Imaging;namespace Monitor{ public partial class PanelEx : System.Windows.Forms.Panel { private string m_strInfo; public void ShowInfo(string strInfo) { m_strInfo = strInfo; this.Invalidate(); } private void PanelEx_MouseEnter(object sender, EventArgs e) { this.Visible = true; } public bool drag = false; public bool enab = false; private Color fillColor = Color.White; private int opacity = 50; private int alpha; public TransparentInfo() { SetStyle(ControlStyles.SupportsTransparentBackColor, true); SetStyle(ControlStyles.Opaque, true); this.BackColor = Color.Transparent; } public Color FillColor { get { return this.fillColor; } set { this.fillColor = value; if (this.Parent != null) Parent.Invalidate(this.Bounds, true); } } public int Opacity { get { if (opacity > 100) { opacity = 100; } else if (opacity < 1) { opacity = 1; } return this.opacity; } set { this.opacity = value; if (this.Parent != null) Parent.Invalidate(this.Bounds, true); } } //protected override CreateParams CreateParams //{ // get // { // CreateParams cp = base.CreateParams; // cp.ExStyle |= 0x20; // return cp; // } //}石头 16:55:08 protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1); Color frmColor = this.Parent.BackColor; Brush brushColor; Brush bckColor; alpha = (opacity * 255) / 100; if (drag) { Color dragFillColor; Color dragBckColor; if (BackColor != Color.Transparent) { int Rb = BackColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255; int Gb = BackColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255; int Bb = BackColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255; dragBckColor = Color.FromArgb(Rb, Gb, Bb); } else dragBckColor = frmColor; if (fillColor != Color.Transparent) { int Rf = fillColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255; int Gf = fillColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255; int Bf = fillColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255; dragFillColor = Color.FromArgb(Rf, Gf, Bf); } else dragFillColor = dragBckColor; alpha = 255; brushColor = new SolidBrush(Color.FromArgb(alpha, dragFillColor)); bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor)); } else { Color color = fillColor; brushColor = new SolidBrush(Color.FromArgb(alpha, color)); bckColor = new SolidBrush(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, new SolidBrush(this.ForeColor), 10, 10); } brushColor.Dispose(); bckColor.Dispose(); g.Dispose(); base.OnPaint(e); } protected override void OnBackColorChanged(EventArgs e) { if (this.Parent != null) Parent.Invalidate(this.Bounds, true); base.OnBackColorChanged(e); } protected override void OnParentBackColorChanged(EventArgs e) { this.Invalidate(); base.OnParentBackColorChanged(e); } }} 上面的public TransparentInfo()改成public PanelEx() panel1.BackColor = Color.FromArgb(80, 255, 0, 0);前面的80设置255为不透明。ARGB 后面3位是rgb值不谢 picturebox 需要放在容器控件里面才能实现半透明。 比如 picturebox 背景是 0,0,0把他放在 背景是 80,0,0,0 的panel里 就可以实现半透明。其它控件直接设置背景色即可 高手请进 如何屏蔽SaveFileDialog控件中的鼠标右键 求一正则表达式 关于保存文本文档到本地 介绍几本C#经典书籍 ListView控件的行间隔颜色? 在WINFORM程序中,怎么在退出程序时,关闭EXCEL进程。。急 XML读取问题 求Winform树状结构 招聘.net程序员、系统分析员、专职测试人员(北京工作) 不好意思,c[][]是什么意思?那c[,]又是什么意思呢? ae的The operation was attempted on an empty geometry. 字符串转Lambda表达式
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;namespace Monitor
{
public partial class PanelEx : System.Windows.Forms.Panel
{
private string m_strInfo;
public void ShowInfo(string strInfo)
{
m_strInfo = strInfo;
this.Invalidate();
} private void PanelEx_MouseEnter(object sender, EventArgs e)
{
this.Visible = true;
} public bool drag = false;
public bool enab = false;
private Color fillColor = Color.White;
private int opacity = 50;
private int alpha; public TransparentInfo()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
} public Color FillColor
{
get
{
return this.fillColor;
}
set
{
this.fillColor = value;
if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
}
} public int Opacity
{
get
{
if (opacity > 100) { opacity = 100; }
else if (opacity < 1) { opacity = 1; }
return this.opacity;
}
set
{
this.opacity = value;
if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
}
} //protected override CreateParams CreateParams
//{
// get
// {
// CreateParams cp = base.CreateParams;
// cp.ExStyle |= 0x20;
// return cp;
// }
//}
石头 16:55:08
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1); Color frmColor = this.Parent.BackColor;
Brush brushColor;
Brush bckColor; alpha = (opacity * 255) / 100; if (drag)
{
Color dragFillColor;
Color dragBckColor; if (BackColor != Color.Transparent)
{
int Rb = BackColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
int Gb = BackColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
int Bb = BackColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
dragBckColor = Color.FromArgb(Rb, Gb, Bb);
}
else dragBckColor = frmColor; if (fillColor != Color.Transparent)
{
int Rf = fillColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
int Gf = fillColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
int Bf = fillColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
dragFillColor = Color.FromArgb(Rf, Gf, Bf);
}
else dragFillColor = dragBckColor; alpha = 255;
brushColor = new SolidBrush(Color.FromArgb(alpha, dragFillColor));
bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor));
}
else
{
Color color = fillColor;
brushColor = new SolidBrush(Color.FromArgb(alpha, color));
bckColor = new SolidBrush(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, new SolidBrush(this.ForeColor), 10, 10);
} brushColor.Dispose();
bckColor.Dispose();
g.Dispose(); base.OnPaint(e);
} protected override void OnBackColorChanged(EventArgs e)
{
if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
base.OnBackColorChanged(e);
} protected override void OnParentBackColorChanged(EventArgs e)
{
this.Invalidate();
base.OnParentBackColorChanged(e);
}
}
}
public TransparentInfo()
改成
public PanelEx()
ARGB 后面3位是rgb值不谢
把他放在 背景是 80,0,0,0 的panel里 就可以实现半透明。其它控件直接设置背景色即可