根据当前时间更改标签

时间:2018-11-16 21:37:59

标签: c# winforms

你好,我的标签无法随时间更新。 应该在某些时间间隔更改数字。当它是上午7:30-上午8:15时,应该将标签文本更改为“ 1”。

这是负责此操作的代码段:

public void Form1_Load(object sender, EventArgs e)
{
    timer1.Start();
    label2.Text = DateTime.Now.ToLongTimeString();
    label1.Text = DateTime.Now.ToLongDateString();
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;

public void timer1_Tick(object sender, EventArgs e)
{
    int Hour = DateTime.Now.Hour();
    int Minute = DateTime.Now.Minute();
    if (Hour >= 6 && Minute >= 40 && Hour <= 7 && Minute <= 25)
    {
        label5.Text = "0";
    }
    else if (Hour >= 7 && Minute >= 30 && Hour <= 8 && Minute <= 15)
    {
        label5.Text = "1";
    }
    else if (Hour >= 8 && Minute >= 20 && Hour <= 9 && Minute <= 5)
    {
        label5.Text = "2";
    else
    {
        label5.Text = "nothing";
    }
}

2 个答案:

答案 0 :(得分:2)

就像其他人提到的那样,设置您的条件以使它们永远不会成立:分钟不能大于40且小于25。

要按原样修复代码,您需要对条件进行分组,以便比较小时和分钟对,首先对时间和分钟进行评估:

if ((Hour >= 6 && Minute >= 40) && (Hour <= 7 && Minute <= 25))

不过,您可能会考虑使用TimeSpan.Parse方法(或DateTime.Parse方法和TimeOfDay属性)来比较时间,类似于以下内容,我认为这样更具可读性

我将TimeSpan.ParseDateTime.Parse的用法混合使用,以便您了解它们之间的区别。您应该只选择其中一种(尽管必须注意AM / PM是美国文化。如果您打算在其他文化中使用它,则首选TimeSpan + 24小时制) :

public void timer1_Tick(object sender, EventArgs e)
{
    TimeSpan currentTime = DateTime.Now.TimeOfDay;

    if (currentTime >= DateTime.Parse("6:40 AM").TimeOfDay &&
        currentTime <= DateTime.Parse("7:25 AM").TimeOfDay)
    {
        label5.Text = "0";
    }
    else if (currentTime >= TimeSpan.Parse("07:30") &&
             currentTime <= TimeSpan.Parse("08:15"))
    {
        label5.Text = "1";
    }
    else if (currentTime >= TimeSpan.Parse("08:20") &&
             currentTime <= TimeSpan.Parse("09:05"))
    {
        label5.Text = "2";
    }
    else
    {
        label5.Text = "nothing";
    }
}

请注意,如果您使用TimeSpan.Parse,则必须使用24小时制。因此"2:00 PM"将表示为"14:00"。如果您不喜欢这样,请使用DateTime.Parse,然后调用TimeOfDay属性:

// Instead of this
if (currentTime >= TimeSpan.Parse("18:40")

// You could write this
if (currentTime >= DateTime.Parse("6:40 PM").TimeOfDay)

答案 1 :(得分:1)

Your conditions are always false, take this one for instance:

if (Hour >= 6 && Minute >= 40 && Hour <= 7 && Minute <= 25)

Minute >= 40 && Minute <= 25 will always be false as one of them can be true at a time. I think you are looking for something like:

if ((Hour = 6 && Minute >= 40) || (Hour = 7 && Minute <= 25))