根据当前时间更改Label.Text?

时间:2012-05-10 17:44:40

标签: c# winforms

我如何能够根据当前时间更改标签的Text属性?

谢谢

澄清:

我希望标签的文字在上午10点到下午5点之间阅读,然后在下午5:01到9:59之间阅读。

4 个答案:

答案 0 :(得分:3)

使用Timer。在Timer.Tick处理程序中,使用基于DateTime.Now的简单if / else语句修改标签的Text属性。

答案 1 :(得分:3)

int hour = DateTime.Now.Hour;

if (hour >= 10 && hour < 17) 
    //Open 10:00am through 4:59pm
    LabelStatus.Text = "Open";
else
    //Closed 5:00pm through 9:59am
    LabelStatus.Text = "Closed";

答案 2 :(得分:1)

以下是使用更新标签的单独线程执行此操作的方法。这样线程将在后台运行,并不断检查标签是否处于正确状态。确保在关闭表单时停止线程,方法是使用Thread.Abort()并捕获我认为总是抛出的异常,或者通过在while循环中添加标志作为条件,并降低标志以停止线程。

只要没有其他对象访问标签,就不需要锁定线程的任何部分。

    public delegate void DelLabelText(Label l, string s);
    public DelLabelText delLabelText;

    public Form1()
    {
        InitializeComponent();

        delLabelText = Label_Text;

        // Initialize text
        lblOpenStatus.Text = "Closed";

        // Create and start thread
        Thread threadUpdateLabel = new Thread(UpdateLabel_Threaded);
        threadUpdateLabel.Start();
    }

    // Thread function that constantly checks if the text is correct
    public void UpdateLabel_Threaded()
    {
        while (true)
        {
            Thread.Sleep(5000);

            // 24 hour clock so 17 means 5
            if ((DateTime.Now.Hour >= 10 && DateTime.Now.Hour < 17) || (DateTime.Now.Hour == 17 && DateTime.Now.Minute == 0 && DateTime.Now.Second == 0))
            {
                if (lblOpenStatus.Text.ToLower() == "closed")
                {
                    Label_Text(lblOpenStatus, "Open");
                }
            }
            else
            {
                if (lblOpenStatus.Text.ToLower() == "open")
                {
                    Label_Text(lblOpenStatus, "Closed");
                }
            }
        }
    }

    // Set the text using invoke, because text is changed outside of main thread
    public void Label_Text(Label label, string text)
    {
        if (label.InvokeRequired)
        {
            label.Invoke(delLabelText, new object[] { label, text });
        }
        else
        {
            label.Text = text;
        }
    }

答案 3 :(得分:0)

在表单中添加一个计时器,并将其间隔设置为1000毫秒..

声明一个不可见的TextBox,其中每个Tick上的Timer更新了当前时间的毫秒数。

现在在Textbox的TextBox.TextChanged事件中添加一个函数来将毫秒转换为时间......

Next Method添加一个Timer并将间隔设置为1 ms ...

从那里更新时间..

Next Method,添加一个BackgroundWorker并将其用作Timer来更新Time ...

如果您发现上述任何方法都有用...评论和我将发布代码! :)