如何根据当前时间更改标签的 Text 属性?
谢谢
澄清:
我希望标签的文本在上午 10 点到下午 5 点之间阅读,然后在下午 5:01 到上午 9:59 之间阅读关闭。
使用计时器。在 Timer.Tick 处理程序中,使用基于 DateTime.Now 的简单 if/else 语句修改标签的 Text 属性。
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";
下面是一种使用更新标签的单独线程来执行此操作的方法。这样线程将在后台运行,并不断检查标签是否处于正确状态。确保在关闭表单时停止线程,或者通过使用 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;
}
}
在表单中添加一个计时器并将其间隔设置为 1000 毫秒。
声明一个不可见的 TextBox,其当前时间的毫秒数由 Timer on Every Tick 更新..
现在在文本框的 TextBox.TextChanged 事件上添加一个函数以将毫秒转换为时间...
下一个方法是添加一个计时器并将间隔设置为 1 毫秒...
从那里更新时间..
下一个方法,正在添加一个 BackgroundWorker 并将其用作 Timer 来更新时间......
如果您发现上述任何方法有用...评论,我会发布代码!:)