即使它是透明的,自定义绘制的控件也不会渲染控件

时间:2009-10-22 05:35:16

标签: c# winforms controls transparency gdi

我目前正在编写一个自定义设计的标签控件。我创建了自己的控件而不是所有者 - 绘制TabControl,因为我认为它更快,更灵活。在VS2008选项卡控件之后,我的选项卡控件自行设置样式;也就是说,当选择一个标签时,该标签的一部分位于其他未选择的标签之前。

我的标签控件包含一个Panel,其中包含我的所有TabButton对象,这些对象本身就是实际标签。我将TabButton设置为透明,如下所示:

public TabButton()
{
     ...
     SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
     UpdateStyles();
     this.BackColor = Color.Transparent;
}

但是,选择选项卡并在另一个选项卡前面时,未显示应显示在所选选项卡部分后面的未选定选项卡部分。它是标准SystemColors.Control颜色,填充所选按钮的剪切矩形的其余部分。

如何在自定义控件中实现正确的透明度?

另外:TabButton继承了Control,这就是我需要使用SetStyle才能使用透明度的原因。

-Eric Smith

1 个答案:

答案 0 :(得分:1)

看看这个:http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

最后我在.NET Windows Forms中,你不需要做一些这些伪造的黑客工具来获得透明度。我不确定他们是否在过去的3年内改变了它,但我确实记得做过这样的事情。我会先尝试不先画一个背景。