110,499
社区成员
发帖
与我相关
我的任务
分享
panel1.BackColor = Color.FromArgb(80, 255, 0, 0);
前面的80设置255为不透明。
ARGB 后面3位是rgb值
不谢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);
}
}
}