.net中的透明用户控件

时间:2010-11-07 10:43:49

标签: c# .net vb.net winforms user-controls

我正在尝试使用用户控件创建一个Web样式按钮。我需要使用户控件的背景透明。如何在不使控件不可见的情况下执行此操作。我还需要透明的Label和PictureBox。

尝试制作类似的内容:alt text

this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;

3 个答案:

答案 0 :(得分:5)

您列出的所有三个控件都已打开ControlStyles.SupportsTransparentBackColor样式。只需在设计器的Web选项卡中设置BackColor属性即可。 非常不清楚为什么这对你来说不够好。

这是一种错觉,Windows Forms通过要求Parent控件在OnPaintBackground()方法中绘制自身来实现它,因此它提供了背景像素。一个值得注意的不起作用的是重叠控件。您只能看到父像素,而不是重叠控件的像素。这是可以解决的,但代码很难看。

唯一的其他透明度选项是Form.TransparencyKey。这是真正的透明度,通过在视频适配器中使用叠加来实现。问题是这只适用于顶层窗户。表格,而不是控件。

这些限制是Windows窗体渲染模型中固有的,使用控件的单独窗口。 Web浏览器没有相同的限制,它通过绘制来模拟控件。油漆层,通过不绘画使透明度变得微不足道。 WPF也使用该渲染模型。

答案 1 :(得分:4)

如果您的意思是想要“部分透明度”,请参阅以获得更好的解决方案: Opacity of Buttons/TextBoxes - VB.NET

(使用Alpha值设置背景颜色)

我知道上面的示例是VB,但它也适用于C#。 :)

答案 2 :(得分:0)

您可以使用此代码: ImageButton()是我的构造函数。

  public ImageButton()
    {
      InitializeComponent();

      this.SetStyle(ControlStyles.Opaque, true);
      this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
    }

    protected override CreateParams CreateParams
    {
      get
      {
          CreateParams parms = base.CreateParams;
          parms.ExStyle |= 0x20;  
          return parms;
      }
    }