溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#如何實(shí)現(xiàn)帶百分比的進(jìn)度條功能

發(fā)布時(shí)間:2020-10-16 16:29:40 來(lái)源:億速云 閱讀:337 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹了C#如何實(shí)現(xiàn)帶百分比的進(jìn)度條功能,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

功能需求:

如果程序中會(huì)執(zhí)行一個(gè)耗時(shí)的計(jì)算過(guò)程,我想在用戶點(diǎn)擊按鈕后,彈出一個(gè)進(jìn)度條窗口,顯示正在執(zhí)行的進(jìn)度(最好能帶有百分比),執(zhí)行完成后,進(jìn)度條窗口關(guān)閉,回到主程序窗口。 在關(guān)閉子窗口之前父窗體不能點(diǎn)擊操作。

實(shí)現(xiàn)方法:

先設(shè)計(jì)Form2進(jìn)度條窗體,在Form2中央上放ProgressBar控件progressBar1和Label控件label1,代碼:

public partial class Form2 : Form
{
 public Form2(int _Minimum,int _Maximum)//帶參數(shù),表示進(jìn)度條的范圍的最小值和最大值
 {
   InitializeComponent();
   progressBar1.Maximum=_Maximum;//設(shè)置范圍最大值
   progressBar1.Value = progressBar1.Minimum = _Minimum;//設(shè)置范圍最小值
 }
 public void setPos(int value)//設(shè)置進(jìn)度條當(dāng)前進(jìn)度值
 {
   if (value < progressBar1.Maximum)//如果值有效
   {
     progressBar1.Value = value;//設(shè)置進(jìn)度值
     label1.Text = (value * 100 / progressBar1.Maximum).ToString() + "%";//顯示百分比
   }
   Application.DoEvents();//重點(diǎn),必須加上,否則父子窗體都假死
 }
 private void Form2_Load(object sender, EventArgs e)
 {
   this.Owner.Enabled = false;//設(shè)置父窗體不可用
 }
 private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 {
   this.Owner.Enabled = true;//回復(fù)父窗體為可用
 }
}

調(diào)用窗體For1m設(shè)計(jì),添加Button控件button1,事件代碼:

private void button1_Click(object sender, EventArgs e)
{
   Form2 fm = new Form2(0,100);
   fm.Show(this);//設(shè)置父窗體
   for (int i = 0; i < 100; i++)
   {
     fm.setPos(i);//設(shè)置進(jìn)度條位置
     Thread.Sleep(100);//睡眠時(shí)間為100
   }
   fm.Close();//關(guān)閉窗體
}

補(bǔ)充:有朋友說(shuō)在vs2003中fm.Show(this):是不支持的,那么可以將From2的構(gòu)造函數(shù)多加一個(gè)參數(shù):

public Form OwnerForm;
public Form2(int _Minimum,int _Maximum,Form _OwnerForm)//帶參數(shù),表示進(jìn)度條的范圍的最小值和最大值
{
   InitializeComponent();
   progressBar1.Maximum=_Maximum;//設(shè)置范圍最大值
   progressBar1.Value = progressBar1.Minimum = _Minimum;//設(shè)置范圍最小值
   this.OwnerForm=_OwnerForm;
}
private void Form2_Load(object sender, EventArgs e)
{
   this.OwnerForm.Enabled = false;//設(shè)置父窗體不可用
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
   this.OwnerForm.Enabled = true;//回復(fù)父窗體為可用
}

Form1中相應(yīng)的修改為:

private void button1_Click(object sender, EventArgs e)
{
   Form2 fm = new Form2(0,100,this);
   fm.Show();//設(shè)置父窗體
   for (int i = 0; i < 100; i++)
   {
     fm.setPos(i);//設(shè)置進(jìn)度條位置
     Thread.Sleep(100);//睡眠時(shí)間為100
   }
   fm.Close();//關(guān)閉窗體
}

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享C#如何實(shí)現(xiàn)帶百分比的進(jìn)度條功能內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問(wèn)題就找億速云,詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI