2016-12-29 16 views
0

Visual Studio 2008でこのプログラムを使用すると、ユーザーは月と年を選択できるようになり、選択した月の土曜日の日付に対応するすべてのチェックボックス日曜日。動的に2つのチェックボックスを動的に変更するランタイム中にForeColor

最初の日曜日の日と2017年1月の初日である最初の実行の「I = 1ましょう」と言うことができます((UTC-08:00)太平洋標準時(米国&カナダ))

私はそれが声明

If cb.Text = i-1 

のみELIFはFORループを終了することを第1のIFを読んでいないとは思わないので、Me.Controls内の各コントロールにプログラムループをできるようになる毎に使用して知っています。

が、私はそれが働いた

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 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 
関連する問題