共用方式為


HOW TO:設定 Windows Form ProgressBar 控制項顯示的值

更新:2007 年 11 月

重要事項:

ToolStripProgressBar 控制項會取代並且將功能加入至 ProgressBar 控制項;不過,不過您也可以選擇保留 ProgressBar 控制項,以提供回溯相容性 (Backward Compatibility) 以及供未來使用。

.NET Framework 對於在 ProgressBar 控制項內部顯示特定值方面,提供數種不同的方式。您所選擇的方法,端視手邊的工作或正在解決的問題而定。下表顯示了您可選擇的形式:

處理方式

說明

直接設定 ProgressBar 控制項的值。

對於已知道所含測量項目總數的工作,例如從資料來源讀取記錄而言,這個方法就很實用。此外,如果只需要設定值一次或兩次,這個方法也很容易。最後,如果需要降低進度列所顯示的值,也請使用這個處理序。

以固定值增加 ProgressBar 顯示。

在最小和最大之間顯示簡單計數時,例如已耗用時間或已知總數中已處理的檔案數,這個方法就很實用。

以變化值增加 ProgressBar 顯示。

需要數次以不同數量變更顯示值時,這個方法就很有用。稍後會提供範例,說明將一系列檔案寫入磁碟時所耗用的硬碟空間量。

由進度列顯示該值最直接的方法就是設定 Value 屬性。您可以在設計階段或執行階段執行此作業。

若要直接設定 ProgressBar 值

  1. 設定 ProgressBar 控制項的 MinimumMaximum 的值。

  2. 在程式碼中,將控制項的 Value 屬性設定為介於已建立的最小和最大值之間的整數值。

    注意事項:

    如果您在由 MinimumMaximum 屬性建立的界限之外,設定 Value 屬性,此控制項會擲回 ArgumentException 例外狀況。

    下列程式碼範例說明如何直接設定 ProgressBar 值。程式碼會從資料來源讀取記錄,然後在每次讀取資料記錄時更新進度列和標籤。這個範例需要您的表單具有 Label 控制項、ProgressBar 控制項,以及具有稱為 CustomerRow 的資料列 (其中包含 FirstName 和 Last Name 欄位) 的資料表。

    Public Sub CreateNewRecords()
       ' Sets the progress bar's Maximum property to
       ' the total number of records to be created.
       ProgressBar1.Maximum = 20
    
       ' Creates a new record in the dataset.
       ' NOTE: The code below will not compile, it merely
       ' illustrates how the progress bar would be used.
       Dim anyRow As CustomerRow = DatasetName.ExistingTable.NewRow
       anyRow.FirstName = "Stephen"
       anyRow.LastName = "James"
       ExistingTable.Rows.Add(anyRow)
    
       ' Increases the value displayed by the progress bar.
       ProgressBar1.Value += 1
       ' Updates the label to show that a record was read.
       Label1.Text = "Records Read = " & ProgressBar1.Value.ToString()
    End Sub
    
    public void createNewRecords()
    {
       // Sets the progress bar's Maximum property to
       // the total number of records to be created.
       progressBar1.Maximum = 20;
    
       // Creates a new record in the dataset.
       // NOTE: The code below will not compile, it merely
       // illustrates how the progress bar would be used.
       CustomerRow anyRow = DatasetName.ExistingTable.NewRow();
       anyRow.FirstName = "Stephen";
       anyRow.LastName = "James";
       ExistingTable.Rows.Add(anyRow);
    
       // Increases the value displayed by the progress bar.
       progressBar1.Value += 1;
       // Updates the label to show that a record was read.
       label1.Text = "Records Read = " + progressBar1.Value.ToString();
    }
    

    如果顯示的進度是以固定間隔進行,則可設定該值,然後呼叫方法,以該間隔增加 ProgressBar 控制項的值。對於計時器和未以整體百分比測量進度的其他案例而言,這個方法很有用。

若要以固定值增加進度列

  1. 設定 ProgressBar 控制項的 MinimumMaximum 的值。

  2. 將控制項的 Step 屬性設定為整數,表示增加進度列顯示值的數量。

  3. 呼叫 PerformStep 方法,依在 Step 屬性中設定的數量變更顯示值。

    下列程式碼範例說明進度列如何在複製作業中維持檔案計數。

    在下列範例中,當每個檔案讀取至記憶體時,系統會更新進度列和標籤,以反映讀取的檔案總數。在這個範例中,您的表單必須有 Label 控制項和 ProgressBar 控制項。

    Public Sub LoadFiles()
       ' Sets the progress bar's minimum value to a number representing
       ' no operations complete -- in this case, no files read.
       ProgressBar1.Minimum = 0
       ' Sets the progress bar's maximum value to a number representing
       ' all operations complete -- in this case, all five files read.
       ProgressBar1.Maximum = 5
       ' Sets the Step property to amount to increase with each iteration.
       ' In this case, it will increase by one with every file read.
       ProgressBar1.Step = 1
    
       ' Dimensions a counter variable.
       Dim i As Integer
       ' Uses a For...Next loop to iterate through the operations to be
       ' completed. In this case, five files are to be copied into memory,
       ' so the loop will execute 5 times.
       For i = 0 To 4
          ' Insert code to copy a file
          ProgressBar1.PerformStep()
          ' Update the label to show that a file was read.
          Label1.Text = "# of Files Read = " & ProgressBar1.Value.ToString
       Next i
    End Sub
    
    public void loadFiles()
    {
       // Sets the progress bar's minimum value to a number representing
       // no operations complete -- in this case, no files read.
       progressBar1.Minimum = 0;
       // Sets the progress bar's maximum value to a number representing
       // all operations complete -- in this case, all five files read.
       progressBar1.Maximum = 5;
       // Sets the Step property to amount to increase with each iteration.
       // In this case, it will increase by one with every file read.
       progressBar1.Step = 1;
    
       // Uses a for loop to iterate through the operations to be
       // completed. In this case, five files are to be copied into memory,
       // so the loop will execute 5 times.
       for (int i = 0; i <= 4; i++)
       {
          // Inserts code to copy a file
          progressBar1.PerformStep();
          // Updates the label to show that a file was read.
          label1.Text = "# of Files Read = " + progressBar1.Value.ToString();
       }
    }
    

    最後,您可以增加進度列的顯示值,如此一來每次增加的數量都是唯一的。在追蹤一系列唯一作業時,例如將不同大小的檔案寫入磁碟,或是以整體百分比測量進度時,這個方法就很有用。

若要以動態值增加進度列

  1. 設定 ProgressBar 控制項的 MinimumMaximum 的值。

  2. 呼叫 Increment 方法,依您指定的整數變更顯示值。

    下列程式碼範例說明進度列如何計算複製作業期間,已經使用的磁碟空間有多少。

    在下列範例中,當每個檔案寫入硬碟時,進度列和標籤會進行更新,以反映可用的硬碟空間量。在這個範例中,您的表單必須有 Label 控制項和 ProgressBar 控制項。

    Public Sub ReadFiles()
       ' Sets the progress bar's minimum value to a number 
       ' representing the hard disk space before the files are read in.
       ' You will most likely have to set this using a system call.
       ' NOTE: The code below is meant to be an example and
       ' will not compile.
       ProgressBar1.Minimum = AvailableDiskSpace()
       ' Sets the progress bar's maximum value to a number 
       ' representing the total hard disk space.
       ' You will most likely have to set this using a system call.
       ' NOTE: The code below is meant to be an example 
       ' and will not compile.
       ProgressBar1.Maximum = TotalDiskSpace()
    
       ' Dimension a counter variable.
       Dim i As Integer
       ' Uses a For...Next loop to iterate through the operations to be
       ' completed. In this case, five files are to be written to the disk,
       ' so it will execute the loop 5 times.
       For i = 1 To 5
          ' Insert code to read a file into memory and update file size.
          ' Increases the progress bar's value based on the size of 
          ' the file currently being written.
          ProgressBar1.Increment(FileSize)
          ' Updates the label to show available drive space.
          Label1.Text = "Current Disk Space Used = " &_ 
          ProgressBar1.Value.ToString()
       Next i
    End Sub
    
    public void readFiles()
    {
       // Sets the progress bar's minimum value to a number 
       // representing the hard disk space before the files are read in.
       // You will most likely have to set this using a system call.
       // NOTE: The code below is meant to be an example and 
       // will not compile.
       progressBar1.Minimum = AvailableDiskSpace();
       // Sets the progress bar's maximum value to a number 
       // representing the total hard disk space.
       // You will most likely have to set this using a system call.
       // NOTE: The code below is meant to be an example 
       // and will not compile.
       progressBar1.Maximum = TotalDiskSpace();
    
       // Uses a for loop to iterate through the operations to be
       // completed. In this case, five files are to be written
       // to the disk, so it will execute the loop 5 times.
       for (int i = 1; i<= 5; i++)
       {
          // Insert code to read a file into memory and update file size.
          // Increases the progress bar's value based on the size of 
          // the file currently being written.
          progressBar1.Increment(FileSize);
          // Updates the label to show available drive space.
          label1.Text = "Current Disk Space Used = " + progressBar1.Value.ToString();
       }
    }
    

請參閱

參考

ProgressBar 控制項概觀 (Windows Form)

ProgressBar

ToolStripProgressBar

其他資源

ProgressBar 控制項 (Windows Form)