已經很少做winform程序了,最新參與了一個小項目,遇到了控件背景透明的功能要求,特在此總結一下,供有需要的同行參考。
0、背景透明的概念和分類
背景透明是啥意思呢,就是背景透明。哈哈,廢話了。其實你想過沒有,要求不一樣,實現的難道和技術手段也不一樣。
最基本的就是不顯示控件自己的背景,那,那顯示誰的背景?
背景透明後,透過去顯示誰,也就是說後面的誰不透明,這是問題的關鍵,換句話說,透明控件的parent是一個還是多個。
1、簡單的背景透明,parent是一個的情況
a、自然透明,如圖label1
實現:把控件背景色設置成窗口背景色
b、需要把picture設為parent才能透明的label2
實現:this.label2.Parent = this.pictureBox1;
c、本身就是label,只不過設置了Image屬性,相當於加了背景圖,自然也背景透明
this.label3.Image = Image.FromFile("xfb.jpg");
d、普通的label是不能跨控件透明的
小結:對於背景是單一控件來說,背景透明都好實現,但是對背景是多對象來說說,要實現背景透明就比較難。
2、背景是多個控件背景的透明
說實話,很少有這種要求,更多的,是下面第三中情況。
3、透明文字,半透明背景,最後後的背景任意
這個效果類似於千千靜聽的桌面歌詞,文字背景是全透明的,可以設置一個帶顏色和透明度的背景。
其實實現很簡單,原理就是用了兩個窗口,文字是一個透明窗口,帶顏色和透明度的背景是一個打底窗口,應用的時候把這兩個窗口的不要的屬性都去掉,如邊框,狀態欄圖標等,最後就是設置好兩個窗口的大小和位置以及層級關系就Ok了。
文字窗口背景透明this.TransparencyKey = this.BackColor; 顯示文字 直接在 paint事件中drawstring
帶顏色和透明度背景窗口:直接用 backcolor 和 Opacity
作者:binsweet