2015-06-11 1 views
0

У меня есть несколько ссылок, которые по умолчанию отключены по форме, каждая из которых использует элемент управления LinkLabel.Включить все элементы управления 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 

Bonus вопрос - я, возможно, придется разделить мои LinkLabels на две секции, так что есть способ идентификации LinkLabels, которые размещены в пределах конкретный контроль, такой как Panel или TableLayoutPanel?

ответ

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 

Эта функция также работает, если вы положили контейнер внутри другого контейнера (то есть: GroupBox в Panel).

чтобы дать возможность всем LinkLabel в виде Form использовать этот код для вызова функции:

EnableAllLinkLabels(Me, True) 

, если вы не хотите, чтобы отключить только LinkLabel в Panel3 вы можете использовать этот код:

EnableAllLinkLabels(Me.Panel3, False) 
+0

К сожалению нет хотя хороший призыв к добавлению 'как управления' в' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

+0

Является ли ваш LinkLabel уже в панели? Если да, то просто измените Me.Controls в YourPanel.Controls. – tezzo

+0

Да, это так, и ваше предложение работает (хотя это 'Me.MyPanel.Controls'). Означает ли это, что мне всегда придется указывать «панель»? Это означает, что если я разделил «LinkLabels» на несколько «панелей», мне сначала нужно было идентифицировать две «панели», а затем найти «LinkLabels» внутри? –