Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Выполнить дейсвие после создания формы


Автор: Djinn 5.10.2009, 15:58
Здравствуйте.
Вопрос вот в чем:
есть у меня поле для ввода денег (тип денежный) собственно мне нужно чтобы в другом поле выводилось какое-то число в другое такое-же поле.
В общем поле с одним именем приблизительно в 5-ти вариантах может быть (создаются по выборке из запроса), то есть присвоить просто полю то или иное значение нельзя.
Есть модуль в котором ф-я делает такое (к примеру)
Код

Public Function Func()
    If IsNull(Form_Form5.Input1.Value) Then
        Exit Function
    End If
    Form_Form5.Input2.Value = Form_Form5.Input1.Value
End Function


Мне нужно обязательно чтобы во время создания input2 выполнялась эта функция (или во время создания ipput2). В данные ф-ю нельзя впихнуть потому как тогда одно из полей не будет создано, остальные все действия уже относятся к пользователю :(

Надеюсь описал более-менее понятно. заранее благодарен smile

Автор: bopoha 5.10.2009, 17:43
1. Реализоываете фукнцию в модуле.
2.а Используете ее в качестве источника данных для поля формы, в атрибут данные записывая выражение: =Фукнция()
2.б Релаизовываете обработчик события открытие формы и выполняете Me.Pole.Value = Фeнкция()

P.S. К чему вы обращаетесь посредствам Form_Form5?
В модуле класса, в частности формы, можно использовать ключевое слово Me для доступа к атрибутам и методам текущего класса.
Если вы во внежней фнукции хотите обрабатываеть форму, то лучше делать так:
Код

Public Function Func(ByRef frm As Form_Form5)
    If IsNull(frm.Input1.Value) Then
        Exit Function
    End If
    frm.Input2.Value = frm.Input1.Value
End Function


Вместо "ByRef frm As Form_Form5" можно использовать объявление "ByRef frm As Form", если не известно для какой формы будет вызывана функция.

Автор: Akina 5.10.2009, 18:55
Модератор: Используя тег кода, смотрите внимательнее, какой именно тип кода задаёте.

Автор: Djinn 5.10.2009, 19:23
Дело в том что, если указать функцию в источник данных - то:

Код

Поле5.Value

Есть ошибочным... :( типа не обьявлено еще... :(

Цитата(bopoha @  5.10.2009,  17:43 Найти цитируемый пост)
2.б Релаизовываете обработчик события открытие формы и выполняете Me.Pole.Value = Фeнкция()

это не понятно smile


Цитата(bopoha @  5.10.2009,  17:43 Найти цитируемый пост)
1. Реализоываете фукнцию в модуле.

И это тоже smile


Цитата(bopoha @  5.10.2009,  17:43 Найти цитируемый пост)
P.S. К чему вы обращаетесь посредствам Form_Form5?

Я думаю это не важно smile и у меня не модуль типа: Class

Автор: bopoha 5.10.2009, 23:02
Djinn, 

Цитата(Djinn @  5.10.2009,  19:23 Найти цитируемый пост)
Есть ошибочным... :( типа не обьявлено еще... :(

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

Цитата(Djinn @  5.10.2009,  19:23 Найти цитируемый пост)
это не понятно smile

См. книжку. Темы события форм и обработчики событий.

Цитата(Djinn @  5.10.2009,  19:23 Найти цитируемый пост)
И это тоже smile

Опять, читайте книгу. Любую о программировании Access. Рекомендую "Разработка настольных приложений в MS Access 2003".

P.S.
Цитата(Djinn @  5.10.2009,  19:23 Найти цитируемый пост)
Я думаю это не важно smile и у меня не модуль типа: Class 

Форма это и есть класс.

Автор: Djinn 6.10.2009, 00:34
Цитата(bopoha @  5.10.2009,  23:02 Найти цитируемый пост)
См. книжку. Темы события форм и обработчики событий.

Нет событий которые исполняются сами... все Events исполняются с помощью пользователя... например фокус мышки...


Цитата(bopoha @  5.10.2009,  23:02 Найти цитируемый пост)
Выражения записываются по другому. Воспользуйтесь мастером (кнопка с многоточием в окне Свойств напротив Свойства). Я вообще-то предполагал, что туда будет записана фукнция.

Если в данные Поле2(Input2.Value, в которое надо присвоить данные) вписать функцию, то будет ошибка:
Код

Поле5.Value 'недоступно

В Поле1(Input1.Value, которое записываем) данные уже заняты, ибо там стоить поле из запроса (которое собственно и заполняет эти поля). Вот в чем дело :( поэтому и ищу чтобы в выражение еще какой-то Events найти smile кторые выполняется после "Днные" но также автоматически при создании поля smile


bopoha, Сенкс что помогаешь smile

Автор: Akina 6.10.2009, 07:34
Нет такого события как создание поля. Вообще нет!
Все необходимые действия по настройке начального вида формы делаются в Form_Load().
Индивидуализация вида контролов выполняется в AfterLayout, BeforeRender, AfterRender или AfterFinalRender.

Не поленитесь посмотреть цепь событий, возникающих при открытии формы.

Автор: Djinn 6.10.2009, 07:45
Цитата(Akina @  6.10.2009,  07:34 Найти цитируемый пост)
Индивидуализация вида контролов выполняется в AfterLayout, BeforeRender, AfterRender или AfterFinalRender.

Не поленитесь посмотреть цепь событий, возникающих при открытии формы. 


а можно плз ссылочку где можно поконкретнее посмотреть ?

Автор: Akina 6.10.2009, 07:50
Ссылочку? F1. Приведёт во встроенную справку. 
Или MDSN.

Автор: bopoha 6.10.2009, 10:49
Цитата(Djinn @  6.10.2009,  00:34 Найти цитируемый пост)
Нет событий которые исполняются сами... все Events исполняются с помощью пользователя... например фокус мышки...

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

Иницианализцаия формы делается в двух событиях Form_Open или Form_Load. Отличия заключаются в том, что в первом обработчике можно отменить открытие формы.

Цитата(Djinn @  6.10.2009,  07:45 Найти цитируемый пост)
а можно плз ссылочку где можно поконкретнее посмотреть ? 

Встроенной справки достаточно. Рекомендую поставить русский Access 97 (в отедльную папку) со справкой. Там справка на русском и более понятно устроена, чем в Access 2003.

В Access 2003 нужно нажимать F1 из модуля, чтобы получить справку о программировании.

Добавлено через 58 секунд
Что бы долго не разглагольствовать, выкладывайте свою бд с формой.

Автор: Akina 6.10.2009, 10:52
Цитата(bopoha @  6.10.2009,  11:49 Найти цитируемый пост)
более понятно устроена, чем в Access 2003.

Это не так. Просто надо не контекстную справку использовать, а идти через оглавление.

Автор: Djinn 6.10.2009, 22:52
Цитата(bopoha @  6.10.2009,  10:49 Найти цитируемый пост)
Что бы долго не разглагольствовать, выкладывайте свою бд с формой.

http://narod.ru/disk/13889514000/db1.mdb.html Форма5 собственно то что надо... Нужно в Поле5 внести данные из Выражение1 (тоже там поле)

Спасибо smile

Автор: bopoha 6.10.2009, 23:13
Djinn, и в чем проблемма?
Укажите поле "Выражение1" в качестве источника данных для поля "Поле5".

Если обязательно хочется фукнцию, то:
Функция у вас реализована не правильно. Стоит ее писать так:
Код

Public Function grn_to_usd(byval value as integer) as integer
      '-- обработка value
      grn_to_usd = 123123 '-- результат обработки
End Function


В качестве источника данных для формы пишите выражение: =grn_to_usd( nz( [Выражение1]; 0 ) ).

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

Автор: Djinn 6.10.2009, 23:26
Мне нужно сделать источник данных: Выражение1 / 10 (разделить на 10 к примеру)


Цитата(bopoha @  6.10.2009,  23:13 Найти цитируемый пост)

Код

Public Function grn_to_usd(byval value as integer) as integer
      '-- обработка value
      grn_to_usd = 123123 '-- результат обработки
End Function



В качестве источника данных для формы пишите выражение: =grn_to_usd( nz( [Выражение1]; 0 ) ).


Чёт не особо понятно как работает...

Автор: bopoha 7.10.2009, 11:25
Цитата(Djinn @  6.10.2009,  23:26 Найти цитируемый пост)
Чёт не особо понятно как работает...

А вы попробуйте. smile

nz() - это функция, которая принимает 2а параметра, возвращает первый параметр, если он не Null иначе второй параметр. 

Что конкретно не понятно?

Цитата(Djinn @  6.10.2009,  23:26 Найти цитируемый пост)
Мне нужно сделать источник данных: Выражение1 / 10 (разделить на 10 к примеру)

Ну тогда так:
Код

Public Function grn_to_usd(byval value as integer) as integer
      '-- обработка value
      grn_to_usd = value / 10 '-- результат обработки
End Function

Автор: Djinn 7.10.2009, 15:25
bopoha, Спасибо большое, те + smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)