如果我单击按钮,计时器将计数而不是下来,我怎么能这样做?

时间:2014-05-23 12:11:09

标签: c# winforms

如果我点击按钮,该标志将为true,并且在timer1 tick事件中,它将改变计数并计数。如果我再次点击相同的按钮,它将倒计时。没有重置计时器只是为了保持从点数上升或下降取决于标志。如果为True,它应该计数,如果为false,它应该倒计时。 (该表单顶部的标志设置为false)。

现在它的方式只是倒数(下)。

这是timer1 tick事件:

private void timer1_Tick(object sender, EventArgs e)
        {
            if (hours == 0 && mins == 0 && secs == 0)
            {
                timer1.Stop();
                MessageBox.Show(new Form() { TopMost = true }, "Times up!!! :P", "Will you press OK? :P", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox1.Text = "00";
                textBox2.Text = "00";
                textBox3.Text = "00";
                textBox3.Enabled = true;
                textBox2.Enabled = true;
                textBox1.Enabled = true;
                button1.Enabled = true;
                lblHr.Text = "00";
                lblMin.Text = "00";
                lblSec.Text = "00";
                button2.Enabled = false;
                button3.Enabled = false;
            }
            else
            {
                if (secs < 1)
                {
                    secs = 59;
                    if (mins < 1)
                    {
                        mins = 59;
                        if (hours != 0)0
                            hours -= 1;
                    }
                    else mins -= 1;

                }
                else secs -= 1;
                if (hours > 9)
                    lblHr.Text = hours.ToString();
                else lblHr.Text = "0" + hours.ToString();
                if (mins > 9)
                    lblMin.Text = mins.ToString();
                else lblMin.Text = "0" + mins.ToString();
                if (secs > 9)
                    lblSec.Text = secs.ToString();
                else lblSec.Text = "0" + secs.ToString();
            }
        }

private void button4_Click(object sender, EventArgs e)
        {
            count_up_down = true;
        }

2 个答案:

答案 0 :(得分:4)

首先,将时间表示从小时,分钟和秒更改为普通seconds。通过将秒数除以60和3600来设置标签中的文本,如下所示:

int hours = totalSeconds / 3600;
int minutes = totalSeconds / 60;
int seconds = totalSeconds % 60;

添加一个名为step的整数实例变量,并将其设置为负1

private int step = -1;

点击按钮,更改step变量的符号:

step = -step;

现在您需要做的就是将代码更改为使用totalSeconds += step而不是xyz -= 1 - 而且您已完成了!

答案 1 :(得分:0)

    DateTime start = DateTime.MinValue;
    TimeSpan oldTime = TimeSpan.Parse("00:00:00");
    tm = new Timer();
    tm.Tick += new EventHandler(tm_Tick);

 void tm_Tick(object sender, EventArgs e)
            {
                TimeSpan runTime = DateTime.Now - start;
                lblTimer.Text = string.Format("{1:D2}:{2:D2}:{3:D2}",
                                                runTime.Days,
                                                runTime.Hours,
                                                runTime.Minutes,
                                                runTime.Seconds);

            }

希望上面的代码可以帮到你。