透明标签控件无法正常刷新

时间:2012-01-25 18:24:23

标签: c# winforms transparency

我创建了一个透明的标签控件,透明度非常好。但是,我发现当我更新控件的文本字段时,原始文本在绘制新文本之前不会清除。因此,如果我多次更改控件的文本字段,很快就会变得不可读。

任何线索?谢谢!

public partial class TransLabel : Label
{
    public TransLabel()
    {
        InitializeComponent();

        this.SetStyle(ControlStyles.Opaque, true);
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
        this.Font = new Font("Franklin Gothic Book", 12f, FontStyle.Regular);
        this.ForeColor = Color.White;
        this.BackColor = Color.Transparent;
    }

    public override string Text
    {
        get
        {
            return base.Text;
        }
        set
        {
            base.Text = value;
            this.Invalidate(); // seems to have no effect
            this.Refresh(); // seems to have no effect
        }
    }

    protected override void OnPaintBackground(PaintEventArgs pevent)
    {
        //do nothing
    }

    protected override void OnMove(EventArgs e)
    {
        RecreateHandle();
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle = 0x00000020; //WS_EX_TRANSPARENT
            return cp;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

尝试将Text属性更改为:

public override string Text {
  get {
    return base.Text;
  }
  set {
    base.Text = value;
    if (this.Parent != null)
      this.Parent.Invalidate(this.Bounds, false);        
  }
}

由于WinForms没有真正的透明支持,我认为你必须使父容器无效。

此外,在继承控件时,通常没有InitializeComponent()方法。