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
Это может помочь
MS Access: передача параметров из одной формы доступа в другую