快捷搜索:

利用Visual C#打造一个平滑的进度条(二)

// Invalidate the control to get a repaint.

this.Invalidate();

}

}

public int Value

{

get

{

return val;

}

set

{

int oldValue = val;

// Make sure that the value does not stray outside the valid range.

if (value < min)

{

val = min;

}

else if (value > max)

{

val = max;

}

else

{

val = value;

}

// Invalidate only the changed area.

float percent;

Rectangle newValueRect = this.ClientRectangle;

Rectangle oldValueRect = this.ClientRectangle;

// Use a new value to calculate the rectangle for progress.

percent = (float)(val - min) / (float)(max - min);

newValueRect.Width = (int)((float)newValueRect.Width * percent);

// Use an old value to calculate the rectangle for progress.

percent = (float)(oldValue - min) / (float)(max - min);

oldValueRect.Width = (int)((float)oldValueRect.Width * percent);

Rectangle updateRect = new Rectangle();

// Find only the part of the screen that must be updated.

if (newValueRect.Width > oldValueRect.Width)

{

updateRect.X = oldValueRect.Size.Width;

updateRect.Width = newValueRect.Width - oldValueRect.Width;

}

else

{

updateRect.X = newValueRect.Size.Width;

updateRect.Width = oldValueRect.Width - newValueRect.Width;

}

updateRect.Height = this.Height;

// Invalidate the intersection region only.

this.Invalidate(updateRect);

}

}

public Color ProgressBarColor

{

get

{

return BarColor;

}

set

{

BarColor = value;

// Invalidate the control to get a repaint.

this.Invalidate();

}

}

private void Draw3DBorder(Graphics g)

{

int PenWidth = (int)Pens.White.Width;

g.DrawLine(Pens.DarkGray, new Point(this.ClientRectangle.Left, this.ClientRectangle.Top),

new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top));

g.DrawLine(Pens.DarkGray, new Point(this.ClientRectangle.Left, this.ClientRectangle.Top), new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth));

g.DrawLine(Pens.White, new Point(this.ClientRectangle.Left, this.ClientRectangle.Height - PenWidth),

new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));

g.DrawLine(Pens.White, new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Top),

new Point(this.ClientRectangle.Width - PenWidth, this.ClientRectangle.Height - PenWidth));

}

3、在 Build 菜单中,点击 Build Solution 来编译整个项目。

建立一个简单的客户端应用

1、在 File 菜单中,点击 New ,再点击Project。

2、在 Add New Project 对话框中,在 Project Types 中点击 Visual C# Projects,在 Templates 中点击 Windows Application,并点击 OK。

3、按照下面的步骤,在 Form 上添加两个 SmoothProgressBar 实例:

a、在 Tools 菜单上,点击 Customize Toolbox。

b、点击 .NET Framework Components 页。

c、点击 Browse,然后选中你在 Create a Custom ProgressBar Control 段中建立的 SmoothProgressBar.dll 文件。

d、点击 OK。您可以看到在 toolbox 中已经有 SmoothProgressBar 控件了。

e、从 toolbox 中拖两个 SmoothProgressBar 控件的实例到该 Windows Application 项目中的默认 form 上。

4、从 toolbox 页中拖一个 Timer 控件到 form 上。

5、将下面的代码添加到 Timer 控件的 Tick 事件中:

if (this.smoothProgressBar1.Value > 0)

{

this.smoothProgressBar1.Value--;

this.smoothProgressBar2.Value++;

}

else

{

this.timer1.Enabled = false;

}

6、从 toolbox 页中拖一个 Button 控件到 form 上。

7、将下面的代码添加到 Button 控件的 Click 事件中:

this.smoothProgressBar1.Value = 100;

this.smoothProgressBar2.Value = 0;

this.timer1.Interval = 1;

this.timer1.Enabled = true;

8、在 Debug 菜单中,点击 Start 来运行样例项目。

9、点击Button。注意观察那两个进度指示器。一个逐渐减小,另一个逐渐增加。

您可能还会对下面的文章感兴趣: