这是我第一次在Stack Overflow中提问:)
我有一个程序,允许用户在组合框中选择一个日期并将其显示在标签上。这段代码的其他部分都很好,但是我不能在有特殊日子的月份中例外(例如2月,leap年只有29天)。 我尝试使用If / Else语句,以便当用户单击年份2016、2012、2008和2004年2月时,它将显示在名为“天” 1到29的组合框中,并且如果用户单击2月但未指定日期,将显示1到28:
If month.SelectedItem = "Feb" And year.SelectedItem = "2016" Or "2012" Or "2008" Or "2004" Then
Dim jkl As Integer
For jkl = 1 To 29
day.Items.Add(jkl)
Next
ElseIf month.SelectedItem = "Feb" Then
Dim poi As Integer
For poi = 1 To 28
day.Items.Add("poi")
Next
End If
但是不幸的是,当我调试它时,当我选择第一个If语句中指定的日期以外的日期时,名为day的组合框仅显示29而不是28。我尝试更改条件的顺序,更改数字的分隔符改为“&”,但仍然相同。
我希望有人对此深究。我觉得它在我的结构中是错误的,但是即使我每次都更改顺序并且它仍然显示相同的错误。 我尝试在这里搜索,但找不到与我的病情相近的病。
答案 0 :(得分:4)
严格启用选项,它将帮助您立即检测到这些错误。 VB不会处理这样的If语句,您编写的内容不会执行您认为的操作。您每次都需要指定双方。
If month.SelectedItem = "Feb" And (year.SelectedItem = "2016" Or year.SelectedItem = "2012" Or year.SelectedItem = "2008" Or year.SelectedItem = "2004") Then
关于您的逻辑,there are formula to detect leap day。最好改用它。
最后,在结尾处添加字符串,而不是变量值。
day.Items.Add(poi)
答案 1 :(得分:4)
我认为您应该在此处使用DateTime函数:
DateTime.DaysInMonth(year, month)
Dim dateString As String = String.Format("{0} 1 2001", month.SelectedItem)
Dim dDate As Date = DateTime.Parse(dateString)
Dim numberOfMonth As Integer = DateAndTime.Month(dDate)
For jkl = 1 To DateTime.DaysInMonth(numberOfMonth, year.SelectedItem)
day.Items.Add(jkl)
Next
答案 2 :(得分:-1)
就我个人而言,我会创建一个嵌套的If
if month.SelectedItem = "Feb" then
if year.SelectedItem = "2016" Or "2012" Or "2008" Or "2004" Then
Dim jkl As Integer
For jkl = 1 To 29
day.Items.Add(jkl)
Next
else
Dim poi As Integer
For poi = 1 To 28
day.Items.Add("poi")
Next
end if