Как перебрать все элементы управления в форме, включая элементы управления в подчиненной форме - Access 2007 - PullRequest
9 голосов
/ 27 июля 2010

Как видно из заголовка моего вопроса, как можно перебрать все элементы управления в форме, включая подчиненные?тег *

Public Sub colCtrlReq(frm As Form)
'  Sets background color for required field -> Tag = *
Dim setColour As String
setColour = RGB(255, 244, 164)
Dim ctl As Control
For Each ctl In frm.Controls
        If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then
            If InStr(1, ctl.Tag, "*") <> 0 Then
                ctl.BackColor = setColour
            End If
        End If
Next ctl
Set ctl = Nothing
End Sub

Как бы изменить это, чтобы поймать элементы управления в подчиненной форме?Заранее благодарим за любую помощь или указатели.

Приветствия Ноэль

Ответы [ 2 ]

14 голосов
/ 27 июля 2010

Вы можете использовать рекурсию

Public Sub colCtrlReq(frm As Form)
''  Sets background color for required field -> Tag = *
Dim setColour As String
setColour = RGB(255, 244, 164)
Dim ctl As Control
For Each ctl In frm
        If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox _
            Or ctl.ControlType = acListBox Then
            If InStr(1, ctl.Tag, "*") <> 0 Then
                ctl.BackColor = setColour
            End If
        ElseIf ctl.ControlType = acSubform Then
            colCtrlReq frm(ctl.Name).Form

        End If
Next ctl
Set ctl = Nothing
End Sub
2 голосов
/ 27 июля 2010

Доступ к коллекции элементов управления свойства Form элемента управления подчиненной формы.

Осторожно, имя элемента управления подчиненной формы может не совпадать с именем сохраненного объекта формы.

Если ваша подчиненная форма control называется SubformControlName, начните отсюда:

For Each ctl In frm!SubformControlName.Form.Controls
    Debug.Print ctl.Name
Next

Обновление : из вашего комментария я думаю, что выищите.

Если вы заранее не знаете имен ваших элементов управления подчиненной формы, вы можете определить, какие из элементов управления вашей формы являются элементами управления подчиненной формы во время выполнения.

For Each ctl In frm.Controls
    If TypeName(ctl) = "SubForm" Then
        Debug.Print ctl.Name & " is a SubForm"
        For Each ctlSub in ctl.Form.Controls
            Debug.Print ctlSub.Name
        Next 
    End If
Next
...