C# 系统应用之透明罩MyOpaqueLayer实现360界面阴影效果
在完成“個(gè)人電腦使用記錄清除軟件”中,我設(shè)計(jì)的winform界面需要應(yīng)用到類似于"360安全衛(wèi)士"的透明罩效果,文章主要引述了如何使用自定義組件MyOpaqueLayer,并自定義類OpaqueCommand中定義顯示透明罩函數(shù)ShowOpaqueLayer和隱藏透明罩函數(shù)HideOpaqueLayer實(shí)現(xiàn),同時(shí)如何對(duì)控件添加透明罩及遇到的問(wèn)題.
一.自定義透明罩MyOpaqueLayer組件
(聲明:此段代碼引用自海華博客http://www.cnblogs.com/JuneZhang/archive/2012/07/06/2579215.html)
在添加透明罩控件\組件時(shí),我的想法是"右鍵項(xiàng)目->添加->添加控件",但添加沒(méi)有成功,在網(wǎng)上也沒(méi)有講到該添加的基礎(chǔ)方法,由于以前也沒(méi)遇到過(guò)自定義控件的問(wèn)題,所以只好采取的方法是拖拽修改過(guò)MyOpaqueLayer.cs文件至項(xiàng)目中,具體代碼如下(含詳細(xì)注釋):
二.自定義透明罩類OpaqueCommand
在第一部分我們已經(jīng)自定義透明罩組件,此時(shí)需要自定義類OpaqueCommand并調(diào)用其方法ShowOpaqueLayer(顯示遮罩層)和HideOpaqueLayer(隱藏遮罩層).可以在“解決方法”中右鍵項(xiàng)目名->添加->類,具體代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace EMSecure {class OpaqueCommand{//透明罩private MyOpaqueLayer.MyOpaqueLayer m_OpaqueLayer = null;/// <summary>/// 顯示透明層/// </summary>/// <param name="control">控件</param>/// <param name="alpha">透明度</param>/// <param name="isShowLoadingImage">是否顯示圖標(biāo)</param>public void ShowOpaqueLayer(Control control, int alpha, bool isShowLoadingImage){try{if (this.m_OpaqueLayer == null){this.m_OpaqueLayer = new MyOpaqueLayer.MyOpaqueLayer(alpha, isShowLoadingImage);control.Controls.Add(this.m_OpaqueLayer);this.m_OpaqueLayer.Dock = DockStyle.Fill;this.m_OpaqueLayer.BringToFront();}this.m_OpaqueLayer.Enabled = true;this.m_OpaqueLayer.Visible = true;}catch (Exception msg) //異常處理{MessageBox.Show(msg.Message);}}/// <summary>/// 隱藏透明層/// </summary>public void HideOpaqueLayer(){try{if (this.m_OpaqueLayer != null){this.m_OpaqueLayer.Visible = false;this.m_OpaqueLayer.Enabled = false;}}catch (Exception msg) //異常處理{MessageBox.Show(msg.Message);}}} }三.使用透明罩
在定義透明罩控件和類后,如何實(shí)現(xiàn)該界面的效果,我推薦的方法是:
1.設(shè)置toolBar控件,在items(集合)中添加相應(yīng)的圖標(biāo)\文字構(gòu)成不同的ToolItem,每次透明罩遮掩不同的Item即可,如果是wfp使用TabControl\TabItem.但由于toolBar被toolStrip替代,不太會(huì)使用該控件,但仍然推薦該方法(有的沒(méi)有定義透明罩控件,而是通過(guò)3張透明程度不同的圖,設(shè)置可見(jiàn)屬性實(shí)現(xiàn)該效果).運(yùn)行結(jié)果:
2.在代碼設(shè)計(jì)器Form中添加MyOpaqueLayer控件,此時(shí)就能看見(jiàn)6個(gè)透明罩的MyOpaqueLayer控件,該方法不需要設(shè)置自定義類OpaqueCommand調(diào)用其方法,而是設(shè)置如下代碼:
設(shè)計(jì)器中form如下圖所示:
但由于不知道如何添加該控件拖動(dòng)至設(shè)計(jì)器中,所以我采取的方法是
3.自定義6個(gè)panel,通過(guò)鼠標(biāo)事件進(jìn)入panelmol1_MouseEnter(object sender, EventArgs e)\鼠標(biāo)離開(kāi)事件panelmol1_MouseLeave(object sender, EventArgs e)\鼠標(biāo)點(diǎn)擊事件panelmol1_MouseClick(object sender, EventArgs e)實(shí)現(xiàn),最后我的運(yùn)行結(jié)果如下圖所示:
下面只給出使用透明罩控件和類的基本調(diào)用代碼并省略Click部分(因?yàn)樽龅牟皇呛芎?,請(qǐng)讀者體會(huì)與自己設(shè)計(jì):
四.總結(jié)
個(gè)人感覺(jué)該設(shè)計(jì)還有很多地方需要自己改進(jìn),同時(shí)想實(shí)現(xiàn)ToolBar方法和了解如何添加自定義組件而不是拖拽,期望自己能解決這些問(wèn)題.希望該文章對(duì)大家有所幫助,同時(shí)感謝下面3篇文章及博主,是講述透明罩和如何自定義控件的文章,個(gè)人感覺(jué)非常不錯(cuò).如果文章中有不足或錯(cuò)誤的地方,請(qǐng)海涵!
(By:Eastmount 2014-3-10 中午2點(diǎn) 原創(chuàng):http://blog.csdn.net/eastmount)
參考資料及在線筆記:
1.C#實(shí)現(xiàn)Winform自定義半透明遮罩層-海華(主要參考透明罩的設(shè)定)
http://www.cnblogs.com/JuneZhang/archive/2012/07/06/2579215.html
2.C#中自定義控件-楊友山(自定義控件簡(jiǎn)述)
http://blog.csdn.net/yysyangyangyangshan/article/details/7078471
3.C#自定義控件開(kāi)發(fā)-百度文庫(kù)(詳細(xì)介紹自定義控件\復(fù)合控件\擴(kuò)展控件)
http://wenku.baidu.com/view/89a47f6e58fafab069dc02bf.html
總結(jié)
以上是生活随笔為你收集整理的C# 系统应用之透明罩MyOpaqueLayer实现360界面阴影效果的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C# 系统应用之无标题窗体移动的两种方法
- 下一篇: C# 系统应用之ListView控件 (