2011-05-31 68 views
1

我想讓我的UserControl的BackGround看起來不在那裏。我試圖做這樣的:如何使用戶控件的背景透明?

if ((Parent != null) && (Parent.BackgroundImage != null)) 
{ 
    Bitmap backGroundImage = new Bitmap(Width, Height); 
    Graphics.FromImage(backGroundImage).DrawImage(owner.BackgroundImage, 0, 0, new Rectangle(Location.X, Location.Y, Width, Height), GraphicsUnit.Pixel); 
    this.BackgroundImage = (Image)backGroundImage; 
} 

和它的作品,但我也必須計算每一次這是用戶控件的父窗體的的BackgroundImage其大小的變化,並設置窗體的BackGroundImageLayout無法比擬的。我的UserControl可以接受Parent的BackGroundImage,並在每次需要重繪時拉伸它,然後只取其一部分並將其設置爲它的BackGroundImage,但Form會在其可見矩形外繪製其伸展背景。所以我可以看到差異,它不適合。

我使它工作,它適合父母的BackGroundImage,但它是很多代碼,並在調整大小時減慢我的程序。

必須有一個最簡單的方法來做到這一點。我不是說使用ControlStyles.SupportsTransparentBackColor。我希望它看起來就像沒有UserControl的背景。

+0

您從父窗體複製背景圖像篇(控制大小)和設置的那件作爲對照的背景? – Reniuz 2011-05-31 08:24:11

回答

4

製作用戶控件背景色爲透明this.BackColor = Color.Transparent;

1

可以使用,someUserControl.BackColor = Color.FromKnownColor(KnownColor.Transparent);和隱形BackColor。

+0

@Nighil,@hashi:它工作併爲我節省了很多工作:)如果你還可以告訴我,如果可能的話,我可以設置控制的BackColor哪個父母是UserControl,哪個父母如果表單透明,當UserControl BackColor不透明?我試圖將窗體設置爲控件的父,然後將其背景顏色設置爲透明,但它不起作用... – 2011-05-31 09:04:02

+0

還有一件事:當我設置爲控件的透明BackColor,其中父是UserControl,它Parent是Form,UserControl的BackColor也是透明的,然後我的程序停止工作,沒有任何反應,沒有錯誤或異常。 – 2011-05-31 09:22:05

+0

您應該編輯您的原始帖子。沒有人會明白你的意思是「隱形/無背景」你正在尋找的是「透明度」和「ControlStyles.SupportsTransparentBackColor」加上BackColor到Transparent實際上是*近似*用於UserControl的最簡單方法。選擇一個答案並關閉這個問題 - 您的原始問題已被回答。對於控件,上述不再可靠工作,面板和其他一些可能,但...搜索「透明Winforms控件」。陽光下這個話題的每一個變化和已知的黑客已經被問及/回答。 – Sisyphus 2011-05-31 22:13:10

1

,如果你需要父母是透明的,你 可以使用此代碼:

parent.BackColor = Color.Red; 
parent.TransparencyKey = parent.BackColor;