雖然WinForms不太適合用戶控件的透明度,但它是可能的。請參閱this article。在這篇文章中,作者建議派生自Panel而不是UserControl,並重寫OnPaintBackground方法以便不做任何事情。這將阻止你的背景被繪製
protected override void OnPaintBackground(PaintEventArgs pevent)
{
//do nothing
}
protected override void OnMove(EventArgs e)
{
RecreateHandle();
}
// Override the CreateParams property:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle = 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
最後,重寫OnPaint函數可以繪製你的圖片框。
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
//Do your drawing here
}
使用這個你可以創建一個透明的自定義圖片框,但請注意,如果你將它在實時在屏幕上,你會得到閃爍和模糊。
使用這種和類似的技術,我們設法獲得一個WinForms應用程序Premex XPort以與他們的網站類似的品牌來呈現。這涉及到多個透明的控件,繪畫黑客和各種各樣的顯示,以正確顯示。
綜上所述,Winforms之所以做得不好,是因爲在基於Win32的技術中,一個控件擁有屏幕上的一個像素。沒有辦法像HTML或WPF中所期望的那樣真正地將具有透明度的像素組合在一起。後來的Windows技術(WPF)做得非常好,所以如果你真的希望大量使用你的應用程序的透明度,我會建議移動到這個平臺,至少部分(WPF可以在WinForms中,反之亦然)。
此致敬禮
如果將GIF替換爲設置了透明度的PNG,會發生什麼情況? – ChrisF 2011-12-31 13:58:51
在GIF之前嘗試過PNG,遺憾的是同樣的確切情況。 – 2011-12-31 14:00:59
調用'note.Invalidate();'移動後有幫助嗎?或'panel.Invalidate();'? – LarsTech 2011-12-31 15:34:38