2010-11-07 51 views
1

我正在試圖製作一個帶有用戶控件的網頁樣式按鈕。我需要使User Control的背景透明。如何在不使控件不可見的情況下做到這一點。另外我需要透明的Label和PictureBox。.net中的透明用戶控件

試圖讓這樣的事情:你列出alt text

this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); 
this.BackColor = Color.Transparent; 
+0

我試圖讓網頁樣式按鈕。我正在使用一個picturebox和一個標籤。我希望標籤,用戶控件和picturebox背景透明。 – 2010-11-07 11:06:20

+0

這是在winforms上? – anivas 2010-11-07 12:19:33

+0

是的,我正在使用winforms – 2010-11-07 13:15:42

回答

5

所有三個控件已經有ControlStyles.SupportsTransparentBackColor風格開啓。只需在設計器Web選項卡中設置BackColor屬性。這是不清楚爲什麼這對你不夠好。

這是一種錯覺,Windows窗體通過要求父控件在OnPaintBackground()方法中繪製自己以使其提供背景像素來實現它。一個不起作用的值得注意的事情是重疊控制。您只能看到父像素,而不是重疊控件的像素。這是可以修復的,但代碼很糟糕。

唯一的其他透明度選項是Form.TransparencyKey。這是真正的透明度,通過在視頻適配器中使用疊加層來實現。問題是這隻適用於頂層窗口。表單,而不是控件。

這些限制是Windows窗體渲染模型中固有的,使用單獨的窗口作爲控件。 Web瀏覽器不具有相同的限制,它通過繪製它們來模擬控件。油漆層,通過不畫而使透明度變得微不足道。 WPF也使用該渲染模型。

+0

嗨@ hans-passant你能否請描述代碼來解決這個問題?不管它是否醜陋。是的,我知道你已經回答了3年,但是我幾天前剛發佈了一個關於這個問題的問題,但沒有得到答案。谷歌也沒有幫助。我遇到的問題正是你所描述的問題:索引爲0的控件與索引1重疊控件,但索引1的子項與索引0重疊。起初它看起來很瘋狂,但現在你提到了它的工作方式,它使感。如何解決它?謝謝 – 2013-06-28 02:56:28

+1

http://support.microsoft.com/kb/943454 – 2013-06-28 08:18:58

4

如果你的意思是你想要的「部分透明」,看到這樣的很好的解決方案: Opacity of Buttons/TextBoxes - VB.NET

(設置使用Alpha值的背景色)

我知道上面的示例是VB,但它適用於C#也是如此。 :)

0

您可以使用此代碼: ImageButton()是我的構造函數。

public ImageButton() 
    { 
     InitializeComponent(); 

     this.SetStyle(ControlStyles.Opaque, true); 
     this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false); 
    } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams parms = base.CreateParams; 
      parms.ExStyle |= 0x20; 
      return parms; 
     } 
    }