Группировка полей в MS Access vba - PullRequest
0 голосов
/ 21 февраля 2020

Есть ли способ группировки полей в форме MS Access? Я использую VBA для перемещения различных полей в моей форме на основе критериев. Есть ли способ поместить некоторые поля в какой-нибудь ящик и переместить его вместо перемещения элементов управления по одному?

1 Ответ

0 голосов
/ 22 февраля 2020

Если вы поместите элементы управления для перемещения в коллекцию (например, с помощью свойства .Tag или .Name), просто l oop через эту коллекцию (вашу группу) и переместите все элементы управления на одно и то же значение.

В стандартном модуле:

Public Sub MoveGroup(ByVal MovingGroup As Collection, _
                     ByVal AddLeft As Long, _
                     ByVal AddTop As Long)

    Dim CtlToMove As Control
    For Each CtlToMove In MovingGroup
        CtlToMove.Move CtlToMove.Left + AddLeft, CtlToMove.Top + AddTop
    Next
End Sub

Public Sub MoveByTagAsolute(ByRef CtlAbsolute As Control, _
                            ByVal MovingGroupTag As String, _
                            ByVal NewLeft As Long, _
                            ByVal NewTop As Long)

    Dim CtlGroup As Collection
    Set CtlGroup = New Collection
    Dim CtlToMove As Control
    For Each CtlToMove In CtlAbsolute.Parent.Controls
        If CtlToMove.Tag Like MovingGroupTag Then
            CtlGroup.Add CtlToMove
        End If
    Next
    MoveGroup CtlGroup, NewLeft - CtlAbsolute.Left, NewTop - CtlAbsolute.Top
End Sub

Public Sub MoveByTagRelative(ByRef Frm As Form, _
                             ByVal MovingGroupTag As String, _
                             ByVal AddLeft As Long, _
                             ByVal AddTop As Long)

    Dim CtlGroup As Collection
    Set CtlGroup = New Collection
    Dim CtlToMove As Control
    For Each CtlToMove In Frm.Controls
        If CtlToMove.Tag Like MovingGroupTag Then
            CtlGroup.Add CtlToMove
        End If
    Next
    MoveGroup CtlGroup, AddLeft, AddTop
End Sub

В модуле форм:

Private Sub CommandMoveByTagAsolute_Click()
    MoveByTagAsolute Me.Controls("ControlAbsolutePos"), "move*", 2000, 3000
End Sub

Private Sub CommandMoveByTagRelative_Click()
    MoveByTagRelative Me, "*", 1000, 2000
End Sub

Кнопка CommandMoveByTagAsolute событие щелчка перемещает ControlAbsolutePos к новым координатам и остальная часть группы перемещается относительно нее.

Кнопка CommandMoveByTagRelative событие щелчка перемещает всю группу («*» выбирает все элементы управления в форме) относительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...