PRB: Error Setting DateTimePicker's Month Programmatically
ID: Q189991
|
The information in this article applies to:
-
Microsoft Visual Basic Professional and Enterprise Editions for Windows, version 6.0
SYMPTOMS
When you try to programmatically set the Month property of a DateTimePicker
control, you receive the following error message:
"Run-time error '380': Invalid property value"
If you use the drop-down Calendar to change the Month for the same date, it
works correctly.
CAUSE
When you change the Month property through the DateTimePicker control's
Calendar interface, it handles adjusting the Day property to create a valid
date. But if you assign a value to the Month property in code and this
creates an invalid date, you receive the appropriate error message.
RESOLUTION
Check to ensure that the combination of the control's current Day and Year,
along with the Month you wish to assign, combine to create a valid date.
Another approach you can take is to use the DateAdd function to change the
value of the Month property of the DateTimePicker control by adding or
subtracting the appropriate number of months. Just like the control's
graphic interface, the DateAdd function will automatically adjust for
differences in the number of days in the various months.
STATUS
This behavior is by design.
MORE INFORMATION
When changing the Month interactively, the DateTimePicker allows for the
fact that some months are shorter than others and adjusts the Day property,
making it smaller if necessary. If the Month is changed programmatically
this interface is bypassed and an invalid date can result. While it is
possible to write code that will check for valid dates and adjust the Day
property when necessary, it is much simpler to use the DateAdd function to
change the date. The following sample demonstrates the problem and a
solution.
Steps to Reproduce Behavior
- Create a new Standard EXE project. Form1 is created by default.
- Select Components from the Project menu, check "Microsoft Windows
Common Controls-2 6.0," and then click OK.
- Place a CommandButton and a DTPicker control onto Form1.
- Place the following code into the module of Form1:
Private Sub Form_Load()
DTPicker1.Value = "1/29/97"
End Sub
Private Sub Command1_Click()
DTPicker1.Month = 2
' Comment the line above and uncomment the line below to test fix
'DTPicker1.Value = DateAdd("m", 1, DTPicker1.Value)
End Sub
- Run the project, note the date is 1/29/97, and click on Command1. You
will see "Run-time error '380': Invalid property value". This is because
2/29/98 is not a valid date.
- Stop the project.
- Comment the Month assignment line, uncomment the line that calls the
DateAdd function and run the project. Click on Command1 and the date
advances one month properly, to 2/28/97.
You can retry this test using dates like 7/31/98 for an initial value
and try to assign a value of 6 to Month. Any value that corresponds to a
Month with fewer than 31 days will generate the error. You can use
positive or negative values in the DateAdd function, so it can subtract
months as easily as it adds them.
Additional query words:
kbDSupport kbDSD kbVBp kbVBp600 kbCtrl
Keywords : kbGrpVB
Version : WINDOWS:6.0
Platform : WINDOWS
Issue type : kbprb