2016-12-29 63 views
0

所以我有這個程序在Visual Studio 2008中,讓用戶選擇一個月和一年,然後動態更改所有複選框的顏色哪些文本對應於所選月份的星期六的日期和星期天。在運行時動態更改兩個複選框ForeColor

讓說,「讓我= 1」是第一個星期日的日期和2017年一月的第一天((UTC-08:00)太平洋時間(美國&加拿大))第一次運行

我知道使用每個將讓程序循環在Me.Controls每個控制,所以我不認爲它會看不懂的第一IF語句

If cb.Text = i-1 

而且只有ELIF將退出for循環。

,但如果我改變的第一個語句到

if cb.Text = i+1 

它的工作。任何人都可以告訴我它有什麼問題..我只是沒有得到任何錯誤或警告,只是我認爲這個邏輯錯誤?

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 

回答

0

所以這是我如何解決我自己的問題,讓用戶選擇一個月,一年,計算天的第一個星期日再下去....

那是因爲FOR EACH LOOP從您在控件組或控件上添加的最後一個控件開始,因此我使用了正常的FOR LOOP並直接轉換對象,以便查看控件的名稱,名稱必須以數組的方式排列。像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 
相關問題