当前位置:  开发笔记 > 编程语言 > 正文

为什么WinForms标签不希望透明的原因?

如何解决《为什么WinForms标签不希望透明的原因?》经验,为你挑选了3个好方法。

为什么我不能将Label的BackColor设置为Transparent?我以前做过,但现在它只是不想......

我创建了一个新的UserControl,添加了一个进度条和一个标签.当我将标签的BackColor设置为透明时,它仍然是灰色的= /为什么会这样?

我想要的是将标签放在进度条的顶部,以便其文本"在"进度条中"...



1> Hans Passant..:

在项目中添加一个新类并发布下面显示的代码.建立.将新控件从工具箱顶部拖放到表单上.

using System;
using System.Windows.Forms;

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;
    }
  }
}



2> Rune Grimsta..:

WinForms并不真正支持透明控件,但您可以自己制作透明控件.在这里看到我的答案.

在您的情况下,您可能应该继承进度条并覆盖OnPaint方法以在进度条上绘制文本.


不确定为什么在本页的另一个答案中给出完整的解决方案时,接受了一个引用其他SO答案的答案,即"在Google上查找"而不是提供方法的重要细节.

3> truthseeker..:

最简单的解决方案如下:

    在可视化编辑器或表单的构造函数中将背景颜色设置为透明度:

    this.label1.BackColor = System.Drawing.Color.Transparent;

    设置标签的Parent属性以控制您希望在文本后面可见.这可以在表单构造函数或Load方法中完成:

    this.label1.Parent = progressBar1;

确实,这不是DirectX中的真正透明度.您在显示屏上看到的结果仅由两层组成.您不能使用此方法总结两个以上的图层(每个图层都有自己的透明度由alpha参数定义).但它适用于Winforms编程中可能遇到的许多实际情况.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有