0

フォームでデフォルトで無効になっているリンクがいくつかあり、それぞれがLinkLabelコントロールを使用しています。

ユーザーの操作に応じて、のいずれかまたはすべてを有効にする必要がありLinkLablesます。1 つを有効にするLinkLabelことはできますが、すべてを有効にする方法が見つかりません。

以下の例では、(私の方法論のテストとして) すべてのコントロールを有効にしようとしていますが、それは失敗し、LinkLabelsまったく有効になっていません。

したがって、私の質問は2つの部分です-

  1. LinkLabelコントロールだけを特定するにはどうすればよいですか?
  2. これらのコントロールをループして有効にするにはどうすればよいですか?

これが私がこれまでに持っているものです-

Private Sub EnableLink(Optional ByRef linkLabel As LinkLabel = Nothing)

    If linkLabel Is Nothing Then    ' Enable all links
        For Each singleLink In Me.Controls
            singleLink.Enabled = True
        Next
    Else                            ' Enable a single link
        linkLabel.Enabled = True
    End If

End Sub

おまけの質問- in を 2 つのセクションに分ける必要があるかもしれませんが、どちらが orなどの特定のコントロール内に配置されているLinkLabelsかを識別する方法はありますか?LinkLabelsPanelTableLayoutPanel

4

1 に答える 1

1

LinkLabelコントロールが次のコードを使用しているかどうかをテストできます。

For Each ctrl as Control In Me.Controls
    If TypeOf ctrl Is LinkLabel Then ctrl.Enabled = True
Next ctrl

LinkLabelをコンテナー (Panelまたは など) に入れる場合TableLayoutPanel、次のような関数を使用できます。

Private Sub EnableAllLinkLabels(ByVal ctrlContainer As Control, ByVal blnEnable As Boolean)

    If ctrlContainer.HasChildren Then

        For Each ctrl As Control In ctrlContainer.Controls

            If TypeOf ctrl Is LinkLabel Then
                ctrl.Enabled = blnEnable
            ElseIf TypeOf ctrl Is Panel Or TypeOf ctrl Is TableLayoutPanel Then
                EnableAllLinkLabels(ctrl, blnEnable)
            End If          

        Next ctrl

    End If

End Sub

この関数は、コンテナを別のコンテナ内に配置した場合 (つまり、 aGroupBox内の a Panel) にも機能します。

すべてを有効にするLinkLabelには、次のFormコードを使用して関数を呼び出します。

EnableAllLinkLabels(Me, True)

のみを無効にする場合はLinkLabel、次のPanel3コードを使用できます。

EnableAllLinkLabels(Me.Panel3, False)
于 2015-06-11T09:38:53.280 に答える