Set start time of Timer Interval - vb.net

how do i set the starting time of the time interval, let's say i would like to start the 5 sec interval counting after 10 seconds. I'm having a problem with my logic can you help me with this? this is my code:
This is my timer in my Form1
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
If DateTime.Now = Form3.DateTimePicker1.Value Then
Timer2.Stop()
MsgBox("hey")
Timer2.Start()
End If
This is the OK button in my Form3
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Form1.Timer2.Interval = New TimeSpan(CInt(NumericUpDown3.Value), CInt(NumericUpDown2.Value), CInt(NumericUpDown1.Value)).TotalMilliseconds
Form1.Timer2.Start()
End If
It seems to work successfully with the intervals without setting the start of the interval, But if i add the start time of the interval, it doesn't seem to work. with this code If DateTime.Now = Form3.DateTimePicker1.Value Then what could be wrong?

This seems to be bad idea:
If DateTime.Now = Form3.DateTimePicker1.Value Then
Because it is extremely hard for you to catch the time exactly as you specify. Simply change = to >=
If DateTime.Now >= Form3.DateTimePicker1.Value Then
Then when you reach the time or later, you would show your message box.

Related

How to use Datediff of time in vb.net? From Starting time to Ending time

I need to know the value of time. I mean the interval of time; from starting time to ending time. Anyone can help? :(
This is my list and I want to get the interval value of time.
When I select the item/record in the Datagridview2 it will displayed here
Can somebody share an idea/or code? Thanks
To achieve something like this, you need the TimeSpan data type.
In my example, a variable is written with the current time at the beginning of the runtime.
A timer regularly calculates the new time span between time 1 and the current time, and outputs this time span in a text box.
Also, I use CultureInfo (I always do, don't be surprised) and I use PadLeft to have leading zeros. Looks nicer.
Public Class FormMain
Private ReadOnly Starttime As Date = Date.Now
Private ReadOnly Deu As New System.Globalization.CultureInfo("de-DE")
Private Sub FormMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Timer1.Start()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Dim TS As TimeSpan = Date.Now - Starttime
TextBox1.Text = TS.Minutes.ToString(Deu).PadLeft(2, "0"c) & ":" & TS.Seconds.ToString(Deu).PadLeft(2, "0"c)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Timer1.Stop()
End Sub
End Class

Displaying date and time in the UI

My program displays the current date and time and must be accurate, and I need to prevent users from changing the time. Here's what I tried.
On form load I query the current date and time of the server and change the local system time to what I got.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cmd = New SqlCommand("Select getdate()", con)
serverdatetime = cmd.ExecuteScalar
Microsoft.VisualBasic.TimeOfDay = serverdatetime
Microsoft.VisualBasic.DateAndTime.Today = serverdatetime
TimeKeeper.Start()
End Sub
Now I tried 2 ways of displaying the time, the first one, since I adjusted the system time to what I got from the server, I just get my time from the local system. But the time on my program can easily be changed by changing the system time.
Private Sub TimeKeeper_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimeKeeper.Tick
lblDate.Text = DateTime.Now.Date()
lblTime.Text = DateTime.Now().ToString("HH:mm:ss")
End SUb
Second thing, I just take the time I got from the server and increment it every second.
Private Sub TimeKeeper_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimeKeeper.Tick
serverdatetime = serverdatetime.AddSeconds(1)
lblDate.Text = serverdatetime.Date()
lblTime.Text = serverdatetime.ToString("HH:mm:ss")
End SUb
I thought it worked great except it seems to get delayed once I do some operations in the system(I guess because some other code is running, my timer doesn't execute its code) and the more I do the more it gets delayed, after a few testing of the program the server time was already 10 seconds ahead of the time I have in my program.
So, how can I achieve what I need?
You cannot rely on Tick event of the Timer. I would use the StopWatch class to get duration passed (since when server time is read) independent from the system time adjustments.
Dim stopWatch As StopWatch = new StopWatch()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cmd = New SqlCommand("Select getdate()", con)
serverdatetime = cmd.ExecuteScalar
stopWatch.Start()
TimeKeeper.Start()
End Sub
Private Sub TimeKeeper_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimeKeeper.Tick
Dim currentDate As DateTime = serverdatetime.Add(stopWatch.Elapsed)
lblDate.Text = currentDate.Date()
lblTime.Text = currentDate.ToString("HH:mm:ss")
End SUb

VB.NET How to Add TimeSpan for Timer Inteval

This is the scenario, I have three NumericUpDown for the values of second, minute and hour, And if a number is entered in the NumericUpDown i.e. 5, it will be converted to 5000 ms so my Timer can read it as 5 seconds. I'm trying to make a scheduler for every interval and this is my code:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Label13.Text = TimeSpan.FromSeconds(Form3.NumericUpDown1.Text).TotalMilliseconds
Label14.Text = TimeSpan.FromMinutes(Form3.NumericUpDown2.Text).TotalSeconds
Label15.Text = TimeSpan.FromHours(Form3.NumericUpDown3.Text).TotalMinutes
Dim times() As String = {Label13.Text, Label14.Text, Label15.Text}
For Each time In times
Dim interval As TimeSpan = TimeSpan.Parse(time)
Timer1.Interval = interval
MsgBox("hey")
Next
End Sub
And it has an error at Timer1.Interval = interval that says Timespan cannot be converted to Integer, and i can't think of any way to fix this, can you help me out? TIA~!
Try This
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Timer1.Stop()
Timer1.Interval = New TimeSpan(0, 0, CInt(nudMinutes.Value), CInt(nudSeconds.Value), CInt(nudMilliseconds.Value)).TotalMilliseconds
Timer1.Start()
End Sub
Here are some ideas to get you past your current error.
Dim tsTest As TimeSpan = TimeSpan.FromSeconds(NumericUpDownTest.Value)
Label1.Text = tsTest.TotalSeconds.ToString("n0")
Timer1.Interval = CInt(tsTest.TotalMilliseconds)
Start with just doing seconds and when that code works see if you can add the others.

Use timer to trigger an event in program at specific time

I have my timer code displaying the time correctly on my program, and I want to trigger an event to happen at a 6:31. How do I get the program to preform a button click or trigger the event that the button handles. The program works when I run and press the button, but I want it to happen automatically at 6.31 without me pressing it. Thanks!
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
Label1.Text = Date.Now.ToString("hh:mm:ss")
End Sub
In your Tick event:
Dim now As DateTime = DateTime.Now
If (18 = now.Hour) AndAlso (31 = now.Minute) Then
' Change 18 to 6 is you want AM instead of PM
' Do something here
End If
This is the naive version. Your question is lacking in details so I did not elaborate on the code.
At a minimum you may need to ensure that once the "event" happens it can't happen again.

Getting Current time to display in Label. VB.net

I'm trying to build a Break tracker for work and I would like to get a button to display the Current Time in a label. I have tried multiple solutions and this is how far I have gotten.
Sub AddButtonClick(sender As Object, e As EventArgs)
Dim Start as Integer
System.DateTime.Now = Start
total.Text = Start
End Sub
When I do this, I get the error that Property 'Now' is read only.
There are several problems here:
Your assignment is the wrong way round; you're trying to assign a value to DateTime.Now instead of Start
DateTime.Now is a value of type DateTime, not Integer, so the assignment wouldn't work anyway
There's no need to have the Start variable anyway; it's doing no good
total.Text is a property of type String - not DateTime or Integer
(Some of these would only show up at execution time unless you have Option Strict on, which you really should.)
You should use:
total.Text = DateTime.Now.ToString()
... possibly specifying a culture and/or format specifier if you want the result in a particular format.
Try This.....
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Label12.Text = TimeOfDay.ToString("h:mm:ss tt")
End Sub
try
total.Text = DateTime.Now.ToString()
or
Dim theDate As DateTime = System.DateTime.Now
total.Text = theDate.ToString()
You declare Start as an Integer, while you are trying to put a DateTime in it, which is not possible.
Use Date.Now instead of DateTime.Now