写了个自定义控件用于显示矩形,同时显示多个控件时会相互重叠在一起,上面那个会挡住下面的控件,但相对于背景来说还是透明的。。。
public class ControlRect : UserControl
{
private System.Threading.Timer timer1;
public ControlRect()
{
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.Selectable, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.BackColor = Color.Transparent;
//定时器用于控制图形闪烁显示
timer1 = new System.Threading.Timer(new System.Threading.TimerCallback(myPaint), null, 0, 1000);
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing)
timer1.Dispose();
}
bool IsFlashing = false;
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
if (IsFlashing)
{
IsFlashing = false;
}
else
{
Draw(g);//画矩形的方法
IsFlashing = true;
}
}
}
上面的代码实现的闪烁显示的效果正常,一秒显示,一秒不显示,如此循环,但就是多个控件之间会相互挡住,加了以下代码后,多个控件实现的相互透明,但闪烁显示没用,矩形一直在控件上显示,并没有重绘。。。
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020;
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// leave this empty
}
我试过在 OnPaint 方法里用 g.Clear(Color.Transparent); 填充背景也没有用。
带颜色的填充g.Clear(Color.Red); 这样子也有问题,会有背景色。我想要实现的效果是画的矩形可以闪烁,多个控件之间相互透明。
类型这样的情况!
一直在google也没找到合适的答案,求高手解答,膜拜各位老师,童鞋感激不甚。。。
public ControlRect() {
SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.Opaque, true);
InitializeComponent();
//定时器用于控制图形闪烁显示
timer1 = new System.Threading.Timer(new System.Threading.TimerCallback(myPaint), null, 0, 1000);
}
将控件放在Form之中,使Form的TopLevel改为false,然后再添加,如此不但可以透明,还可以自定义形状
你好,请问你这个功能实现了没?