To reproduce:
Me.RadDateTimePicker2.Format = DateTimePickerFormat.Custom
Me.RadDateTimePicker2.CustomFormat = "hh:mm tt"
Select the hours part with the mouse, the selection is affected correctly. Select the minutes part, the selection is affected correctly. Select the AM/PM part, the selection is again affected correctly. Now, try to select again the minutes part. You will notice that the cursor is affected correctly but the selection is missing. Once you select the AM/PM part then the selection is not updated properly with the mouse anymore.
Workaround:
Me.RadDateTimePicker1.DateTimePickerElement.TextBoxElement.Provider = New CustomMaskDateTimeProvider(Me.RadDateTimePicker2.DateTimePickerElement.TextBoxElement.Mask, Me.RadDateTimePicker2.Culture, Me.RadDateTimePicker2.DateTimePickerElement.TextBoxElement)
Public Class CustomMaskDateTimeProvider
Inherits MaskDateTimeProvider
Public Sub New(mask As String, culture As CultureInfo, owner As RadMaskedEditBoxElement)
MyBase.New(mask, culture, owner)
End Sub
Public Overrides Function SelectCurrentItemFromCurrentCaret() As Boolean
Dim currentSelection As Integer = Me.TextBoxItem.SelectionStart
Dim currentPos As Integer = 0
Dim selected As Boolean = False
'If Me.List(Me.SelectedItemIndex).type = PartTypes.AmPm Then
' Return True
'End If
For i As Integer = 0 To Me.List.Count - 1
Dim part As MaskPart = Me.List(i)
If SelectMilliseconds(i, part) Then
Exit For
End If
If currentSelection >= part.offset AndAlso currentSelection <= part.offset + part.len AndAlso Not part.[readOnly] AndAlso part.type <> PartTypes.Character Then
Me.TextBoxItem.SelectionStart = Me.List(i).offset
Me.TextBoxItem.SelectionLength = Me.List(i).len
Me.SelectedItemIndex = i
selected = True
Exit For
End If
currentPos += part.len
Next
Return selected
End Function
Private Function SelectMilliseconds(ByVal i As Integer, ByVal part As MaskPart) As Boolean
If part.type = PartTypes.MiliSeconds AndAlso Me.value.Millisecond Mod 10 = 0 AndAlso part.trimsZeros Then
Dim newLen As Integer = part.len
For power As Integer = 1 To part.len
If Me.value.Millisecond Mod Math.Pow(10, power) = 0 Then
newLen -= 1
Else
Exit For
End If
Next
Me.textBoxItem.SelectionStart = Me.list(i).offset
Me.textBoxItem.SelectionLength = newLen
Me.SelectedItemIndex = i
Return True
End If
Return False
End Function
End Class