我如何能够根据当前时间更改标签的Text属性?
谢谢
澄清:
我希望标签的文字在上午10点到下午5点之间阅读,然后在下午5:01到9:59之间阅读。
答案 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 ...
如果您发现上述任何方法都有用...评论和我将发布代码! :)