MS Access: как формы передают значения друг другу?

У меня есть форма (форма-A), которая требует от пользователя выбора транспортного средства. Пользователь должен нажать на кнопку на форме-a, что сказать, выберите автомобиль. Откроется форма выбора (форма-B), в которой пользователь может выбрать транспортное средство. Выбранное значение должно быть передано обратно в форму-A.

Как бы вы сделали это в MS Access 2010?

FORM-B-это непрерывная форма, содержащая изображение транспортного средства и некоторую другую информацию.

4 ответов


из того, что я понимаю из вашего вопроса, вы хотите, чтобы formB открыл своего рода всплывающее окно. Когда всплывающее окно закрыто, его результат помещается в вызывающую форму.
Предложение решения:
a) Открыть FormB с помощью синтаксиса docmd.openform "formB", windowmode:=acDialog.
Это предотвратит выполнение следующих строк, пока formB не будет закрыт или скрыт.
b) в кнопке OK FormB просто скройте форму, не закрывайте ее.
c) когда код возобновляется в форме, вы можете теперь

  1. проверить, если formB все еще открыто. Если нет, он был отменен
  2. читать значение в скрытом formB (еще открыт), затем закройте formB

в противном случае у вас также может быть formB для обновления элемента управления в formA перед закрытием. Но мне не нравится этот подход, потому что тогда formB не используется повторно, и он создает ненужную зависимость между formB и formA.


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

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


вы можете ссылаться на формы таким образом формы!formName!имяэлементауправления. Как только вы увидите, как это работает, вы сможете обмануть его, чтобы заставить его работать с вашей существующей установки. Давайте использовать 3 Управления текстовое поле на форму -, изображение на форме-B и текстовое поле на форме-Б. текстовое поле на форме-это будет называться txtVehicle, изображение на форме-Б будет называться imgVehicle и текстовое поле на форме-Б будет называться txtVehicleName. Имя элемента управления можно задать в свойствах. При нажатии на imgVehicle он поместит значение из txtVehicleName в txtVehicle.

вам придется сделать небольшое кодирование-это легко, хотя, если вы не делали этого раньше. В разделе свойства для изображения вы увидите события. Если вы нажмете на событие "On Click", вы получите выпадающий список. Одним из вариантов будет [процедура события] - Выберите это. Маленькая кнопка с 3 точками на ней также появится в конце строки. Нажмите на него, и вы должны быть приняты в окно кода с некоторыми такой код в нем.

Private Sub imgVehicle_Click()

End Sub

вот где вы помещаете свой код. Что-то вроде этого должно работать. Это она в самой упрощенной форме.

Private Sub imgVehicle_Click()
    Forms!Form-A!txtVehicle=forms!Form-B!txtVehicleName
End Sub

Теперь, хотя это будет работать, есть несколько вещей, которые мы должны делать в этом методе, чего мы не делаем. Мы должны напрямую ссылаться на форму-B, поскольку мы находимся в ней, мы должны проверить, что форма-A действительно открыта.

Private Sub imgVehicle_Click()
    If currentproject.allforms(“Form-A”).isloaded then
            Forms!Form-A!txtVehicle=me!txtVehicleName
    End if
End Sub

надеюсь, что это поможет


вы можете создать экземпляр formB в formA и управлять им. Ниже приведен код VBA для formA. При нажатии на кнопку на форме, вы создаете новый экземпляр formB и дать ему фокус. В то же время можно задать свойства для его элементов управления. Вы можете использовать этот подход, чтобы установить правильное изображение в своем элементе управления в форме B. надеюсь, это поможет.

пример:

Option Compare Database

Dim fB As Form_FormB

Private Sub btnA_Click()
    Set fB = New Form_FormB
    fB.SetFocus
    fB.tbxB.Text = "Some text sent from A to B!"
End Sub

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