如何设置进度条的值

时间:2012-11-18 12:32:01

标签: c# winforms progress-bar

我使用C#Winforms编写了一个用户控件。在用户控件中,我有三个文本框:

  • txtStartNumber - 输入的类型为:int。
  • txtEndNumber - 输入的类型为:int。
  • txtQuantity - iput的类型为:int。 (value = txtEndNumber - txtStartNumber)

进度条表示编号。添加到数据库的记录及其总范围设置为等于txtQuantity。

当一个或多个记录重复时,进度条会停止。

我的问题是:

  1. 如何设置进度条的初始值?
  2. 如何管理进度条显示的进度?
  3. 我如何将其保存到数据库中:

    for (long i = from; i < to; i++)
    {
        for (int j = 0; j < (to - from); j++)
        {
            arrCardNum[j] = from + j;
            string r = arrCardNum[j].ToString();
            try
            {
                sp.SaveCards(r, 2, card_Type_ID, SaveDate, 2);
                progressBar1.Value = j;
            }
        }
    }
    

3 个答案:

答案 0 :(得分:8)

试试这个:

private void StartBackgroundWork() {
    if (Application.RenderWithVisualStyles)
        progressBar.Style = ProgressBarStyle.Marquee;
    else {
        progressBar.Style = ProgressBarStyle.Continuous;
        progressBar.Maximum = 100;
        progressBar.Value = 0;
        timer.Enabled = true;
    }
    backgroundWorker.RunWorkerAsync();
}

private void timer_Tick(object sender, EventArgs e) {
    progressBar.Value += 5;
    if (progressBar.Value > 120)
        progressBar.Value = 0;
}

Marquee样式需要启用VisualStyles,但它会不断滚动,无需更新。我将其用于不报告其进度的数据库操作。

这是另一个Progress Bar Tutorial

答案 1 :(得分:0)

您无法使用循环来执行此操作。在for,while,do ... while循环或定时器中运行代码之间存在差异。在循环中代码立即完成,您无法在计时器中看到这一点。即使您尝试在计数器中放入循环,它也不会起作用:

for(int i=a;i<b;++i)
{
    if (cnt < 1000000)
    {
        IncrProgressBar();
        cnt++;
    }
    else
    {
        cnt = 0;
    }
}

如果要使用进度条执行此操作,则必须输入将数据添加到数据库的计时器OnTick事件代码,并在此事件中增加进度条值。它与更改表单组件的其他属性(Text,Size,...)类似。如果要查看组件的更改,则必须使用计时器。

答案 2 :(得分:0)

要更改值,请使用:

private void timer1_Tick(object sender, EventArgs e)
    {
        progressBar2.Value = progressBar2.Value - 15;
    }

在C#中