MSAccess 2003 - VBA для передачи значения из одной формы в другую

Так как я могу передать значение из одной формы в другую? Например: пользователь выбирает организацию из списка, и это открывает форму поездки, которая позволяет пользователю вводить различную информацию о поездке. В одном месте я хотел бы добавить еще одну маленькую всплывающую форму, где они могут ввести контактную информацию (только имя и телефон для POC) организации, которую они посещают.

поэтому, когда эта начальная форма открывается с экрана выбора, она имеет два идентификатора, которые просто скрыты в текстовых полях (один из них tripID, а другой-OrgID), так как я могу передать их во вторую маленькую всплывающую форму, чтобы контактная информация имела относительные идентификаторы с ней.

спасибо.

3 ответов


лучший подход в этих случаях - не пытаться передать кучу переменных. Это слишком много кода, и он негибок. Например, если вам нужно передать два значения, что произойдет с годами, когда это требование вырастет до 5 значений? Попытка сохранить и передать целый удар значений-это слишком много работы по кодированию.

имейте в виду, что каждая форма в ms-access действительно является объектом класса, которым вы можете управлять в коде. Итак, используйте объектный подход здесь, и вы найдете не только напишите меньше кода, но ваш код будет более чистым, более модульным, не нуждается в глобальных vars, и код, который вы пишете, часто может быть повторно использован между различными формами.

вот как:

в общем случае, когда одна форма запускает другую форму во 2-й форме в forms on-open event (фактически, вы даже можете использовать до события on-load), вы можете получить ссылку на предыдущий объект формы. Другими словами, здесь можно использовать объектный подход.

в модуле формы. уровень, для формы я объявляю объект формы как:

Option Compare Database
Option Explicit 
dim frmPrevious       as form 

затем в событии forms on-load мы идем:

Set frmPrevious = Screen.ActiveForm

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

Итак, если вы хотите принудительно записать на диск предыдущую форму и повторно загрузить данные.

frmPrevious.Refresh

если вы хотите установить значение ID, то пойдите:

frmPrevious!ID = some value

и, обратите внимание, что вы даже можете объявить form previous как открытая переменная для этой формы, и, таким образом, если вы две формы глубоко, вы можете пойти:

frmPrevious.frmPrevious!ID = some value

Итак, просто объявите объект forms в каждом модуле кода forms (или по крайней мере те, где вам нужно использовать значения в коде). Вышеизложенное означает, что любой код имеет готовую ссылку на предыдущий объект формы. Функции, объявленные как public в форме, станут методом формы и могут выполняться как:

frmPrevious.MyCustomRefresh

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

frmPrevous.SetInvoice

или

frmPrevious.SetProjectStatusOn

таким образом, вы не только можете перетасовать значения и данные взад и вперед, но вы можете легко выполнять функции и функции, которые вы строите в коде для формы prevous.

на самом деле, как стандарт кодирования, большинство моих форм имеют публичную функцию под названием MyRefresh.

обратите внимание, что красота этого подхода заключается в том, что вы можете читать + использовать + устанавливать значения из этой предыдущей формы. Это позволяет коду не только получать значения, но и устанавливать их в предыдущей форме. Таким образом, этот подход является двунаправленным. Вы можете перемешивать данные и значения между формами. Другим преимуществом здесь является то, что вы не ограничены только переменными, но можете использовать поля, значения управления (события, свойства) и т. д.

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

поэтому не пытайтесь передать целый удар переменных. Pass a ссылка на форму, и у вас есть хороший готовый объект под рукой, и это делает этот тип проблемы кодирования ветер.


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

Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID

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

лучший подход-использовать OpenArgs:

DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID

это помещает ваши два значения в строку, которая передается во всплывающую форму. Затем вы можете проанализировать два значения из OpenArgs, используя разделение функция.

подробнее о передаче параметров через OpenArgs, см.: http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp