Если условие не выполнено с помощью ключевого слова Or - PullRequest
0 голосов
/ 22 ноября 2018

Это мой первый вопрос в переполнении стека:)

У меня есть программа, которая позволяет пользователю выбрать дату в комбинированном списке и отобразить ее на ярлыке.Другие части кода для этого хороши, но я не могу сделать исключение для месяцев с особыми днями (например, февраль, который имеет только 29 дней в високосные годы).Я попытался использовать оператор If / Else, чтобы, когда пользователи щелкают по годам 2016,2012,2008 и 2004 году и февралю, он отображался в поле со списком «день» с 1 по 29, и если пользователи нажимали на февраль, но не на указанные даты, егобудет отображаться от 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 голосов
/ 22 ноября 2018

Я думаю, вы должны использовать здесь функции 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
0 голосов
/ 22 ноября 2018

Лично я бы вложил если бы

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
0 голосов
/ 22 ноября 2018

Включить Option Strict On, это поможет вам сразу же обнаружить эти ошибки.VB не обрабатывает, если подобное утверждение не соответствует тому, что вы написали.Вам нужно указывать обе стороны каждый раз.

If month.SelectedItem = "Feb" And (year.SelectedItem = "2016" Or year.SelectedItem = "2012" Or year.SelectedItem = "2008" Or year.SelectedItem = "2004") Then

Что касается вашей логики, есть формула для определения високосного дня .Возможно, было бы лучше использовать его вместо этого.

Наконец, ближе к концу вы добавляете строку, а не значение переменной.

day.Items.Add(poi)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...