前2天在網上找到一個很有意思的進度條控件,拿出來給大家分享一下,順便記錄一下自己的學習心得。
先截個圖看看效果:
由於項目需要,要在復雜的執行中給用戶展示執行進度,難免的就會涉及到進度條。在codeproject上面看到一個叫Progress-O-Doom的進度條控件,看了一下覺得蠻有意思的,就下了個回來研究了一下。發現它的進度條都是由一些子控件繪畫出來的,包括專門畫邊框的,專門畫滾動條背景的,專門畫滾動條的。好像是把一個進度條分解成了好幾個東西去分別繪制,而且有些是可以自由組合的,最終組合而成的進度條可以有多種效果,可以自己試驗一下,考驗想象力的時候到了。
除了最基本的ProgressBarEx這個控件之外,還有幾種內置的滾動條控件,包括Rar樣式的RarProgressBar、包含二層滾動條的DualProgressBar.跑按照作者的設計的話其實是只需要一個ProgressBarEx,再加上一些ProgressPainter,BackgroundPainter,BorderPainter,就可以組合出很酷的進度條。其中ProgressPainter也可以單獨設置自己的GlossPainter和BorderPainter屬性,而BackgroundPainter也是可以設置它的GlossPainter屬性的,就這種靈活的組合,很方便,而且作者都是有可視化界面的,拖拖拽拽,點點鼠標設置一下,就可以弄一個很酷的進度條出來。
用一個DualProgressBar就可以解決我項目的需求,因為我有二層的for循環,第一層的滾動條顯示外層的循環,第二層的滾動條顯示裡層的循環,蠻好的。
先在窗體上面放置一個DualProgressBar,這個類型的滾動條需要4個Painter去描繪, ,所以可以再分別在窗體上面選擇對應類型的Painter,然後分別設置好Painter的屬性,主要是顏色類和樣式類,有的還涉及到二種顏色,有的樣式可以設置為突出或是凹進去或者和窗體平齊,3D效果之類的。其實像這個進度條設置一下MasterValue和Value就可以在設計的時候看出它其實是二個進度條的組合了。這裡MasterPainter和ProgressPainter要設置成2個不一樣的ProgressPainter,至少要顏色不一樣才能看得到是二個在同時滾動嘛。
後台代碼的使用也是比較簡單的,主要就是對MasterValue和Value賦值就可以了。設置2個參數,第一個是第一層的循環次數,第二個參數是第二層循環的次數。
/// <summary>
/// Shows the progress.
/// </summary>
/// <param name="firstLoop">The first loop count.</param>
/// <param name="secondLoop">The second loop count.</param>
private void ShowProgress(int firstLoop, int secondLoop)
{
dualProgressBar1.Value = 0;
dualProgressBar1.MasterValue = 0;
dualProgressBar1.Maximum = secondLoop;