Передача значений при работе с формами

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

  • применение глобальных переменных или даже объектов-коллекций;
  • использование невидимой формы с достаточным набором элементов управления разных типов;
  • использование строковых свойств формы 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

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

  •  


    Страница сайта http://silicontaiga.ru
    Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=6434