2012-05-10 74 views
0

我怎麼能夠根據當前時間更改標籤的Text屬性?基於當前時間更改Label.Text?

謝謝

澄清:

我想一個標籤的文本,以上午10點至下午5點之間,然後打開讀取下午5:01之間讀封閉上午9時59分。

+0

什麼問題的人? – Adil

+0

嚴,檢查時間,如果它看起來像你想要的,更改label.text屬性。的 –

+0

可能重複[如何顯示更新時間,系統時間使用C#的標籤上?(http://stackoverflow.com/questions/5025840/how-to-display-updated-time-as-system-time-on -a-標籤使用-C) –

回答

0

現在加入一個計時器,你的形式和時間間隔設置爲1000毫秒..

聲明具有當前時刻計時器上的每一個滴答更新毫秒一個無形的文本框..

上文本框的TextBox.TextChanged事件從那裏添加一個功能轉換的毫秒時間...

下一個方法是添加一個定時器和間隔設置爲1毫秒...

更新時間..

下一個方法是添加一個BackgroundWorker並使用它作爲一個定時器來更新時間...

如果您發現任何有用的上述方法...評論,我會後的代碼! :)

+0

這個答案需要一些工作,思維過程是所有的地方,代碼將使其更好。 –

+0

@Ramhound的【答案在這裏(http://stackoverflow.com/a/10541756/1118933)告訴一切,但如果線程與定時更換,這將更好地工作。 – Writwick

3

使用Timer。在Timer.Tick處理程序中,使用基於DateTime.Now的簡單if/else語句修改標籤的Text屬性。

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"; 
+0

您需要詳細瞭解如何使用此代碼。這不符合作者的要求。他希望標誌在下午5點開放,而不是下午4:59開放,這是有區別的。 –

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; 
     } 
    } 
+2

大量的工作進入了這個答案,但它確實爲處理器提供了時間(真),並且是編程的熊。這裏每1000毫秒運行一個簡單的Timer對象並檢查當前時間就足夠了。 – MrWuf

+0

增加了一個Thread.sleep代碼,但在閱讀您的評論後,我不同意,定時器可能是要走的路。 –