C#透明窗體及按鈕的效果淺析
C#透明窗體及按鈕的效果就是使用Alpha Blending技術(shù)。Alpha Blending技術(shù)是一個混合各種顏色值并產(chǎn)生透明效果的過程。具體的實現(xiàn)原理也很簡單:在GDI+中,任何一種顏色由四種成分組成――Alpha,Red,Green和Blue。其中的Alpha成分則代表了一種顏色的透明程度,它的值在0到255之間變化。不言而喻,0代表完全透明而255則表示完全不透明。因此,你只要用透明效果創(chuàng)建一種顏色并用該顏色來畫圖像就可以完成圖像的透明處理了。
C#透明窗體及按鈕的效果:
1、C#按鈕透明:
設(shè)置按鈕的backcolor為0,0,0,0 的數(shù)字即可,同時設(shè)置FlatApperance的BorderSize為0,F(xiàn)latStyle為Flat,這樣該按鈕就完全透明了,此種效果常用在用背景做皮膚,然后在相應(yīng)位置放一個按鈕,控制按鈕事件,但不想讓用戶看到按鈕的情況;
2、C#窗體關(guān)閉時產(chǎn)生透明漸變:
前幾天無意中聽同學(xué)說想要弄個窗體漸變的,后來自己上網(wǎng)搜索了一下,發(fā)現(xiàn)些方法,自己試了一下是成功的,但是還是有些問題,郁悶。。。以下列出幾種我弄的方法:
① 新鍵窗體,窗體里加個按鈕,雙擊按鈕進入事件編寫代碼:
- while (this.Opacity > 0)
- {
- this.Opacity -= 0.02;
- Thread.Sleep(20);
- }
- Application.Exit();
程序運行后點擊該按鈕關(guān)閉的時候整個窗體是先變成黑色,然后透明度再慢慢變小,變?yōu)?的時候程序再退出的,理論上來說我這個思路應(yīng)該是正確的,可是我就不知道是怎么回事了?
②往窗體里加入Timer控件,Interval設(shè)置為20,控件事件編寫代碼:
- if (this.Opacity > 0)
- {
- this.Opacity -= 0.02;
- }
- else {
- Application.Exit();
- }
然后在按鈕的點擊事件中寫上 timer1.Start(); 就行了,經(jīng)測試,這種方法是可以的,窗體是慢慢變透明而后又關(guān)閉的。。。
C#透明窗體及按鈕的效果變化遇到的問題
可是隨后的問題又來了,我現(xiàn)在是想當我點擊窗體右上角的關(guān)閉按鈕時,窗體漸變關(guān)閉,我在窗體的FormClosing事件中輸入timer1.Start();,測試,結(jié)果是當我點擊窗體右上角的關(guān)閉按鈕時,程序是直接退出了,并沒有漸變消失,郁悶,搞不懂是怎么回事哦,而后上網(wǎng)找了好久,找到個解決方法,F(xiàn)ormClosing事件中輸入e.Cancel = true; timer1.Start(); 測試,結(jié)果,點擊關(guān)閉后,窗體是能漸變消失了,可是當透明度到0了以后,并沒有關(guān)閉,任務(wù)欄上的圖標還在,任務(wù)管理器里也有相應(yīng)的進程。
- private void Form1_FormClosing(
- object sender, FormClosingEventArgs e)
- {
- timer1.Start();
- e.Cancel = false;
- }
兩步順序倒了,解釋下:在窗體關(guān)閉時事件 調(diào)用線程逐減透明度 然后 Cancel=false;是讓窗體關(guān)閉不取消樓主理解錯誤了 true是取消 所以窗體不會關(guān)閉Cancel 一般是關(guān)閉窗體時寫,例子:
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- DialogResult dr=MessageBox.Show("是否關(guān)閉本窗體","提示",MessageBoxButtons.YesNo);
- if (DialogResult.No == dr)//如果點否按鈕
- {
- e.Cancel = true;//取消關(guān)閉
- }
- }
C#透明窗體及按鈕的效果的實現(xiàn)基本情況就向你介紹到這里,希望對你了解和學(xué)習(xí)C#透明窗體及按鈕的效果有所幫助。
【編輯推薦】