进度条C#的定时器倒计时

时间:2016-03-23 17:29:08

标签: c# visual-studio timer progress-bar

我想将项目中的进度条与计时器倒计时同步。

这就是我现在所拥有的:

namespace Timer1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private int counter=80;
        DateTime dt = new DateTime();
        private void button1_Click(object sender, EventArgs e)
        {
            int counter = 80;
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Interval = 1000;
            timer1.Start();
            textBox1.Text = counter.ToString();
        }


        private void timer1_Tick(object sender, EventArgs e)
        {
            counter--;
            progressBar1.Increment(1);
            if (counter == 0)
            {
                timer1.Stop();
            }
            textBox1.Text = dt.AddSeconds(counter).ToString("mm:ss");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            textBox1.Clear();
            progressBar1.Value = 0;
        }
    }
}

我希望在计时器结束时完成进度条。

enter image description here

1 个答案:

答案 0 :(得分:1)

通常情况下,您不希望将进度条连接到计时器,而是为了争论和演示......

您需要指定progressBar1以使其.StepMaximum属性与Intervalcounter变量匹配。例如:

    private int counter = 80;
    DateTime dt = new DateTime();
    private void button1_Click(object sender, EventArgs e)
    {
        // The max is the total number of iterations on the 
        // timer tick by the number interval.
        progressBar1.Max = counter * 1000;
        progressBar1.Step = 1000;

        timer1 = new System.Windows.Forms.Timer();
        timer1.Tick += new EventHandler(timer1_Tick);
        timer1.Interval = 1000;
        timer1.Start();
        textBox1.Text = counter.ToString();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        counter--;

        // Perform one step...
        progressBar1.PerformStep();

        if (counter == 0)
        {
            timer1.Stop();
        }
        textBox1.Text = dt.AddSeconds(counter).ToString("mm:ss");
    }