Динамическое Изменение Двух Флажков ForeColor Во Время Выполнения

Таким образом, у меня есть эта программа в visual studio 2008, которая позволит пользователю выбрать месяц и год, а затем динамически изменяет все флажки перед цветом, который тексты соответствует дате субботы и воскресенья выбранного месяца.

скажем «Let i = 1» на первом запуске, который является датой первого воскресенья и самого первого дня января 2017 ((UTC-08:00) Тихоокеанское время (США и Канада))

Я знаю, что использование для каждого позволит цикл программы для каждого элемента управления во мне.Элементы управления, поэтому я не думаю, что он не будет читать Первый Оператор IF

    If cb.Text = i-1

и что только Элиф выйдет за петлю.

но если я изменю первое утверждение на

    if cb.Text = i+1

это сработало. Кто-нибудь, пожалуйста, скажите мне, что с ним не так.. I just don’t get any errors or warnings just this logical error I think?

    Dim cb
        While i < 31
            For Each cb In Me.Controls
                If TypeOf cb Is CheckBox Then
                    If cb.Text = i - 1 Then
                        cb.ForeColor = Color.Blue
                    ElseIf cb.Text = i Then
                        cb.ForeColor = Color.Red
                        Exit For
                    End If
                End If
            Next
            i += 7
        End While

1 ответ

  1. таким образом, я решил свою проблему, позволил пользователю выбрать месяц и год, рассчитать дни и первое воскресенье, а затем продолжить….

    это связано с тем, что для каждого цикла начинается с последнего элемента управления, добавленного в группу элементов управления или в вашей форме, поэтому я использовал обычный для цикла и прямого приведения объекта, чтобы он смотрел на имена элемента управления, имена должны быть расположены в виде массива. как c1,c2, c3….

        Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
        On Error Resume Next
        Dim nMonths As Integer = System.DateTime.DaysInMonth(ComboBox2.Text, ComboBox1.SelectedIndex + 1)
        Dim i As Integer = 1
        Dim x As Integer = 0
        Dim customDate As Date = FormatDateTime(CDate(ComboBox1.SelectedIndex + 1 & "/1/" & ComboBox2.Text), DateFormat.ShortDate)
    
        While customDate.DayOfWeek <> DayOfWeek.Sunday
            customDate = customDate.AddDays(1)
            i += 1
        End While
        x = i - 1
    
        Dim cb
        'set visible
        For n = 1 To nMonths
            cb = DirectCast(Me.Controls("chk" + n.ToString()), CheckBox)
            cb.Visible = True
        Next
    
        If nMonths = 31 Then
            'set sundays and saturdays checkboxes fore color
            While i <= 31
                Dim cb1 = DirectCast(Me.Controls("chk" + x.ToString()), CheckBox)
                cb1.ForeColor = Color.Blue
                Dim cb2 = DirectCast(Me.Controls("chk" + i.ToString()), CheckBox)
                cb2.ForeColor = Color.Red
                i += 7
                x += 7
            End While
        ElseIf nMonths = 30 Then
            'set sundays and saturdays checkboxes fore color
            While i <= 30
                Dim cb1 = DirectCast(Me.Controls("chk" + x.ToString()), CheckBox)
                cb1.ForeColor = Color.Blue
                Dim cb2 = DirectCast(Me.Controls("chk" + i.ToString()), CheckBox)
                cb2.ForeColor = Color.Red
                i += 7
                x += 7
            End While
        ElseIf nMonths = 29 Then
            'set sundays and saturdays checkboxes fore color
            While i <= 29
                Dim cb1 = DirectCast(Me.Controls("chk" + x.ToString()), CheckBox)
                cb1.ForeColor = Color.Blue 'satudays
                Dim cb2 = DirectCast(Me.Controls("chk" + i.ToString()), CheckBox)
                cb2.ForeColor = Color.Red 'sundays
                i += 7
                x += 7
            End While
        ElseIf nMonths = 28 Then
            'set sundays and saturdays checkboxes fore color
            While i <= 28
                Dim cb1 = DirectCast(Me.Controls("chk" + x.ToString()), CheckBox)
                cb1.ForeColor = Color.Blue
                Dim cb2 = DirectCast(Me.Controls("chk" + i.ToString()), CheckBox)
                cb2.ForeColor = Color.Red
                i += 7
                x += 7
            End While
        End If
    End Sub