如何:设置 Windows 窗体 ProgressBar 控件显示的值

重要

ToolStripProgressBar 控件取代了 ProgressBar 控件并添加了功能;但是,可以选择保留 ProgressBar 控件以实现向后兼容并供将来使用。

.NET Framework 提供了几种不同的方式来显示 ProgressBar 控件中的给定值。 选择哪种方法将取决于手头的任务或要解决的问题。 下表显示可以选择的方法。

方法 说明
直接设置 ProgressBar 控件的值。 对于知道将涉及的测量项总数的任务(例如从数据源读取记录),此方法会很有用。 此外,如果只需设置一次或两次值,使用这种方法会很简单。 最后,如果需要减小进度条显示的值,请使用此过程。
ProgressBar 显示增加一个固定值。 如果要显示最小值和最大值之间的简单计数(例如运行时间或已知总数中已处理的文件数),此方法很有用。
ProgressBar 显示增加一个不同的值。 如果需要以不同的数量多次更改显示的值,此方法很有用。 例如,显示在将一系列文件写入磁盘时消耗的硬盘空间量。

设置进度条显示的值的最直接方法是设置 Value 属性。 可以在设计时或运行时执行此操作。

直接设置 ProgressBar 值

  1. 设置 ProgressBar 控件的 MinimumMaximum 值。

  2. 在代码中,将控件的 Value 属性设置为已建立的最小值和最大值之间的整数值。

    注意

    如果将 Value 属性设置在 MinimumMaximum 属性建立的边界之外,则控件将引发 ArgumentException 异常。

    下面的代码示例说明了如何直接设置 ProgressBar 值。 代码从数据源读取记录,并在每次读取数据记录时更新进度条和标签。 此示例要求窗体具有一个 Label 控件、一个 ProgressBar 控件和一个数据表,数据包中应包含一个名为 CustomerRow 的行以及 FirstNameLastName 字段。

    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();  
       }  
    }  
    

另请参阅