The problem is on this line:
elapsed = New TimeSpan(elapsed.Ticks * NumericUpDown4.Value)
You are taking the total number of ticks so far multiplied with the value of the NumericUpDown. This will not take the history of the NumericUpDown into consideration.
What you want to do is store the elapsed number of ticks in a variable that is persistent between the calls to Timer4_Tick
. Then add one to that variable multiplied with the value from the NumericUpDown in your timer callback. You can do that by storing the variable you called elapsed
as an instance variable initialized to zero and use addition rather than multiplication when calculating the new value.