代码之家  ›  专栏  ›  技术社区  ›  Eric Smith

自定义绘制的控件不会在其后面呈现控件,即使它是透明的

  •  0
  • Eric Smith  · 技术社区  · 15 年前

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

    我的选项卡控件由一个面板组成,其中包含我的所有选项卡按钮对象,这些对象本身就是实际的选项卡。我将tabbutton设置为透明的,如下所示:

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

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

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

    另外:tabbutton继承了控件,所以我需要使用 SetStyle 为了使用透明度。

    - Eric Smith

    1 回复  |  直到 15 年前
        1
  •  1
  •   popester    15 年前

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

    上一次我是在.NET Windows窗体中,很明显你需要做一些psuedo黑客以使透明度发挥作用。我不确定他们是否在过去的3年里改变了它,但我记得我做过类似的事情。我会尽量不先画背景。