2012-10-18 55 views
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(); 

,因为它需要一个颜色参数。

这:

gr.Clear(Color.transparent); 

创建了一个黑色的背景。

对我来说似乎我已经尝试过所有我能想到的东西。

有什么想法?

回答

0

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