0

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

谢谢

澄清:

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

4

4 回答 4

3

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

于 2012-05-10T17:57:04.910 回答
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";
于 2012-05-10T18:06:05.887 回答
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;
        }
    }
于 2012-05-10T20:36:25.410 回答
0

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

声明一个不可见的 TextBox,其当前时间的毫秒数由 Timer on Every Tick 更新..

现在在文本框的 TextBox.TextChanged 事件上添加一个函数以将毫秒转换为时间...

下一个方法是添加一个计时器并将间隔设置为 1 毫秒...

从那里更新时间..

下一个方法,正在添加一个 BackgroundWorker 并将其用作 Timer 来更新时间......

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

于 2012-05-10T17:55:17.780 回答