【问题标题】:C#: Form.DoubleBuffered = true kills transparancyC#:Form.DoubleBuffered = true 杀死透明度
【发布时间】:2011-09-08 16:25:48
【问题描述】:
  1. 创建一个新的 windows 窗体项目
  2. 将此表单的 TransparancyKey 和 BackColor 设置为“黑色”
  3. 运行

=> 表单显示为透明

现在还设置 Form.DoubleBuffered 属性为 true

=> 表单不再显示为透明

为什么会这样? 获得双缓冲透明表单的任何解决方法?

【问题讨论】:

  • 双缓冲肯定会扼杀其他实现透明度的方法。只是不是 TransparencyKey。

标签: c# winforms transparency


【解决方案1】:

您无需担心您的 TransparencyKey 和 BackColor 属性,透明度和双缓冲就可以正常工作。将它们保留为默认值,然后重试。然后,如果您真的希望背景颜色为黑色,请尝试应用该值。

下面的 sn-p 在我的机器上产生一个 50% 透明的窗口:

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
        DoubleBuffered = true;
        AllowTransparency = true;
        BackColor = Color.Black;
        Opacity = .5;
    }
}

【讨论】:

  • 不透明度不能代替透明度。
  • 好的,我正在详细说明:表单有一个 png 图像背景,其中包含一些透明部分。这就是我使用 TransparencyKey 和 BackColor 的原因,因为这会使表单在背景 png 图像透明的区域透明。但是一旦我设置了 DoubleBuffered = true 这不再起作用了。
  • 您能否发布一个工作(非双缓冲)图像的屏幕截图,以便我们可以看到您在寻找什么?
【解决方案2】:

我刚刚尝试了您的复制步骤,对我来说效果很好。也许这是某种 .Net 版本/操作系统版本/图形问题。

作为参考,我正在测试...

  • VS 2010
  • Windows 7(32 位)
  • .Net 4

【讨论】:

  • 好的,我正在详细说明:表单有一个 png 图像背景,其中包含一些透明部分。这就是我使用 TransparencyKey 和 BackColor 的原因,因为这会使表单在背景 png 图像透明的区域透明。但是一旦我设置 DoubleBuffered = true 这不再起作用。我有 VS2010 Express,Win XP
  • @nr1,我想说这个问题与设置背景图像有关。也许值得尝试在表单 OnPaint 事件上绘制自己的图像(或使用填充表单的面板,我可能会选择此选项)
猜你喜欢
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2011-12-04
相关资源
最近更新 更多