首页 新闻 赞助 找找看

C#自定义控件透明显示

0
悬赏园豆:20 [待解决问题]

写了个自定义控件用于显示矩形,同时显示多个控件时会相互重叠在一起,上面那个会挡住下面的控件,但相对于背景来说还是透明的。。。

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也没找到合适的答案,求高手解答,膜拜各位老师,童鞋感激不甚。。。

清风寻梦的主页 清风寻梦 | 初学一级 | 园豆:170
提问于:2012-08-02 15:33
< >
分享
所有回答(3)
0

public ControlRect() {
        SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.Opaque, true);

        InitializeComponent();

        //定时器用于控制图形闪烁显示

   timer1 = new System.Threading.Timer(new System.Threading.TimerCallback(myPaint), null, 0, 1000); 

}

小蔡易喋 | 园豆:202 (菜鸟二级) | 2013-01-10 10:00
0

将控件放在Form之中,使Form的TopLevel改为false,然后再添加,如此不但可以透明,还可以自定义形状

sumok | 园豆:202 (菜鸟二级) | 2014-08-28 15:05
0

你好,请问你这个功能实现了没?

双鹰 | 园豆:202 (菜鸟二级) | 2014-11-28 15:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册