利用Visual C#打造一個平滑的進度條
2006/11/6 9:10:03

本文描述了如何建立一個簡單的、自定義的用戶控件——一個平滑的進度條。 
在早先的進度條控件版本中,例如在 Microsoft Windows Common Controls ActiveX 控件中提供的版本,您可以看到進度條有兩種不同的視圖。您可以通過設(shè)定 Scrolling 屬性來設(shè)定 Standard 視圖或是 Smooth 視圖。 Smooth 視圖提供了一個區(qū)域來平滑的顯示進度, Standard 試圖則看上去是由一個一個方塊來表示進度的。 
在 Visual C# .NET 中提供的進度條控件只支持 Standard 視圖。 
本文的代碼樣例揭示了如何建立一個有如下屬性的控件: 
Minimum。該屬性表示了進度條的最小值。默認情況下是 0 ;您不能將該屬性設(shè)為負值。 
Maximum。該屬性表示了進度條的最大值。默認情況下是 100 。 
Value。該屬性表示了進度條的當(dāng)前值。該值必須介于 Minimum 和 Maximum 之間。 
ProgressBarColor。該屬性表示了進度條的顏色。 
建立一個自定義的進度條控件 
1、按著下面的步驟,在 Visual C# .NET 中建立一個 Windows Control Library 項目: 
a、打開 Microsoft Visual Studio .NET。 
b、點擊 File 菜單,點擊 New ,再點擊 Project 。 
c、在 New Project 對話框中,在 Project Types 中選擇 Visual C# Projects,然后在 Templates 中選擇 Windows Control Library 。 
d、在 Name 框中,填上 SmoothProgressBar ,并點擊 OK 。 
e、在 Project Explorer 中,重命名缺省的 class module ,將 UserControl1.cs 改為 SmoothProgressBar.cs 。 
f、在該 UserControl 對象的 Property 窗口中,將其 Name 屬性從 UserControl1 改為 SmoothProgressBar 。 
2、此時,您已經(jīng)從 control 類繼承了一個新類,并可以添加新的功能。但是,ProgressBar累是密封(sealed)的,不能再被繼承。因此,您必須從頭開始建立這個控件。 
將下面的代碼添加到UserControl模塊中,就在“Windows Form Designer generated code”之后: 
int min = 0; // Minimum value for progress range 
int max = 100; // Maximum value for progress range 
int val = 0; // Current progress 
Color BarColor = Color.Blue; // Color of progress meter 
protected override void OnResize(EventArgs e) 

// Invalidate the control to get a repaint. 
this.Invalidate(); 

protected override void OnPaint(PaintEventArgs e) 

Graphics g = e.Graphics; 
SolidBrush brush = new SolidBrush(BarColor); 
float percent = (float)(val - min) / (float)(max - min); 
Rectangle rect = this.ClientRectangle; 
// Calculate area for drawing the progress. 
rect.Width = (int)((float)rect.Width * percent); 
// Draw the progress meter. 
g.FillRectangle(brush, rect); 
// Draw a three-dimensional border around the control. 
Draw3DBorder(g); 
// Clean up. 
brush.Dispose(); 
g.Dispose(); 

public int Minimum 

get 

return min; 

set 

// Prevent a negative value. 
if (value < 0) 

min = 0; 

// Make sure that the minimum value is never set higher than the maximum value. 
if (value > max) 

min = value; 
min = value; 

// Ensure value is still in range 
if (val < min) 

val = min; 

// Invalidate the control to get a repaint. 
this.Invalidate(); 


public int Maximum 

get 

return max; 

set 

// Make sure that the maximum value is never set lower than the minimum value. 
if (value < mi

下一頁
返回列表
返回首頁 主站蜘蛛池模板: 国精产品一品二品国精品69xx| 笨蛋英子未删1至925下载| 国产香港特级一级毛片| 三级黄色小视频| 日韩卡一卡2卡3卡4| 亚洲日本中文字幕天堂网| 精品久久久久久国产潘金莲| 国产亚洲人成a在线v网站| 亚洲制服欧美自拍另类| 在人间免费观看未删减| 一本到在线观看视频不卡| 日本一二线不卡在线观看 | 两个人看的视频播放www| 处处吻动漫高清在线观看| 一级毛片女人18水真多| 日本a级视频在线播放| 久久香蕉国产线看免费| 欧美人禽猛交乱配| 亚洲熟女综合色一区二区三区| 看久久久久久A级毛片| 哆啪啪免费视频| 蜜臀av性久久久久蜜臀aⅴ麻豆| 国产成人欧美一区二区三区| 香蕉免费看一区二区三区| 国偷自产视频一区二区久| a毛看片免费观看视频| 尾野真知子番号| 中文字幕丰满乱子伦无码专区| 日本免费网站在线观看| 久久精品国产亚洲AV网站| 最近中文字幕高清2019中文字幕 | 狠狠色伊人亚洲综合网站色| 国产精品无码一区二区在线观一| 亚洲欧美日韩国产精品专区| 直接进入免费看黄的网站| 同人本里番h本子全彩本子| 蜜桃成熟之蜜桃仙子| 国产午夜三级一区二区三| 91精品免费看| 天堂а√在线地址| 一二三四视频社区在线|