Как использовать элементы управления формы в модулях - PullRequest
0 голосов
/ 12 января 2020

В моих модулях я хочу использовать элементы управления из моей формы. Например: я хочу установить фокус на текстовое поле после определенного Sub.

Мое текущее решение - создать подпрограмму для установки всех элементов управления в переменной c publi (см. Ниже).

Мои вопросы:

  1. Что такое лучшая практика? Как люди обычно делают это?
  2. Когда мне следует вызывать подпрограмму? (это первый вызов в FORM_LOAD sub?)
Public TBnr As TextBox
Public Sub controlsInitieren()
    Set TBnr = Forms("frm_TreeView_Example").pstNr
End Sub

Ответы [ 2 ]

1 голос
/ 13 января 2020

Ну, как правило, в то время как многие платформы разделяют часть пользовательского интерфейса и часть кода? Что ж, Access - это совершенно другой подход - это стандартно справедливо размещать требуемый код внутри формы «класс» (все формы в Access являются «классом», и вы можете даже открыть несколько экземпляров той же формы). потом один раз).

Так, в общем, ваш код должен быть в модуле кода (класса) форм.

Однако вы могли бы и вызвать внешнюю подпрограмму.

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

Call MySetFocus(me, "NameOfControlToSetFocusTo")

И ваша подпрограмма будет выглядеть следующим образом:

Sub MySetFocus(f as form, sCtrl as string)

   f(sCtrl).SetFocus

End Sub

Однако, как уже отмечалось, количество кода выше больше, чем кода просто в модуле кода формы происходит:

me.ControlName.SetFocus

Однако, хотя приведенный выше пример не является идеальным, передача формы "instance" (me) во внешнюю подпрограмму или функцию позволяет ссылаться на любое свойство или метод или функция, которая существует в форме во внешней подпрограмме.

Так что вместо

 me("LastName") = "Zoo"

В приведенной выше подпрограмме вы могли бы и могли бы пойти;

f("LastName") = "Zoo"

Таким образом, в любом месте, где вы бы и могли использовать «я» в форме, вы можете использовать экземпляр формы, который вы передали из формы. Как уже отмечалось, рекомендуется использовать «я», поскольку, как я уже отметил, Access позволяет одновременно открывать несколько копий формы - и, следовательно, ваш код не может различить guish между какой экземпляр формы вы используете, если вы не передадите текущую форму "в контексте". Так как в JavaScript, используя «это»?

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

0 голосов
/ 12 января 2020
  1. Рекомендуется использовать только процедуры внутри кода формы. В таком случае вы ссылаетесь на элемент управления текстового поля следующим образом: Me.Textbox1.SetFocus. Если вы хотите установить некоторые свойства элементов управления во время загрузки формы, вы можете сделать это в событии frm_TreeView_Example_Initialize;
  2. Они обычно делают это так, как я описал в пункте 1;
  3. Если Вы хотите использовать такой странный / необычный способ, которым вы можете делать это, вызывая подпрограмму, когда захотите. Но, чтобы задать значение свойства c указанного элемента управления frm_TreeView_Example, вы можете просто использовать frm_TreeView_Example.TextBox1.SetFocus. Вы можете использовать этот способ настройки в процедуре модуля, даже до того, как форма была показана. Вы можете просто показать это в том коде процедуры, используя в конце: frm_TreeView_Example.Show;
...