オプションボタンの管理ツール:キャプションの変更

先日は、シート上に配置された複数のオプションボタンについて、リストボックスで選択したオプションボタンのグループ名を変更してみた。
infoment.hatenablog.com
今日は、各オプションボタンのキャプション変更に挑戦する。f:id:Infoment:20190421223338p:plain

今回のために、以下を追加した。

  • 変更後キャプション入力用テキストボックス(CaptionTextBox)
  • キャプション変更ボタン(CaptionEditButton)

f:id:Infoment:20190421230110p:plain
また、グループ名変更ボタンは、上記に合わせて以下のように変更した。
変更前:GroupNameChangeButton
変更後:GroupNameEditButton

さて、今回必要な条件は以下のとおり。

◆ キャプション変更ボタンは、以下の場合に有効となる。

  1. テキストボックスに何か入力されている。
  2. 「●オプションボタン詳細」(DetailListBox)で選択されているオプション
    ボタンが一つだけである。

そこでまず、上記条件が満たされているか否かを得る関数を作成する。

Private Function DetailListSelectionFlag() As Boolean
    Dim Counter As Long
    Dim i As Long
        For i = 0 To DetailListBox.ListCount - 1
            If DetailListBox.Selected(i) = True Then
                Counter = Counter + 1
            End If
        Next
        
        ' 変更後のキャプションが入力済みであることも、Trueの条件に
        ' 追加しておく。
        If Counter = 1 And CaptionTextBox.Value <> vbNullString Then
            DetailListSelectionFlag = True
        End If
End Function

「●オプションボタン詳細」で選択した際のイベントに、キャプション変更ボタンの有効無効切り替えを追加する。

Private Sub DetailListBox_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    '「●グループ名」を初期化。
    ' ※今回追加。
    GroupListBox.Clear
    GroupListBox.List = Dict.Keys
    
    Dim i As Long
        For i = 1 To DetailListBox.ListCount
            With col.Item(i).Object
                Select Case DetailListBox.Selected(i - 1)
                    Case True
                        .ForeColor = vbYellow
                        .BackColor = 192
                    Case False
                        .ForeColor = myForeColor(i)
                        .BackColor = myBackColor(i)
                End Select
            End With
        Next
        
        ' 今回追加。
        CaptionEditButton.Enabled = DetailListSelectionFlag
End Sub

変更後キャプション入力用テキストボックスの変更イベントにも、ボタンの有効無効切り替えをセット。

Private Sub CaptionTextBox_Change()
    CaptionEditButton.Enabled = DetailListSelectionFlag
End Sub

最後に、変更ボタンを押した際の処理がこちら。

Private Sub CaptionEditButton_Click()
    col.Item(DetailListBox.ListIndex + 1).Object.Caption = CaptionTextBox.Value
    CaptionTextBox.Value = vbNullString
    Call ResetList
End Sub

f:id:Infoment:20190421225206g:plain

↓ 今日までの、コードのまとめはこちらです。

参考まで。