1

我做了一个这样的透明面板(在 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);

创建黑色背景。

在我看来,我已经尝试了我能想到的一切。

任何想法 ?

4

1 回答 1

1

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

于 2013-01-23T19:09:31.237 回答