【问题标题】:Transparent label vanishing on resize调整大小时透明标签消失
【发布时间】:2012-02-21 13:24:15
【问题描述】:

又是一个调整大小的问题,像许多其他人一样,我使用 CreateParams 方法设置透明标签,一切看起来和工作都很好......除了调整表单大小时,文本消失了!

有人有什么想法吗?控件在那里,但文本没有显示,好像我最小化表单然后恢复它显示!

public class TransparentLabel : Label
{
    public TransparentLabel()
    {
        this.SetStyle(ControlStyles.Opaque, true);
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams parms = base.CreateParams;
            parms.ExStyle |= 0x20;  // Turn on WS_EX_TRANSPARENT
            return parms;
        }
    }
    protected override void OnPaintBackground(PaintEventArgs e)
    {
        if (base.BackgroundImage == null)
        {
            e.Graphics.DrawRectangle(new System.Drawing.Pen(this.BackColor, 1), e.ClipRectangle);
        }
        else
        {
            base.OnPaintBackground(e);
        } 

    }
}

【问题讨论】:

  • 这可能和你的other question有关。您的表单很可能会泄漏资源。就其本身而言,上面的示例代码不会重现该问题。
  • @LarsTech 谢谢你,我刚才发现了,但我看不到它在哪里泄漏资源。抱歉,GDI 对象一直保持在 85,但是我从某个地方泄漏了内存
  • 我发现内存泄漏是已解决的报告查看器。仍然不知道为什么标签消失了:(
  • 调整大小后可能是myLabel.Invalidate() 有帮助吗?

标签: c# winforms label transparency transparent


【解决方案1】:

当我测试您的代码时,似乎该控件正被应按 Z 顺序位于其下方的任何控件所覆盖。您可能需要通过响应正确的绘制消息来重新绘制文本。我找到了一个透明标签here 的示例,它似乎可以做到这一点。

【讨论】:

    【解决方案2】:

    对此的快速解决方案是使用链接标签控件,将其背景设置为透明并将链接长度设置为 0。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多