Правильный ответ - использовать DateTimePicker, но если вам действительно нужно использовать комбинированные списки, должно работать следующее:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FillCombo(1959, 61, ComboBox1) 'Year combo
FillCombo(1, 12, ComboBox2) ' Month combo
End Sub
Private Sub FillCombo(StartNumber As Integer, NumberOfItems As Integer, c As ComboBox)
'Enumerable.Range(starNumber, number of items)
Dim items As Integer() = Enumerable.Range(StartNumber, NumberOfItems).ToArray
Dim strItems As String()
'.AddRange takes an array of objects and will not covert a value type to a reference type
'Therefore the conversion to an array of String which is a reference type
If c.Name = "ComboBox2" Then
'This is an example of lambda expresions used with Linq
strItems = items.Select(Function(month) CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(month)).ToArray
Else
strItems = items.Select(Function(yr) CStr(yr)).ToArray()
End If
c.Items.AddRange(strItems)
End Sub
Private Sub ComboBox2_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox2.SelectionChangeCommitted
Dim NumberOfDays As Integer
Select Case ComboBox2.SelectedItem.ToString
Case "September", "April", "June", "November"
NumberOfDays = 30
Case "January", "March", "May", "July", "August", "October", "December"
NumberOfDays = 31
Case "February"
If DateTime.IsLeapYear(CInt(ComboBox1.Text)) Then
NumberOfDays = 29
Else
NumberOfDays = 28
End If
End Select
FillCombo(1, NumberOfDays, ComboBox3)
End Sub
Private Sub ComboBox3_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox3.SelectionChangeCommitted
Dim dateString = $"{ComboBox2.Text} {ComboBox3.SelectedItem}, {ComboBox1.Text}"
Label1.Text = dateString
End Sub