【问题标题】:ProgressBar doesn't fill as its widthProgressBar 没有填满它的宽度
【发布时间】:2015-06-21 04:32:45
【问题描述】:

C# Winforms 中,我有一个BackgroundWorker backgroundWorker1ProgressBar progressBar1ProgressBar 的属性是:Min =0, Max =100, Step=1, Value = 0 Size-W-508, H=23。 在我的DoWork()中,我以这种方式调用ReportProgress(70, "Transferring")

ProgressChanged()

    string status = (string)e.UserState;
    progressBar1.Value = e.ProgressPercentage;
    progressBar1.Refresh();

ProgressBar 正在改变,它的值也在改变。我还跟踪progressBar1.Value 并显示正确的结果。

但是当70过了,设置为ProgressPercent,那为什么progressBar1width的70%没有被覆盖。即使超过 100,progressbasr 的全宽也不会被覆盖。我尝试将 ProgressBar 的 Max 设置为 508(即 ProgressBar 的宽度),但这也没有用。

我浏览了许多网站,但没有发现任何此类问题。 你能指出我哪里错了吗?非常感谢任何帮助。

谢谢

【问题讨论】:

  • 尝试将您的 Step 更改为 1。
  • 也试过了。现在只有1个。但结果相同。

标签: c# winforms progress-bar backgroundworker


【解决方案1】:

在尝试了越来越多之后,又尝试了一件确定不会有任何影响的事情;但它奏效了。

在调用backgroundWorker1.RunWorkerAsync();之前添加以下代码:

            if (backgroundWorker1.IsBusy != true)
        {
            progressBar1.Value = 0;
            progressBar1.Step = 1;
            progressBar1.Minimum = 0;
            progressBar1.Maximum = 100;

            transferFileType = 'R';
            connecting = true;
            statusBarLbl.Text = "Processing.....Transferring Report Files to PC ";
            progressStatusLbl.Text = "Retrieving Device Id and Info";
            // Start the asynchronous operation
            backgroundWorker1.RunWorkerAsync();
        }

它按我的意愿工作。其余所有代码都相同。刚刚添加了进度条的上述4个属性。

令人惊讶的是,ProgressBar 已经设置了相同的属性,而且它甚至是第一次使用,但在访问它之前需要设置它的属性才能工作!!!!

希望它可以帮助某人。

谢谢

【讨论】: