Svi*_*ish 29 c# transparency winforms
为什么我不能将Label的BackColor设置为Transparent?我以前做过,但现在它只是不想......
我创建了一个新的UserControl,添加了一个进度条和一个标签.当我将标签的BackColor设置为透明时,它仍然是灰色的= /为什么会这样?
我想要的是将标签放在进度条的顶部,以便其文本"在"进度条中"...
Han*_*ant 32
在项目中添加一个新类并发布下面显示的代码.建立.将新控件从工具箱顶部拖放到表单上.
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;
    }
  }
}
最简单的解决方案如下:
在可视化编辑器或表单的构造函数中将背景颜色设置为透明度:
this.label1.BackColor = System.Drawing.Color.Transparent;
设置标签的Parent属性以控制您希望在文本后面可见.这可以在表单构造函数或Load方法中完成:
this.label1.Parent = progressBar1;
确实,这不是DirectX中的真正透明度.您在显示屏上看到的结果仅由两层组成.您不能使用此方法总结两个以上的图层(每个图层都有自己的透明度由alpha参数定义).但它适用于Winforms编程中可能遇到的许多实际情况.
小智 5
使用 LinkLabel 而不是普通标签
    private void MakeTransparentLabel(System.Windows.Forms.LinkLabel LinkLabel)
    {
        this.MakeTransparentLabel(LinkLabel, Color.White);
    }
    private void MakeTransparentLabel(System.Windows.Forms.LinkLabel LinkLabel, Color ForeColor)
    {
        LinkLabel.ForeColor = ForeColor;
        LinkLabel.LinkColor = ForeColor;
        LinkLabel.VisitedLinkColor = ForeColor;
        LinkLabel.ActiveLinkColor = ForeColor;
        LinkLabel.DisabledLinkColor = ForeColor;
        LinkLabel.LinkArea = new LinkArea(0, 0);
        LinkLabel.LinkBehavior = LinkBehavior.NeverUnderline;
        LinkLabel.Cursor = Cursors.Arrow;
        LinkLabel.BackColor = Color.Transparent;
    }
    private void SetTransparentLabelText(System.Windows.Forms.LinkLabel LinkLabel, string Text)
    {
        if (string.IsNullOrEmpty(Text)) { LinkLabel.Text = " "; return; }
        LinkLabel.Text = Text;
    }
| 归档时间: | 
 | 
| 查看次数: | 28896 次 | 
| 最近记录: |