tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル チェックボックスのONOFFの判定
投稿日: 2009/08/28(Fri) 11:07
投稿者ちょぴ
VB2008ExpressEditionを使用しています。

とあるプログラムを作成しているのですが、もっと簡潔に表現できないかと思い、投稿させていただきます。
(現状、一応プログラムは思い通りに動いていますが、やたら同じような処理をしているので、もっといい方法等を勉強したいというのが主旨です)

画面仕様
チェックボックス「九州」
  チェックボックス「福岡」
  チェックボックス「佐賀」
  チェックボックス「長崎」
  チェックボックス「大分」
  チェックボックス「熊本」
  チェックボックス「宮崎」
  チェックボックス「鹿児島」
  チェックボックス「沖縄」

動作仕様
1.九州チェックをON
--->配下の福岡〜沖縄までのチェックをON
2.九州チェックをOFF
--->配下の福岡〜沖縄までのチェックをOFF
3.配下の福岡〜沖縄までのいずれかのチェックをOFF
--->九州チェックをOFF
4.配下の福岡〜沖縄までの全てのチェックをON
--->九州チェックをON

要は九州チェックがONの際は、配下の福岡〜沖縄までが併せて全てONになるし、
九州チェックがOFFの場合は、配下の福岡〜沖縄のいずれか、もしくは全てがOFFになっている状態。


以下、私が組んでみたコード

Public Class Form1

    Private flg As Integer  'チェックフラグ(0:すべて/1:九州のみ)

    Private Sub main()
        flg = 0
        AllChange(False)
    End Sub

    Private Sub kyushu_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles kyushu.CheckedChanged
        If flg = 0 Then
            If kyushu.Checked = True Then
                AllChange(True)
            Else
                AllChange(False)
            End If
        End If
    End Sub

    Private Sub AllChange(ByVal val As Boolean)
        hukuoka.Checked = val
        saga.Checked = val
        nagasaki.Checked = val
        ooita.Checked = val
        miyazaki.Checked = val
        kumamoto.Checked = val
        kagosima.Checked = val
        okinawa.Checked = val
    End Sub

    Private Sub hukuoka_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles hukuoka.CheckedChanged
        If hukuoka.Checked = True Then
            If (kumamoto.Checked = True) And _
               (saga.Checked = True) And _
               (ooita.Checked = True) And _
               (nagasaki.Checked = True) And _
               (miyazaki.Checked = True) And _
               (kagosima.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If

        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub kumamoto_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles kumamoto.CheckedChanged
        If kumamoto.Checked = True Then
            If (hukuoka.Checked = True) And _
               (saga.Checked = True) And _
               (ooita.Checked = True) And _
               (nagasaki.Checked = True) And _
               (miyazaki.Checked = True) And _
               (kagosima.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If

        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub saga_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles saga.CheckedChanged
        If saga.Checked = True Then
            If (kumamoto.Checked = True) And _
               (hukuoka.Checked = True) And _
               (ooita.Checked = True) And _
               (nagasaki.Checked = True) And _
               (miyazaki.Checked = True) And _
               (kagosima.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If

        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub ooita_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ooita.CheckedChanged
        If ooita.Checked = True Then
            If (kumamoto.Checked = True) And _
               (saga.Checked = True) And _
               (hukuoka.Checked = True) And _
               (nagasaki.Checked = True) And _
               (miyazaki.Checked = True) And _
               (kagosima.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If

        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub nagasaki_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nagasaki.CheckedChanged
        If nagasaki.Checked = True Then
            If (kumamoto.Checked = True) And _
               (saga.Checked = True) And _
               (ooita.Checked = True) And _
               (hukuoka.Checked = True) And _
               (miyazaki.Checked = True) And _
               (kagosima.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If

        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub miyazaki_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles miyazaki.CheckedChanged
        If miyazaki.Checked = True Then
            If (kumamoto.Checked = True) And _
               (saga.Checked = True) And _
               (ooita.Checked = True) And _
               (nagasaki.Checked = True) And _
               (hukuoka.Checked = True) And _
               (kagosima.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If
        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub kagosima_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles kagosima.CheckedChanged
        If kagosima.Checked = True Then
            If (kumamoto.Checked = True) And _
               (saga.Checked = True) And _
               (ooita.Checked = True) And _
               (nagasaki.Checked = True) And _
               (miyazaki.Checked = True) And _
               (hukuoka.Checked = True) And _
               (okinawa.Checked = True) Then

                kyushu.Checked = True
            End If
        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub

    Private Sub okinawa_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okinawa.CheckedChanged
        If okinawa.Checked = True Then
            If (kumamoto.Checked = True) And _
               (saga.Checked = True) And _
               (ooita.Checked = True) And _
               (nagasaki.Checked = True) And _
               (miyazaki.Checked = True) And _
               (kagosima.Checked = True) And _
               (hukuoka.Checked = True) Then

                kyushu.Checked = True
            End If
        Else
            flg = 1
            kyushu.Checked = False
            flg = 0
        End If
    End Sub
End Class


当初は、配下の福岡〜沖縄までのチェックのON/OFF時に九州チェックも操作しているため、そこでまた配下の福岡〜沖縄までのチェックを操作しようとして変な動きになったりしていました。
そこでFLGを用いて制御したのですが、見てのとおり同じような処理が複数あり、もっと簡潔化できないかなと思った次第です。

こういったやり方もあるよ等、アドバイスをお願いします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。