Previous | Index | Next 

[PRB] The DTPicker control doesn’t accept dates earlier than 1/1/1753

The VB6 DTPicker control accepts dates as early as 1/1/1601 and as late as 12/31/9999, and in fact these are the default values for the MinDate and MaxDate properties, respectively. Conversely, the .NET DateTimePicker control doesn’t accept dates earlier than 1/1/1753 or later than 12/31/9998. Any attempt to assign dates outside this range to the Value, MinDate or MaxDate properties throws an InvalidOperationException error.

Even if the VB6 application doesn’t work with dates in the 17th century, it might read the MinDate and MaxDate properties to check whether there is a restriction to date selection. In VB6, such a piece of code would read more or less like this:

        ' check whether there is a restriction to date selection
        If DTPicker1.MinDate <> #1/1/1601# Or DTPicker1.MaxDate <> #12/31/9999# Then
            ' ...
        End If

This code can’t work correctly after the migration to VB.NET, because the VB6DTPicker’s MinDate and MaxDate properties are initialized to different values. Therefore the code must be modified as follows:

        ' check whether there is a restriction to date selection
        #If VBC_VER = 8 Then
        If DTPicker1.MinDate <> #1/1/1753# Or DTPicker1.MaxDate <> #12/31/9998# Then
        #Else
        If DTPicker1.MinDate <> #1/1/1601# Or DTPicker1.MaxDate <> #12/31/9999# Then
        #End If
            ' ...
        End If

Another solution is based on the VB6DTPicker_MinDate and VB6DTPicker_MaxDate constants. These constants are defined both in the VBMigrationPartner_Support module and in the control support library, but have different values. You can use these constants to simplify the test as follows:

        ' check whether there is a restriction to date selection
        If DTPicker1.MinDate <> VB6DTPicker_MinDate Or _
            DTPicker1.MaxDate <> VB6DTPicker_MaxDate Then
            ' ...
        End If

 

Previous | Index | Next