0

我已经开始了 c# 课程,但我无法让我的计时器运行。它可能很简单,我只是在这里错过了一些东西。基本上我有一个按钮来启动和停止红绿灯序列。我想要1秒的间隔。这是我写的。当我按下开始时,它没有按预期工作。谢谢你。

 }
    public int counter = 0;

private void rbStart_CheckedChanged(object sender, EventArgs e)
{

    counter++;

    if (counter == 1)
    {
        pbRed.Visible = true;
        pbAmber.Visible = false;
        pbGreen.Visible = false;
    }
    else if (counter == 2)
    {
        pbRed.Visible = true;
        pbAmber.Visible = true;
        pbGreen.Visible = false;
    }
    else if (counter == 3)
    {
        pbRed.Visible = false;
        pbAmber.Visible = false;
        pbGreen.Visible = true;
    }
    else if (counter == 4)
    {
        pbRed.Visible = false;
        pbAmber.Visible = true;
        pbGreen.Visible = false;
    }
    else if (counter == 5)
    {
        pbRed.Visible = true;
        pbAmber.Visible = false;
        pbGreen.Visible = false;
    }
    else
    {
        counter = 0;
    }
}

private void rbStop_CheckedChanged(object sender, EventArgs e)
{

    pbRed.Visible = false;
    pbAmber.Visible = false;
    pbGreen.Visible = false;
}

private void Form1_Load(object sender, EventArgs e)
{
    Light_timer.Tick += new EventHandler(rbStart_CheckedChanged);
    Light_timer.Interval = 1000;

}

}

4

2 回答 2

0

Interval 属性仅指定 Tick 事件之间经过的时间。您可能需要考虑一个单独的变量来跟踪灯的“状态”,然后在事件处理程序中使用每个“Tick”来“碰撞”该变量。然后只需调整您的 UI 元素以反映交通灯的正确状态。你可能有一个“停止”状态、一个“小心”状态和一个“绿色”状态,你的灯可能只是在每个滴答声之间“循环”。我会让你写细节,因为它似乎是一项任务。祝你好运。

于 2012-10-05T23:06:07.553 回答
0

我认为您可能误解了 Timer 的工作原理。Timer.Tick事件在 Interval 已过时触发。Timer 使用间隔来确定在滴答之间运行多长时间。它的值永远不会被定时器改变。实际上,System.Windows.Forms.Timer 无法检索经过的时间,这意味着您需要自己的不依赖于它的状态跟踪机制。好好看看我上面引用的页面上的例子,确保你理解它是如何工作的,然后再试一次。

于 2012-10-05T23:17:55.997 回答