Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с CreateEventProc / 11 сообщений из 11, страница 1 из 1
21.04.2012, 05:50
    #37764201
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
Мое почтение уважаемым форумчанам!
Прежде чем создать тему уже успел залистать до дыр сей прекрасный форум и гугл. И только на форуме были найдены наиболее близкие темы 1 , 2 , 3 . Используя Фы1 находим код, который успешно отрабатывает (см. под спойлером)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Public Function ClickEventProc() As Boolean
    Dim frm As Form, ctl As Control, mdl As Module
    Dim lngReturn As Long

    On Error GoTo Error_ClickEventProc
    ' Create new form.
    Set frm = CreateForm
    ' Create command button on form.
    Set ctl = CreateControl(frm.Name, acCommandButton, , , , _
         1000, 1000)
    ctl.Caption = "Click here"
    ' Return reference to form module.
    Set mdl = frm.Module
    ' Add event procedure.
    lngReturn = mdl.CreateEventProc("Click", ctl.Name)
    ' Insert text into body of procedure.
    mdl.InsertLines lngReturn + 1, vbTab & "MsgBox ""Way cool!"""
    ClickEventProc = True

Exit_ClickEventProc:
    Exit Function

Error_ClickEventProc:
    MsgBox Err & " :" & Err.Description
    ClickEventProc = False
    Resume Exit_ClickEventProc
End Function



Но мне необходимо прописать событие не для контрола, а для формы, поэтому заменяю строку
lngReturn = mdl.CreateEventProc("Click", ctl.Name)
на
lngReturn = mdl.CreateEventProc("Unload", frm.Name)
после чего получаю сообщение об ошибке "57017 :Event handler is invalid". Собственно вопрос в том, как привязать процедуру обработки события к форме? Что делаю не так?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Public Function ClickEventProc() As Boolean
    Dim frm As Form, ctl As Control, mdl As Module
    Dim lngReturn As Long

    On Error GoTo Error_ClickEventProc
    ' Create new form.
    Set frm = CreateForm
    ' Create command button on form.
    Set ctl = CreateControl(frm.Name, acCommandButton, , , , _
         1000, 1000)
    ctl.Caption = "Click here"
    ' Return reference to form module.
    Set mdl = frm.Module
    ' Add event procedure.
    lngReturn = mdl.CreateEventProc("Unload", frm.Name)
    ' Insert text into body of procedure.
    mdl.InsertLines lngReturn + 1, vbTab & "MsgBox ""Way cool!"""
    ClickEventProc = True

Exit_ClickEventProc:
    Exit Function

Error_ClickEventProc:
    MsgBox Err & " :" & Err.Description
    ClickEventProc = False
    Resume Exit_ClickEventProc
End Function



З.Ы. [event procedure] не помогает, т.к. вызов функции возникает позже события, которое необходимо обработать.
...
Рейтинг: 0 / 0
21.04.2012, 06:15
    #37764209
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
vremennyy
Код: vbnet
1.
    lngReturn = mdl.CreateEventProc("Unload", frm.Name)


Должно быть
Код: vbnet
1.
    lngReturn = mdl.CreateEventProc("Unload", "Form")
...
Рейтинг: 0 / 0
21.04.2012, 06:53
    #37764218
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
Если lngReturn = mdl.CreateEventProc("Unload", "Form"), то создается блок
Код: vbnet
1.
2.
3.
4.
Private Sub Form_Unload(Cancel As Integer)


End Sub



но получаем сообщение "Can't enter break mode at this time" с вариантами Continue, End, Help.
По Helpу получаем
Can't enter break mode at this time


Break mode is the state in which a program is still running, but its activity is suspended. This error has the following cause and solution:

You tried to enter break mode, for example, by pressing CTRL+BREAK (Windows) or COMMAND+PERIOD (Macintosh), pressing the Break button on the Standard toolbar or the Debug toolbar, or by executing a breakpoint in the running code.
A change was made programmatically to the project using the extensibility (add-in) object model. This prevents the program from having execution suspended. You can continue running, or end execution, but can't suspend execution.

For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

что перевел гугл

Не могу войти в режим приостановки в настоящее время


Перерыв режим государства, в котором программа еще работает, но его деятельность приостановлена​​. Эта ошибка имеет следующие причины и решения:

Вы попытались войти в режим приостановки, например, нажав CTRL + BREAK (Windows) или COMMAND + ПЕРИОД (Macintosh), нажав кнопку Перерыв на стандартной панели инструментов или панели инструментов Отладка или выполнить контрольную точку в исполняемый код.
Изменение было сделано программно в проект с помощью расширения (надстройки) объектной модели. Это предотвращает программа от того, выполнение приостановлено. Вы можете продолжать работу, или в конце исполнения, но не может приостановить исполнение.

Для получения дополнительной информации, выберите элемент в Формуле-1 вопрос и нажмите кнопку (в Windows) или ПОМОЩЬ (на Macintosh).


после нажатия "Continue" получаем MsgBox "Way cool!"
Код: vbnet
1.
2.
3.
4.
Private Sub Form_Unload(Cancel As Integer)
    MsgBox "Way cool!"

End Sub


Как программно пройти "Continue" (а лучше и не видеть его, и обойти эту ошибку) и закрыть программно окно модуля формы?
...
Рейтинг: 0 / 0
21.04.2012, 07:00
    #37764219
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
спасибо огромное, Serge Gavrilov , ваш ответ здесь процедуру создает и здесь закрывает окно модуля формы.
...
Рейтинг: 0 / 0
21.04.2012, 07:10
    #37764220
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
Сумбурный ответ получился. В общем, ответы Serge Gavrilov в этой теме и указанной в предыдущем сообщении решают вопрос, за что огромное спасибо (и как только люди такими умными становятся).
Непонятно только почему при первом запуске выводится сообщение "Can't enter break mode at this time", а после контина во всех последующих запусках его уже нет... как-то это подозрительно... как бы при первом запуске его обходить?
...
Рейтинг: 0 / 0
21.04.2012, 07:49
    #37764230
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
vremennyy,

А Вы как программно создаёте код для событии формы? Покажите полный листинг программы. Может Вы пытаетесь добавить код, когда ещё модуль формы не существует? Или ещё "не готов"? Я имею ввиду, когда мы создаём форму, то она ещё не имеет модуль. Если же мы в свойство "HasModule" ставим True, то Access создаёт модуль для формы.
Возможно (это моё предположение не более того) Access'у нужно пусть хоть ничтожное, но время для создания модуля. Т.е. нужно дать "передышку" и только потом продолжать. Ну чтобы "вступило в силу" свойство "HasModule".
Ну точный ответ даст только эксперимент!
...
Рейтинг: 0 / 0
21.04.2012, 08:11
    #37764239
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
studierenvremennyy,
HasModule. Ну точный ответ даст только эксперимент!

Проверку "работает - не работает" проверял на функции из хелпа (под первым спойлером в первом посте), в своем же модуле HasModule = True стоял (игры с бубном были долгими), потом его закомментил, прочитал ваше сообщение - снова раскомментировал (на всякий случай:). Эксперимент конечно сильная штука, но блин, окно с ошибкой уже не выпадает...
...
Рейтинг: 0 / 0
21.04.2012, 08:12
    #37764240
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
Эксперимент конечно сильная штука, но блин, окно с ошибкой уже не выпадает... хоть с хазмодуля хоть без...
...
Рейтинг: 0 / 0
21.04.2012, 09:38
    #37764254
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
vremennyy,

А "on error resume next" попробовали тупо отключить сообщение об ошибке?
Можно ещё с помощью Do While продолжать до тех пор, пока ошибки не исчезнут.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim i As Byte

On Error Resume Next
Do
    Err.Clear
    i = i + 1
    ' здесь совершаем какие-то действия.
    ' пробуем повторить цикл 10 раз
Loop While Err.Number <> 0 Or i <= 10
...
Рейтинг: 0 / 0
21.04.2012, 10:01
    #37764263
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
studierenvremennyy,

А "on error resume next" попробовали тупо отключить сообщение об ошибке?
Можно ещё с помощью Do While продолжать до тех пор, пока ошибки не исчезнут.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim i As Byte

On Error Resume Next
Do
    Err.Clear
    i = i + 1
    ' здесь совершаем какие-то действия.
    ' пробуем повторить цикл 10 раз
Loop While Err.Number <> 0 Or i <= 10



так в том-то и дело, что ошибка появилась только первый раз. А теперь ошибок нет (код не менял), даже после перезапуска проекта. Может и вопрос уже исчерпан.
...
Рейтинг: 0 / 0
21.04.2012, 10:03
    #37764265
vremennyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с CreateEventProc
А "on error resume next" не успел попробовать.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите с CreateEventProc / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]