【问题标题】:Transparent User Control in .net.net 中的透明用户控制
【发布时间】:2013-12-24 15:29:22
【问题描述】:

我正在尝试制作一个带有用户控件的网页样式按钮。我需要使用户控件的背景透明。如何在不使控件不可见的情况下做到这一点。我还需要透明的标签和图片框。

尝试做这样的事情:

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

【问题讨论】:

  • 我正在尝试制作网页样式按钮。我正在使用图片框和标签。我希望标签、用户控件和图片框背景是透明的。

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


【解决方案1】:

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

否则这是一种错觉,Windows 窗体通过要求父控件在 OnPaintBackground() 方法中绘制自身来实现它,以便它提供背景像素。一件值得注意的事情是重叠控件。您只能看到父像素,而不是重叠控件的像素。这是可以修复的,但代码很丑。

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

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

【讨论】:

  • 嗨@hans-passant 你能描述一下解决问题的代码吗???不管它是否丑陋。是的,我知道你回答已经 3 年了,但我几天前刚刚发布了一个关于此的问题,但没有收到任何答复。谷歌也没有帮助。我遇到的问题正是您描述的问题:索引为 0 的控件与索引为 1 的控件重叠,但索引 1 的子对象与索引 0 重叠。起初看起来很疯狂,但现在您提到它的工作方式,它使感觉。怎么解决???谢谢
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以使用以下代码: 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;
          }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      相关资源
      最近更新 更多