如果使用Or关键字不满足条件

时间:2018-11-22 15:36:35

标签: vb.net if-statement

这是我第一次在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。我尝试更改条件的顺序,更改数字的分隔符改为“&”,但仍然相同。

我希望有人对此深究。我觉得它在我的结构中是错误的,但是即使我每次都更改顺序并且它仍然显示相同的错误。 我尝试在这里搜索,但找不到与我的病情相近的病。

3 个答案:

答案 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)

Docs

        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