【问题标题】:How to clear a transparent panel?如何清除透明面板?
【发布时间】:2012-10-09 02:37:24
【问题描述】:

我做了一个这样的透明面板(在 C# 中):

public class TransparentPanel : Panel
{
    public TransparentPanel()
    {
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams createParams = base.CreateParams;
            createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
            return createParams;
        }
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        // Do not paint background.
    }
}

它显示在普通面板上。我想画一个圆圈来在另一个面板中显示一些东西,所以我在透明的 OnPaint 方法上画了我的圆圈。然后,我想展示其他东西,所以我需要这个圈子“移动”到其他地方。

但我做不到。

尽管我确实在 OnPaint 方法中绘制了这个圆圈,但我在这里找到的所有解决方案都不适合我。 我不使用事件的 Graphics 对象,因为如果我这样做了,什么都不会显示。

所以,我必须使用这个:

this.CreateGraphics()

我无法使用背景颜色在其上绘制另一个圆圈:我的背景需要保持透明。并且用 Color.Transparent 画一个圆圈不起作用。

清除透明面板会导致黑色背景替换透明面板。

说明

Graphics.Clear();

无法编译。

这个也没有:

gr.Clear();

因为它需要一个 Color 参数。

还有这个:

gr.Clear(Color.transparent);

创建黑色背景。

在我看来,我已经尝试了所有我能想到的。

有什么想法吗?

【问题讨论】:

    标签: panel transparent ws-ex-transparent


    【解决方案1】:

    我在 Java 中遇到了类似的问题,可以通过重新绘制父面板来解决它。这也清除了透明子面板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多