To reproduce:
Me.RadDateTimePicker1.Format = DateTimePickerFormat.Custom
Me.RadDateTimePicker1.CustomFormat = "MM/dd/yyyy"
Dim provider As MaskDateTimeProvider = TryCast(Me.RadDateTimePicker1.DateTimePickerElement.TextBoxElement.Provider, MaskDateTimeProvider)
provider.AutoSelectNextPart = True
If you type in 01/01/50, RadDateTimePicker displays 01/01/1950 which is correct. If you type in 01/01/2050, the system is again changing the century and display 01/01/1950 which is incorrect.
Workaround: use a custom mask provider to customize how the autocompletion work:
Public Class CustomMaskDateTimeProvider
Inherits Telerik.WinControls.UI.MaskDateTimeProvider
Public Sub New(mask As String, culture As CultureInfo, owner As RadMaskedEditBoxElement)
MyBase.New(mask, culture, owner)
End Sub
Protected Overrides Function HandleKeyPress(part As MaskPart, e As KeyPressEventArgs) As Boolean
Dim value As Integer = 0
If Not Integer.TryParse(e.KeyChar.ToString(), value) Then
Return True
End If
Dim stringValue As String = String.Empty
If part.type = PartTypes.MiliSeconds Then
Dim newValue As Integer = CInt((part.value / Math.Pow(10, (3 - part.len)))) * 10 + value
part.value = newValue Mod CInt(Math.Pow(10, part.len))
Else
stringValue = part.value.ToString()
If stringValue.Length = part.len AndAlso stringValue.Length >= part.maskPart.Length Then
stringValue = stringValue.Substring(1)
End If
If Me.AutoCompleteYear AndAlso stringValue.Length = 1 Then
stringValue = String.Empty
End If
part.value = Integer.Parse(stringValue & e.KeyChar)
End If
If part.type = PartTypes.Year AndAlso part.maskPart.Length = 2 Then
Dim len As Integer = part.value.ToString().Length
part.value = Integer.Parse(String.Format("{0}{1}", DateTime.Now.Year.ToString().Substring(0, 2), part.value.ToString().Substring(len - 2, 2)))
End If
If Me.AutoCompleteYear AndAlso part.type = PartTypes.Year Then
Dim len As Integer = part.value.ToString().Length
If len >= 2 Then
part.value = Integer.Parse(part.value.ToString().Substring(len - 2, 2))
End If
'If part.value >= 50 AndAlso part.value <= 99 Then
' part.value += 1900
'ElseIf part.value >= 500 AndAlso part.value <= 999 Then
' part.value += 1000
'ElseIf part.value < 50 OrElse (part.value > 99 AndAlso part.value < 500) Then
part.value += 2000
' End If
End If
If part.value > part.max OrElse part.value < part.min Then
part.value = value
End If
Return True
End Function
End Class
Me.RadDateTimePicker1.Format = DateTimePickerFormat.Custom
Me.RadDateTimePicker1.CustomFormat = "MM/dd/yyyy"
Me.RadDateTimePicker1.DateTimePickerElement.TextBoxElement.Provider = New CustomMaskDateTimeProvider(Me.RadDateTimePicker1.DateTimePickerElement.TextBoxElement.Mask, Me.RadDateTimePicker1.Culture, Me.RadDateTimePicker1.DateTimePickerElement.TextBoxElement)
Dim provider As MaskDateTimeProvider = TryCast(Me.RadDateTimePicker1.DateTimePickerElement.TextBoxElement.Provider, MaskDateTimeProvider)
provider.MaxDate = Me.RadDateTimePicker1.DateTimePickerElement.MaxDate
provider.AutoSelectNextPart = True
provider.AutoCompleteYear = True
Thus, the year always be 2000+.