Передача значений при работе с формами На главную страницу

Существует много способов передачи параметров в открываемую форму или отчет и возврата значений из вызываемой формы в основную, в частности:

  • применение глобальных переменных или даже объектов-коллекций;
  • использование невидимой формы с достаточным набором элементов управления разных типов;
  • использование строковых свойств формы OpenArgs и Tag.

    Первые два метода достаточно очевидны, а вот последний требует немного более подробного описания.
    Если необходимо передать какую либо информацию в открываемую методом OpenForm форму, то можно использовать аргумент OpenArgs:

    DoCmd.OpenForm "Example", , , , , acDialog, "ABCD"
    
      "Example"   имя открываемой формы;
      acDialog    параметр, указывающий, что форму надо открывать в
                  модальном режиме (при этом следующая строка программы
                  будет выполнена только после закрытия формы, когда
                  результирующее значение уже будет выбрано);
      "ABCD"      передаваемая в OpenArgs информация.
    

    Теперь строку OpenArgs можно использовать, например, в процедуре обработки события Load открываемой формы для установки текущей записи (предполагается, что поле ID - числовое).

    Private Sub Form_Load()
    On Error Resume Next
      If OpenArgs <> "" Then
        Me.RecordsetClone.FindFirst "ID = " & OpenArgs
        Me.Bookmark = RecordsetClone.Bookmark
      End If
    End Sub
    

    Возвращаемое из формы значение можно присвоить свойству формы Tag (строка до 2000 символов):

    Tag = StringToReturn
    

    Сделать это надо в процедуре обработки события нажатия кнопки, закрывающей форму. Если использовать событие закрытия формы, то данный способ не сработает. В итоге, фрагмент вызывающей программы может выглядеть так:

    DoCmd.OpenForm "Example", , , , , acDialog, "ABCD"
    ResultString = Form_Example.Tag
    

    Далее, значение ResultString можно использовать, например, для присвоения значения какому либо полю главной формы. Если нужно указать, что пользователь отказался от изменений, нажав кнопку "Отмена" или просто закрыв форму, то можно присвоить свойству Tag пустую строку или исходное значение OpenArgs.

    Если необходимо передавать не строковое значение, а число или дату, то придётся выполнить соответствующие преобразования.

    Для передачи нескольких значений потребуется сформировать из них строку со специальными разделителями, а затем выбирать значения с помощью специальной функции, например, такой:

    Const ArgsSeparator = "//"
    
    Public Function GetArgument(strArguments As String, _
                                intArg As Integer) As String
    On Error Resume Next
    Dim intCounter As Integer
    Dim iCurrPos As Integer
    Dim strCurrArg As String
    
      GetArgument = ""
      For intCounter = 1 To intArg
        If strArguments = "" Then Exit Function
        iCurrPos = InStr(strArguments, ArgsSeparator)
        If iCurrPos > 0 Then
          strCurrArg = Left(strArguments, iCurrPos - 1)
          strArguments = Mid(strArguments, iCurrPos + Len(ArgsSeparator))
        Else
          strCurrArg = strArguments
          strArguments = ""
        End If
      Next intCounter
      GetArgument = strCurrArg
    End Function
    

    Этот способ передачи параметров хорош тем, что не требует никаких дополнительных переменных и объектов, что особенно удобно в относительно простых ситуациях, например в календаре.

  • © SSY 2001 На главную страницу