C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

同じTagプロパティを設定したコントロールを表示させたい

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■95469 / inTopicNo.1)  同じTagプロパティを設定したコントロールを表示させたい
  
□投稿者/ 北松 (5回)-(2020/08/04(Tue) 16:26:05)

分類:[VB.NET/VB2005 以降] 

VisualStudio2008で開発中です。
フォームに50音分(50個)のチェックボックス(Apperance:Button)を配置し、ア行・カ行・サ行・・・それぞれにTagプロパティを設定しグループ分けをしようとしています。
(あ・い・う・え・おチェックボックスにはそれぞれTagプロパティ“RowA”を、か・き・く・け・こチェックボックスにはそれぞれ“RowKA”を、といった感じです。)

Form_Loadイベントで、ア段(あかさたな・・・)チェックボックスのみをvisible=true、イ段以降はvisible=falseにして、
ア段のチェックボックスを選択したとき、その選択した行に対応するイ段以降のチェックボックスを表示させたいです。
(“か”チェックボックスをChecked=trueしたとき、“き”“く”“け”“こ”チェックボックスをvisible=true。また、その状態で“さ”を選択した場合、きくけこは非表示にし、しすせそを表示。)



Private Sub KanaCheckBox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)

End Sub

どのように記述すればよいでしょうか?
引用返信 編集キー/
■95472 / inTopicNo.2)  Re[1]: 同じTagプロパティを設定したコントロールを表示させたい
□投稿者/ くまくま (30回)-(2020/08/04(Tue) 22:08:18)
2020/08/04(Tue) 22:10:42 編集(投稿者)

なんか説明を読んでいると
「チェックボックス」ではなく
「ラジオボタン」のほうが良くない?

「グループボックス」の中に
「ラジオボタン」でア・カ・サ...段用に11個配置
これを「段ラジオボタン」とする

(アイウ...・カキク...・サシス...行)
「チェックボックス」(「ラジオボタン」)を5つ配置した「グループボックス」を11個用意
これを「行グループボックス」群とする

「段ラジオボタン」が変更されるタイミングで「行グループボックス」群のvisibleを変更

まず上記をできるようにしてから
フォームの「読み込み時」に「「段ラジオボタン」が変更されるタイミング」の処理を行う
引用返信 編集キー/
■95476 / inTopicNo.3)  Re[1]: 同じTagプロパティを設定したコントロールを表示させたい
□投稿者/ 粗品 (5回)-(2020/08/05(Wed) 14:46:31)
No95469 (北松 さん) に返信
> VisualStudio2008で開発中です。
> フォームに50音分(50個)のチェックボックス(Apperance:Button)を配置し、ア行・カ行・サ行・・・それぞれにTagプロパティを設定しグループ分けをしようとしています。
> (あ・い・う・え・おチェックボックスにはそれぞれTagプロパティ“RowA”を、か・き・く・け・こチェックボックスにはそれぞれ“RowKA”を、といった感じです。)
> 
> Form_Loadイベントで、ア段(あかさたな・・・)チェックボックスのみをvisible=true、イ段以降はvisible=falseにして、
> ア段のチェックボックスを選択したとき、その選択した行に対応するイ段以降のチェックボックスを表示させたいです。
> (“か”チェックボックスをChecked=trueしたとき、“き”“く”“け”“こ”チェックボックスをvisible=true。また、その状態で“さ”を選択した場合、きくけこは非表示にし、しすせそを表示。)
> 
> 
> どのように記述すればよいでしょうか?

CheckedChangedイベントの中で納めてしまうとしたらこうでしょうか?
50音分のチェックボックスをすべてココで処理する前提です
Tagの使い方で先頭列判断とかDictionary使わないでもうちょっと簡単に出来そうな気がしますが
あと、Visible=Falseの時もチェックボックスは外してません

Private Sub KanaCheckBox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles KanaCheckBox.CheckedChanged, KanaCheckBox2.CheckedChanged, KanaCheckBox3.CheckedChanged…〜
    Static isChanged As Boolean = False

    If Not isChanged Then
        isChanged = True

        'チェックボックスをあいうえお〜の順番で取り出せるよう配列へ格納(今回はTabIndexを使用)
        Dim controlList As New SortedDictionary(Of Integer, Control)

        For Each control As Control In Me.Controls
            If TypeOf control Is CheckBox Then
                controlList.Add(control.TabIndex, control)
            End If
        Next

        Dim tag As Object = DirectCast(sender, CheckBox).Tag
        Dim tagList As New List(Of Object)

        '先頭のチェック状態を確認
        Dim isChecked As Boolean = False
        Dim isPrimary As Boolean = True

        For i As Integer = 0 To controlList.Count - 1
            If Not tagList.Contains(controlList.Values(i).Tag) Then
                tagList.Add(controlList.Values(i).Tag)

                If DirectCast(controlList.Values(i), CheckBox).Checked Then
                    isChecked = True
                End If
            Else
                If controlList.Values(i).Equals(sender) Then
                    isPrimary = False
                End If
            End If
        Next

        If isPrimary Then
            'ア列をクリックした時、自分以外のチェックは外す
            tagList = New List(Of Object)

            For i As Integer = 0 To controlList.Count - 1
                If Not tagList.Contains(controlList.Values(i).Tag) Then
                    tagList.Add(controlList.Values(i).Tag)

                    If Not controlList.Values(i).Equals(sender) Then
                        DirectCast(controlList.Values(i), CheckBox).Checked = False
                    End If
                End If
            Next
        End If

        tagList = New List(Of Object)

        If Not isPrimary Then
            'イ列以降は何もしない

        ElseIf Not isChecked Then
            '先頭がすべて非チェックだったら先頭以外はVisible=False
            For i As Integer = 0 To controlList.Count - 1
                If Not tagList.Contains(controlList.Values(i).Tag) Then
                    tagList.Add(controlList.Values(i).Tag)
                    controlList.Values(i).Visible = True
                Else
                    controlList.Values(i).Visible = False
                End If
            Next
        Else
            '同じTagの内容のチェックボックスはVisible=True、違う時先頭以外はVisible=False
            For i As Integer = 0 To controlList.Count - 1
                If controlList.Values(i).Tag.Equals(tag) AndAlso DirectCast(sender, CheckBox).Checked Then
                    controlList.Values(i).Visible = True
                Else
                    If Not tagList.Contains(controlList.Values(i).Tag) Then
                        tagList.Add(controlList.Values(i).Tag)
                        controlList.Values(i).Visible = True
                    Else
                        controlList.Values(i).Visible = False
                    End If
                End If
            Next
        End If

        isChanged = False
    End If
End Sub

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ