Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как программно создать процедуру обработки события  [new]
Volan
Member

Откуда:
Сообщений: 79
Аксесс 2000 win 2000
Есть такая задача: программно создаю форму в которой находится от 10 до 100 флажков. Пользователь должен поставить галочки на некоторых из них. При каждом обновлении любого флажка вызывается одна и таже процедура обработки.
Форма простая не привязана к данным, поэтому событие внесение измененй (Dirty) не работает.
При загрузке формы для всех флажков устананавливаю
Me(флажок(n)).AfterUpdate = "[Event Procedure]"

А в конструкторе заранее набито 100 процедур типа:
Private Sub флажок1_AfterUpdate()
Процедура_Обработка
End Sub
Private Sub флажок2_AfterUpdate()
Процедура_Обработка
End Sub

....

Private Sub флажок100_AfterUpdate()
Процедура_Обработка
End Sub

по тупому но работает

грядет новое обновление и флажков может стать и больше. Очень уж не хочется настолько в лоб писать еще 100 процедур

На какое событие можно поставить вызов процедуры "Процедура_Обработка" чтобы она вызывалась на изменение галочки у любого флажка?
20 июн 05, 13:52    [1633289]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
SRG
Member

Откуда: Архангельск
Сообщений: 59
Примерно так

Создать класс clsFlag:
Dim WithEvents my_ctl As CheckBox

Public Property Get my_prpCtl() As CheckBox
Set my_prpCtl = my_ctl
End Property

Public Property Set my_prpCtl(ByVal vNewValue As CheckBox)
Set my_ctl = vNewValue

With my_ctl
    .AfterUpdate= "[Event Procedure]"
End With

End Property

Private Sub my_ctl_AfterUpdate()
msgbox "AfterUpdate"
End Sub

В модуле класса формы:
(При загрузке формы каждому флажку присваивается свой объект класса clsFlag)

dim colFlag as new collection

Private Sub Form_Load()
dim ctl as control
dim objFlag as clsFlag
for each ctl in me.controls
if ctl.controltype=accheckbox then
set objFlag=new clsFlag
set clsFlag.my_prpCtl = ctl
call colFlag.Add( objFlag)
end if 
next ctl
End Sub
20 июн 05, 14:25    [1633443]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Volan
Member

Откуда:
Сообщений: 79
Похоже чего-то не понял. (никогда не создавал классы)
При компиляции говорит не создан класс clsFlag. Да и по тексту примера явно он нигде не задается.
Может я пропустил что-то, понятное по умолчанию????
20 июн 05, 15:07    [1633646]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
Volan

При загрузке формы для всех флажков устананавливаю
Me(флажок(n)).AfterUpdate = "[Event Procedure]"

А в конструкторе заранее набито 100 процедур типа:
Private Sub флажок1_AfterUpdate()
Процедура_Обработка
End Sub
Private Sub флажок2_AfterUpdate()
Процедура_Обработка
End Sub


А так?

Me(флажок(n)).AfterUpdate = "=Процедура_Обработка()"

NB! Процедура_Обработка должна быть function
20 июн 05, 16:25    [1634067]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Volan
Member

Откуда:
Сообщений: 79
с функцией не получается: вызывает ошибку "объект не содержит программируемый объект "функция_обработки""
20 июн 05, 16:36    [1634125]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
Volan
с функцией не получается: вызывает ошибку "объект не содержит программируемый объект "функция_обработки""

А "Процедура_Обработка" - она sub или function? Public?
20 июн 05, 16:39    [1634135]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Andres 1
Member

Откуда: Эстония
Сообщений: 1191
Только что проверил. Работает.

В обычном модуле функция
Public Function test()
  MsgBox ("test")
End Function

forms(0).Controls(6).afterupdate="=test()" - скобки и знак равенства нужны!

Работает.
20 июн 05, 16:45    [1634158]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Volan
Member

Откуда:
Сообщений: 79
Потрясно. Работает с функцией. Хотя я уверен, что и "=" и "()" стояли и не работало с этого я начал еще 2 дня назад.
Спасибо. Заодно и с модулем класса разобрался.
20 июн 05, 16:57    [1634216]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Dima S
Member

Откуда:
Сообщений: 22
> forms(0).Controls(6).afterupdate="=test()"

По поводу этой конструкции. А что, если обработчик с параметрами?

Нужно в модуле класса назначить обработчик события Print для области данных отчета.
31 авг 05, 19:18    [1834365]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Dima S
Member

Откуда:
Сообщений: 22
up
1 сен 05, 10:23    [1835333]     Ответить | Цитировать Сообщить модератору
 Re: Как программно создать процедуру обработки события  [new]
Dima S
Member

Откуда:
Сообщений: 22
вообще сама возможность такого есть?
2 сен 05, 10:56    [1839741]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить