タイトル | : チェックボックスのONOFFの判定 |
記事No | : 9308 |
投稿日 | : 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を用いて制御したのですが、見てのとおり同じような処理が複数あり、もっと簡潔化できないかなと思った次第です。
こういったやり方もあるよ等、アドバイスをお願いします。
|