tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル複数チェックボックスの連動について
記事No12891
投稿日: 2008/08/12(Tue) 17:49
投稿者ダリア
お久しぶりです。ダリアです。
環境はVB6、WIN XPです。
複数のチェックボックスの連動について質問いたします。
説明が下手なのですが、チェックボックスに以下のような機能を持たせようと思っています。
(これを、本来ならばどのように表現するのかが、ちょっと分からないのです)

フォーム上にA_CHECK_ALLというチェックボックスとA_CHECKというチェックボックスを7個用意します。

そして、以下のような動作をさせようとしました。
A_CHECK_ALLのチェックボックスを(チェックする)オン状態にすると、A_CHECKの7個のチェックボックス全てがオンされます。
A_CHECK_ALLのチェックボックスを(チェックを外す)オフ状態にすると、A_CHECKの7個のチェックボックス全てがオフされます。
仮にA_CHECK_ALLがオン状態で、A_CHECKの7個のチェックボックスのひとつがオフにされた場合、A_CHECK_ALLはオフになります。
また、A_CHECK_ALLがオフ状態で、A_CHECKの7個のチェックボックスが全てオンになった場合、A_CHECK_ALLはオンになります。

以下のようなイベントを各々のチェックボックスで作成したのですが、上手く動きません。
ClickイベントはChangeイベントと同義なので、とうぜんながらA_CHECKの値が変わった途端にA_CHECKのイベントが発生してしまいます。
このような場合、どのようにプログラムを組むべきなのでしょうか?
よろしくお願いします。


A_CHECK_ALLのイベント
Private Sub A_CHECK_ALL_Click()

    Dim i As Integer
    
    With frmDiagSelect
        If .A_CHECK_ALL.Value = 1 Then
            For i = 0 To 7
            
                If .A_CHECK(i).Enabled = True Then
                    .A_CHECK(i).Value = 1
                End If
                
            Next i
        Else
            For i = 0 To 7
                .A_CHECK(i).Value = 0
            Next i
        End If
    
    End With
    
End Sub


A_CHECKのイベント
Private Sub A_CHECK_Click(Index As Integer)

    
    With frmDiagSelect
        For Index = 0 To 7
            If .A_CHECK(Index).Value = 0 Then
                .A_CHECK_ALL.Value = 0
                Exit Sub
            End If
        Next Index
        
        .A_CHECK_ALL.Value = 1
    
    End With

End Sub

[ツリー表示へ]
タイトルRe: 複数チェックボックスの連動について
記事No12892
投稿日: 2008/08/12(Tue) 18:15
投稿者ダリア
すみません、ダリアです。
よく考えてみましたら、お盆休みに入られる方が多いのですよね。
私も18日までVBは使えないのでアドバイスを頂いても即、試すことができませんし。
一旦、質問を下げて後日、改めた方がよろしいでしょうか。

[ツリー表示へ]
タイトルRe^2: 複数チェックボックスの連動について
記事No12893
投稿日: 2008/08/12(Tue) 18:19
投稿者るしぇ
> 一旦、質問を下げて後日、改めた方がよろしいでしょうか。
花ちゃんに『返事が遅い!』って怒られるだけで、来週ちゃんと対応してくれる
ならボクはこのままでいいと思うけど?w

>ClickイベントはChangeイベントと同義なので、とうぜんながらA_CHECKの値が変わった途端に
>A_CHECKのイベントが発生してしまいます。
つまりコードから変更した時にフラグで判別できればいいのでは?

[VB6.0]
Option Explicit

Private m_CodeCommand As Boolean

'A_CHECK_ALLのイベント
Private Sub A_CHECK_ALL_Click()
    Dim i As Integer
    
    m_CodeCommand = True
    With Me
        If .A_CHECK_ALL.Value = 1 Then
            For i = 0 To 7
                .A_CHECK(i).Value = 1
            Next i
        Else
            For i = 0 To 7
                .A_CHECK(i).Value = 0
            Next i
        End If
    End With
    m_CodeCommand = False
    
End Sub

'A_CHECKのイベント
Private Sub A_CHECK_Click(Index As Integer)
    If m_CodeCommand = False Then
        Debug.Print "A_CHECK_Click" & Index
    End If
End Sub

[ツリー表示へ]
タイトル(解決)複数チェックボックスの連動について
記事No12895
投稿日: 2008/08/12(Tue) 18:59
投稿者ダリア
るしぇ様へ

早速のアドバイスありがとうございます。
フラグを使うことは全く頭になくて、目から鱗の思いです。
おかげさまで上手く動くことが出来ました。
ありがとうございます。

フラグを2つ使ったプログラムを以下に載せます。
(A_CHECKにもフラグが要りますよね?)

Private Sub A_CHECK_ALL_Click()

    Dim i As Integer
    
    Flag_A_ALL = True
    
    If Flag_A = False Then
    
    With frmDiagSelect
        If .A_CHECK_ALL.Value = 1 Then
            For i = 0 To 7
            
                If .A_CHECK(i).Enabled = True Then
                    .A_CHECK(i).Value = 1
                End If
                
            Next i
        Else
            For i = 0 To 7
                .A_CHECK(i).Value = 0
            Next i
        End If
    
    End With
    
    End If
    
    
    Flag_A_ALL = False
    

End Sub

Private Sub A_CHECK_Click(Index As Integer)
    
    Flag_A = True
    
    If Flag_A_ALL = False Then
  
    With frmDiagSelect
        For Index = 0 To 7
            If .A_CHECK(Index).Value = 0 And .A_CHECK(Index).Enabled = True Then
                .A_CHECK_ALL.Value = 0
                Flag_A = False
                Exit Sub
            End If
        Next Index
        
        .A_CHECK_ALL.Value = 1
    
    End With
    
    End If
    
    Flag_A = False
    
End Sub

[ツリー表示へ]
タイトルRe^2: 複数チェックボックスの連動について
記事No12896
投稿日: 2008/08/12(Tue) 19:14
投稿者花ちゃん
> 私も18日までVBは使えないのでアドバイスを頂いても即、試すことができませんし。
> 一旦、質問を下げて後日、改めた方がよろしいでしょうか。

初めにお読み下さい の  4.投稿後の対応 の (1) のところに書いておりますが
何かの都合で速やかに返事が出来なければ質問時に×日以降でないと返事ができません
等と付け加えておいてくだされば、それで結構ですよ。

[ツリー表示へ]