【发布时间】:2020-02-04 23:16:57
【问题描述】:
错误提示:
InvalidArgument=“6”的值对“SelectedIndex”无效 参数名称:SelectedIndex
我不知道那是什么意思。这是我的项目,这是我第一次在 ComboBox 上尝试这个日期。
Private intDaysInMonth(11) As Integer
Private Sub cmbMonth_Click()
cmbDay.Items.Clear()
Call PopulateDays()
End Sub
Private Function IsLeapYear(ByVal intYear As Integer) As Boolean
IsLeapYear = IsDate("29/02/" & intYear)
End Function
Private Sub PopulateDays()
If cmbMonth.SelectedIndex = -1 Then
If IsLeapYear(cmbYear.Text) Then
intDaysInMonth(1) = 29
Else
intDaysInMonth(1) = 28
End If
End If
For intI = 1 To intDaysInMonth(cmbMonth.SelectedIndex)
cmbDay.Items.Add(CStr(intI))
Next intI
End Sub
Private Sub cmbYear_Click()
Call PopulateDays()
End Sub
Private Sub Form_Load()
Dim intI As Integer
cmbDay.Items.Clear()
cmbMonth.Items.Clear()
cmbYear.Items.Clear()
For intI = 0 To 11
intDaysInMonth(intI) = 31
cmbMonth.Items.Add(Format(CDate("01/" & intI + 1 & "/2011"), "mmmm"))
Next intI
intDaysInMonth(1) = 28
intDaysInMonth(3) = 30
intDaysInMonth(5) = 30
intDaysInMonth(8) = 30
intDaysInMonth(10) = 30
For intI = 1959 To 2019
cmbYear.Items.Add(CStr(intI))
Next intI
cmbMonth.SelectedIndex = Format(Now, "MM") - 1
cmbYear.SelectedIndex = Format(Now, "yyyy") - 1959
cmbDay.SelectedIndex = Format(Now, "dd") - 1
End Sub
预期的输出必须在 ComboBox 中显示月/日/年,但是当程序运行时它显示 ArgumentOutOfRangeException 未处理。
【问题讨论】:
-
您是否可以在
cmbDay.SelectedIndex填充到PopulateDays之前设置它?如果cmbDay中没有任何内容,则SelectedIndex为6 将无效。您可以在cmbMonth_Click中设置SelectedIndex。仅供参考,点击事件可能不是最好的(例如,如果有人使用键盘)。还有其他事件,例如SelectedIndexChanged或SelectionChangeCommitted,可能会更好。 -
另外,你必须使用组合框吗? DateTimePicker 更适合从用户那里获取日期。
-
哪一行会报错? DateTime 内置了一个静态 IsLeapYear 函数。
-
@JeffBridgman,
SelectionChangeCommitted仅在用户进行选择时引发,因此在这种情况下需要SelectedIndexChanged。 -
该代码看起来像是用 VB6 编写的。您可以在 VB.NET 中对其进行许多改进。例如,当
Date具有与Integer相同部分的属性时,将Date的一部分格式化为String是愚蠢的。您似乎还试图在没有Handles子句的情况下处理 Click 事件(这是错误的事件开始)。我猜你复制了网络代码,但并没有真正理解它的作用。
标签: vb.net winforms visual-studio-2010