2012-10-18 79 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中遇到了類似的問題,可以通過重新繪製父面板來重新調整它。這也清除了透明子面板。