C# 平滑衰落控制
我试图淡出一个标签,但它似乎没有像窗体本身那样的不透明度属性C# 平滑衰落控制,c#,winforms,animation,j#,C#,Winforms,Animation,J#,我试图淡出一个标签,但它似乎没有像窗体本身那样的不透明度属性 是否有其他方法使控件淡入淡出?您可以使用我的透明控件,该控件接受透明颜色并具有不透明度属性(0-100): 公共类TranspCtrl:Control { 公共布尔阻力=假; 公共bool enab=false; 私有int m_不透明度=100; 私有int-alpha; 公共交通 { 设置样式(ControlStyles.SupportsTransparentBackColor,true); SetStyle(ControlSty
是否有其他方法使控件淡入淡出?您可以使用我的透明控件,该控件接受透明颜色并具有不透明度属性(0-100):
公共类TranspCtrl:Control
{
公共布尔阻力=假;
公共bool enab=false;
私有int m_不透明度=100;
私有int-alpha;
公共交通
{
设置样式(ControlStyles.SupportsTransparentBackColor,true);
SetStyle(ControlStyles.不透明,true);
this.BackColor=Color.Transparent;
}
公共整数不透明度
{
收到
{
如果(m_不透明度>100)
{
m_不透明度=100;
}
否则如果(m_不透明度<1)
{
m_不透明度=1;
}
返回此.m_不透明度;
}
设置
{
此.m_不透明度=值;
如果(this.Parent!=null)
{
Parent.Invalidate(this.Bounds,true);
}
}
}
受保护的重写CreateParams CreateParams
{
收到
{
CreateParams cp=base.CreateParams;
cp.ExStyle=cp.ExStyle | 0x20;
返回cp;
}
}
受保护的覆盖无效OnPaint(PaintEventArgs e)
{
如果(!设计模式)
{
图形g=e.图形;
矩形边界=新矩形(0,0,this.Width-1,this.Height-1);
颜色frmColor=this.Parent.BackColor;
笔刷bckColor=默认值(笔刷);
α=(m_不透明度*255)/100;
如果(拖动)
{
颜色DragBackColor=默认值(颜色);
if(背景色!=颜色.透明)
{
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);
}
其他的
{
dragBckColor=frmColor;
}
α=255;
bckColor=新的SolidBrush(Color.FromArgb(alpha,DragBackColor));
}
其他的
{
bckColor=newsolidbrush(Color.FromArgb(alpha,this.BackColor));
}
if(this.BackColor!=Color.Transparent |拖动)
{
g、 FillRectangle(bckColor,边界);
}
bckColor.Dispose();
g、 处置();
}
基础漆(e);
}
BackColorChanged上的受保护覆盖无效(EventArgs e)
{
如果(this.Parent!=null)
{
Parent.Invalidate(this.Bounds,true);
}
基色变化(e);
}
受保护的覆盖无效OnParentBackColorChanged(EventArgs e)
{
这个。使无效();
基。基于ParentBackColorChanged(e);
}
}
它不是标签,但您可以更改onpaint代码以绘制文本。您可以使用接受透明颜色并具有不透明度属性(0-100)的“我的透明”控件:
公共类TranspCtrl:Control
{
公共布尔阻力=假;
公共bool enab=false;
私有int m_不透明度=100;
私有int-alpha;
公共交通
{
设置样式(ControlStyles.SupportsTransparentBackColor,true);
SetStyle(ControlStyles.不透明,true);
this.BackColor=Color.Transparent;
}
公共整数不透明度
{
收到
{
如果(m_不透明度>100)
{
m_不透明度=100;
}
否则如果(m_不透明度<1)
{
m_不透明度=1;
}
返回此.m_不透明度;
}
设置
{
此.m_不透明度=值;
如果(this.Parent!=null)
{
Parent.Invalidate(this.Bounds,true);
}
}
}
受保护的重写CreateParams CreateParams
{
收到
{
CreateParams cp=base.CreateParams;
cp.ExStyle=cp.ExStyle | 0x20;
返回cp;
}
}
受保护的覆盖无效OnPaint(PaintEventArgs e)
{
如果(!设计模式)
{
图形g=e.图形;
矩形边界=新矩形(0,0,this.Width-1,this.Height-1);
颜色frmColor=this.Parent.BackColor;
笔刷bckColor=默认值(笔刷);
α=(m_不透明度*255)/100;
如果(拖动)
{
颜色DragBackColor=默认值(颜色);
if(背景色!=颜色.透明)
{
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);
}
其他的
{
dragBckColor=frmColor;
}
public class TranspCtrl : Control
{
public bool drag = false;
public bool enab = false;
private int m_opacity = 100;
private int alpha;
public TranspCtrl()
{
SetStyle(ControlStyles.SupportsTransparentBackColor, true);
SetStyle(ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;
}
public int Opacity
{
get
{
if (m_opacity > 100)
{
m_opacity = 100;
}
else if (m_opacity < 1)
{
m_opacity = 1;
}
return this.m_opacity;
}
set
{
this.m_opacity = value;
if (this.Parent != null)
{
Parent.Invalidate(this.Bounds, true);
}
}
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = cp.ExStyle | 0x20;
return cp;
}
}
protected override void OnPaint(PaintEventArgs e)
{
if (!DesignMode)
{
Graphics g = e.Graphics;
Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1);
Color frmColor = this.Parent.BackColor;
Brush bckColor = default(Brush);
alpha = (m_opacity * 255) / 100;
if (drag)
{
Color dragBckColor = default(Color);
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;
}
alpha = 255;
bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor));
}
else
{
bckColor = new SolidBrush(Color.FromArgb(alpha, this.BackColor));
}
if (this.BackColor != Color.Transparent | drag)
{
g.FillRectangle(bckColor, bounds);
}
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);
}
}