【问题标题】:If condition not met using Or keyword如果使用 Or 关键字不满足条件
【发布时间】:2019-04-25 07:58:13
【问题描述】:

这是我第一次在 Stack Overflow 上提问 :)

我有一个程序可以让用户在组合框中选择一个日期并将其显示在标签上。代码的其他部分很好,但我不能在特殊日子的几个月里例外(比如闰年只有 29 天的 2 月)。 我尝试使用 If/Else 语句,以便当用户单击 2016、2012、2008 和 2004 年和 2 月时,它将显示在名为“day”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。我尝试更改条件的顺序,更改数字的分隔符到 "&" 但它仍然是一样的。

我希望有人能查明真相。我觉得它在我的结构中是错误的,但即使我每次都更改顺序并且它仍然显示相同的错误。 我试着在这里搜索,但我找不到一个像我的情况甚至非常相似的人。

【问题讨论】:

    标签: vb.net if-statement


    【解决方案1】:

    我认为你应该在这里使用 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】:

    就个人而言,我会制作一个嵌套的 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
    

    【讨论】:

    【解决方案3】:

    打开 Option Strict On,它将帮助您立即检测到这些错误。 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)
    

    【讨论】:

    • 我要补充一点,在这种情况下应该使用AndAlso & OrElse 而不是And & Or。 OP 可以阅读this 了解更多信息。
    • Date.IsLeapYear(2004)怎么样
    • 在哪里可以找到严格的选项。是否需要编写选项或代码。谢谢艾哈迈德:)
    • @diabetes_comms 您可以在文件顶部写入Option Strict On/Off为该文件启用/禁用它,也可以将其应用于整个文件项目属性中的项目。另一种方法(如果你问我,你应该这样做) 是在 Visual Studio 设置中打开 Option Strict On,以便为所有即将进行的项目启用它。检查this question 以获得指导和更多信息。提示:阅读第一个和第二个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多