In some cases, the results of the use of the DateTimePicker control can be confused—implicitly initialized. This tip describes what you can do to avoid confusion.
At run time, the control displays the date and time that were:
- Used to explicitly initialize the control
- Current at instantiation time (default initialization)
- Set in the code
- Changed by the user
Solutions for avoiding this situation depend on why you're using the control. The following code snippets demonstrate how these solutions can be implemented:
- If you're using the control for selection, the control displays the initialization value, the users selection, or the result of editing by the user. Explicitly initialize the control:
Me.DateTimePicker1.Value = New Date(2002, 2, 2, 22, 22, 22, 0) - If you're using the control for display, the control's value is updated and is displayed with some frequency. Add a timer to your form that will update the control with frequency of elapsed events:
Friend WithEvents DateTimePicker1 As System.Windows.Forms.DateTimePicker
''The following timer is a suitable one for this example.
Friend WithEvents TimerForDateTimeControl As System.Windows.Forms.Timer
Me.DateTimePicker1.Value = Now
Me.TimerForDateTimeControl.Enabled = True
Me.DateTimePicker1.Enabled = False
Private Sub TimerForDateTimeControl_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TimerForDateTimeControl.Tick
''Update the control's Value property
DateTimePicker1.Value = Now
End Sub - If you're using the control for display and selection, the control's value is updated and is displayed with some frequency. The user may select or edit the value at any time. The new value is displayed until the next selection\editing. Add a timer to your form that will update the control with frequency of elapsed events. Disable the timer as soon as the user edits the control's value at the first time:
Friend WithEvents DateTimePicker1 As System.Windows.Forms.DateTimePicker
Friend WithEvents TimerForDateTimeControl As System.Windows.Forms.Timer
Private dtLastInternallyUpdatedValue As Date
Private valuePropertyIsBeingUpdatedByTimer As Boolean = True
dtLastInternallyUpdatedValue = Now
Me.DateTimePicker1.Value = dtLastInternallyUpdatedValue
Me.TimerForDateTimeControl.Enabled = True
Private Sub TimerForDateTimeControl_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles TimerForDateTimeControl.Tick
''Check if the user did not changed the control's Value property
If DateTimePicker1.Value = dtLastInternallyUpdatedValue Then
''Set this flag to show that the property
''is being updated by the timer,
valuePropertyIsBeingUpdatedByTimer = True
''The control has a value updated by the timer.
''Save the new (current) value for the next check.
dtLastInternallyUpdatedValue = Now
''Update the control's Value property and
''during updating jump to the _ValueChanged event handler ...
DateTimePicker1.Value = dtLastInternallyUpdatedValue
''and return here to continue.
''Reset the flag.
valuePropertyIsBeingUpdatedByTimer = False
Else
''The user edited the Value property.
''Stop the timer after the first user's input.
TimerForDateTimeControl.Enabled = False
End If
End Sub
Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object,_
ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged
If valuePropertyIsBeingUpdatedByTimer Then
''The timer is updating the Value property.
''Just exit.
Else
''The user edited the Value property.
''Stop the timer after the first user's input.
TimerForDateTimeControl.Enabled = False
End If
End Sub
0 comments;Click here for request info on this topic:
Post a Comment