启用所有 LinkLabel 控件

Enable all LinkLabel controls

我有几个默认情况下在表单上禁用的链接,每个链接都使用 LinkLabel 控件。

根据某些用户交互,我需要启用一个或所有 LinkLables。我可以启用单个 LinkLabel 就好了,但我找不到启用所有这些的方法。

在下面的示例中,我试图启用所有控件(作为对我的方法的测试),但是失败了并且 LinkLabels 根本没有启用。

因此我的问题分为两部分 -

  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

奖金问题 - 我可能需要将我的 LinkLabels 分成两个部分,所以有没有办法识别 LinkLabels 放在哪个部分特定控件,例如 PanelTableLayoutPanel?

您可以使用以下代码测试控件是否为 LinkLabel

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

如果您将 LinkLabel 放入容器中(例如 PanelTableLayoutPanel),您可以使用这样的函数:

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

如果您将一个容器放在另一个容器中(即:Panel 中的 GroupBox),此功能也适用。

要在 Form 中启用所有 LinkLabel 使用此代码调用函数:

EnableAllLinkLabels(Me, True)

如果您只想禁用 Panel3 中的 LinkLabel 您可以使用此代码:

EnableAllLinkLabels(Me.Panel3, False)