2016-05-08 109 views
-3

我想在白天自動在5個特定時間的文本框中顯示一個句子。例如:在 5:30 AM,
Textbox1.text = 「早餐」
上午7:30
textbox1.text = 「離開學校」,
等 定時器可剛開始的時候應用程序已啓動,但它需要引用本地時間或某個恆定時間,因爲程序需要在一週中的每一天的同一時間輸出,而不必手動更改。在白天的指定時間在vb.net中向標籤顯示一條消息

+2

當然,它可以只是一個「計時器」,當應用程序啓動時啓動。當'Timer'引發一個'Tick'事件時'Interval'控制。只需將其設置爲適當的值。如果應用程序從2.37 PM開始,並且需要消息出現5.00 PM,則在2小時23分鐘內將'Interval'設置爲毫秒數。這是簡單的數學。 – jmcilhinney

+0

程序需要自動執行,因此每次打開程序時,更改時間都不會自動進行。無論如何謝謝你 –

+1

你很迷惑「自動」和「魔法」。自動意味着您的代碼無需用戶干預即可完成。如果你編寫代碼來做你想做的事情,那麼你想要的將會自動發生。請參閱下面的答案,以示我在之前的評論中所說的內容。 – jmcilhinney

回答

1

正確的方式做到這一點是這樣的文字:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'Set the interval at startup. 
    Timer1.Interval = CInt(GetNextNotificationTime().Subtract(Date.Now).TotalMilliseconds) 
End Sub 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    'Set the interval at each notification. 
    Timer1.Interval = CInt(GetNextNotificationTime().Subtract(Date.Now).TotalMilliseconds) 

    'Not sure whether this is required when the Interval changes or not. 
    Timer1.Stop() 
    Timer1.Start() 

    'Do the work here. 
End Sub 

Private Function GetNextNotificationTime() As Date 
    '... 
End Function 

如何您實現GetNextNotificationTime方法取決於通知時間如何存儲。只有在通知到期時,Timer纔會有Tick

+0

這應該是被接受的答案。編寫優雅代碼的榮譽。我也認爲這是完全矯枉過正:-) – Jeroen

0

你仍然可以做到這一點與Timer,你不會做任何數學...

每次Timer提出了Tick事件,你檢查的值:System.DateTime.Today.Now.ToString("HH:mm")。如果它等於你預設的時間,更改TextBox

+0

您需要在多線程中編寫上述代碼,因此您的程序可以提供其他功能,並在後臺程序檢查系統時間時使用預定義的時間來顯示消息(如果需要)。 – Ravi

+1

不,你不知道。已啓用的計時器已在其自己的線程上運行。檢查時間和更新標籤的邏輯要麼寫入Timer.Tick事件處理程序,要麼寫在從Ti'mer.Tick處理程序調用的子程序中。 –

+0

是啊@DavidWilson說:-) – Jeroen

相關問題