Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Q: Event - RaiseEvent - в чем соль?? / 15 сообщений из 15, страница 1 из 1
09.11.2004, 18:17:52
    #32774281
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Объясните ежику - какие преимущества имеет парочка
Event - RaiseEvent
- перед стандартными
Sub - Call ?
...
Рейтинг: 0 / 0
09.11.2004, 18:25:44
    #32774302
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Иван FXSОбъясните ежику - какие преимущества имеет парочка
Event - RaiseEvent
- перед стандартными
Sub - Call ? Соль в том, что мы пишем приложения по т.н. Event Driven model.
См. MSDN VisualBasic concepts, в частности Understanding the Event-Driven Model

Или вы хотели спросить о чем-то другом ?
...
Рейтинг: 0 / 0
09.11.2004, 18:29:20
    #32774311
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Наверное, об этом ... а "Understanding the Event-Driven Model" - это просто другой способ МЫСЛИТЬ о программах или там РЕАЛЬНО заложены какие-то другие (не процедурные?) МЕХАНИЗМЫ работы программного кода?
...
Рейтинг: 0 / 0
09.11.2004, 18:30:35
    #32774314
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Сорри, я хотел спросить - конечно - про САМУ "Event-Driven Model", а вовсе не про "Understanding" её!
...
Рейтинг: 0 / 0
09.11.2004, 19:15:38
    #32774387
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Разница между ними:
Call знает какой Sub вызовет
RiseEvent - нет.
...
Рейтинг: 0 / 0
09.11.2004, 19:30:42
    #32774399
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Как это - знает/не знает? Моя твоя не понимай: Call вызывает ... то, что там у него ... указано:
Call abra - вызывает абру,
Call kadabra - вызывает кадабру.

А RiseEvent abra и RiseEvent kadabra - разве не абру с кадаброй вызывают???
...
Рейтинг: 0 / 0
09.11.2004, 20:01:12
    #32774417
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Иван FXSКак это - знает/не знает? Моя твоя не понимай: Call вызывает ... то, что там у него ... указано:
Call abra - вызывает абру,
Call kadabra - вызывает кадабру.

А RiseEvent abra и RiseEvent kadabra - разве не абру с кадаброй вызывают???
Нет, не абру с кадаброй. Вызывают обработчики событий abra и cadabra. В случае VB 6 - это методы, названные определенным образом, с определенной сигнатурой, в других языках - вообще с произвольным названием. Это раз.

Подписчиков на одно событие одного экземпляра класса может быть бесконечное множество, а может и не быть вовсе. Класс про это ничего не знает. Это два.
...
Рейтинг: 0 / 0
10.11.2004, 09:20:38
    #32774696
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Я очень хочу увидеть разницу, но пока что ее не вижу:
RiseEvent вызывает "не абру с кадаброй, а обработчики событий abra и cadabra" - говорите Вы ...
Чем это отличается от:
Call вызывает "не абру с кадаброй, а процедуры (функции) abra и cadabra"???

"В случае VB 6 - это методы, названные определенным образом, с определенной сигнатурой" - говорите Вы ... ну так и процедура любая - "с определенной сигнатурой"!

"В других языках - вообще с произвольным названием" - вот это, честно, не понял: если название произвольно, то как компилятор его ассоциирует с КОНКРЕТНЫМ вызовом?

Подписчиков на одно событие одного экземпляра класса может быть бесконечное множество, а может и не быть вовсе. Класс про это ничего не знает. Это два.- разве у процедуры не точно так же: вызовов процедуры "может быть бесконечное множество, а может и не быть вовсе. Процедура про это ничего не знает"!
...
Рейтинг: 0 / 0
10.11.2004, 09:29:42
    #32774716
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Диагноз такой: твоя задача не требует создания классов.
Попробуй создать UserControl. Там все поймешъ.
...
Рейтинг: 0 / 0
10.11.2004, 09:56:52
    #32774772
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Можно ли так сказать, что Call abra - будет/может вызывать только какую-то конкретную абру, определяемую при компиляции кода (а иначе - компиляция просто не сосотоится),
а RiseEvent abra вызывает ту абру, которая "активна" на момент вызова - в зависимости от текущего набора "загруженных" объектов?
...
Рейтинг: 0 / 0
10.11.2004, 10:40:44
    #32774884
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Иван FXSКак это - знает/не знает?
Call вызывает ... то, что там у него ... указано:
А RiseEvent abra и RiseEvent kadabra - разве не абру с кадаброй вызывают??? RaiseEvent - возбудить событие
Возбудил - а там хоть трава не расти!
или:
Моё дело - прокукарекать, а там хоть не рассветай!
...
Рейтинг: 0 / 0
11.11.2004, 11:18:10
    #32776990
VBaser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
Всё гораздо проще :) Call предназначен для обычных функций (function/sub) , RaiseEvent - для событий классов и собственных контролов. Event можно отличить по его имени - всегда имя переменной_имя события (cmdConfirm_Click, objMySmtp_Disconnect, ...).

Предположим, мы пишем класс, который имплементирует наше собственное меню - сам его определяет, рисует, обрабатывает действия пользователя и т.д. Тогда в коде класса будет:
Код: plaintext
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.
...
Public Event Clicked(ID as MenuIdent)
...

Public Function ShowPopup(ID as MenuIdent, intX as Integer, intY as Integer, _
                          Optional ExtraOptions as MenuOpts) as Long
' рисует контекстное "right-click" меню и ждет действий пользователя

    Dim lSelection as Long
    Dim SubItemID as MenuIdent

    Call DrawMenuBox(...)  ' здесь рисуем
    While Not lSelection
    ' цикл ожидания: в нем следим за мышкой и клавой
        ...
        ...
        ' предположим, что была выбрана опция в меню
        RaiseEvent Clicked(SubItemID)
        ...
    Wend

    ShowPopup = lSelection

End Function

...

В форме, которая этим меню захочет воспользоваться, мы напишем:

Код: plaintext
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.
28.
...
Private WithEvents objContextMenu as IvanMenu
...

Private Sub Form_MouseUp(Button as Integer, Shift as Integer, X as Single, Y as Single)
' пользователь кликнул мышкой по самой форме

    If Button = vbRightButton Then
        objContextMenu.ShowPopup objContextMenu.MyID, X, Y +  15 
    End If

End Sub

Private Sub objContextMenu_Clicked(ID as MenuIdent)
' а здесь мы обрабатываем выбор опции из менюшки
' пишем любой код, который нам нужен, а "рамочку" самой функции (имя, параметры)
' вставляем выбором objContextMenu из списка Object над окошком кода (левый список)
' и выбором события Clicked из списка Procedure над окошком кода (правый список)

    Select Case ID
    Case mnuLaunch
       ...
    Case mnuExitProgram
       ...
    End Select

End Sub

...

Теперь, если мы захотим добавить еще одну менюшку, то определим её : Private WithEvents objAnotherMenu as IvanMenu , а в коде формочки добавится функция (или процедура - по желанию): Private Function objAnotherMenu_Clicked(ID as MenuIdent).


Надеюсь, теперь понятно чем RaiseEvent хорош?
...
Рейтинг: 0 / 0
11.11.2004, 11:26:42
    #32777036
VBaser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
ProcessorМоё дело - прокукарекать, а там хоть не рассветай!
Суть этого замечания в том, что RaiseEvent нужен тогда, когда твой класс хочет тебе что-то сказать.
А вот послушаешь ли ты его или проигнорируешь - твоё личное дело (или программера, который твоим классом пользуется). Некоторые события тебя в данный момент могут не интересовать, как например, ты не обрабатываешь все события формы (Activate, Click, DblClick, Deactivate, GotFocus, Initialize, Load, LostFocus, Paint, QueryUnload, Resize, Terminate, Unload) - а только те, которые тебе нужны.
...
Рейтинг: 0 / 0
11.11.2004, 13:20:49
    #32777409
Иван FXS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
VBaserВсё гораздо проще :) ...
Надеюсь, теперь понятно чем RaiseEvent хорош?- да, спасибо, теперь я разобрался: RaiseEvent вызывает именно тот Event , который в не указан, но на этом - на самом деле - все не заканчивается, поскольку сам по себе Event ничего не делает (а просто - "загорается").

"Делание" происходит в других объектах, которые - по своему усмотрению - этот Event "подхватывают", и об этом тот объект, в котором находится RaiseEvent , в самом деле ничего не знает!
...
Рейтинг: 0 / 0
11.11.2004, 17:03:10
    #32778046
Processor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q: Event - RaiseEvent - в чем соль??
VBaserСуть этого замечания в том, что RaiseEvent нужен тогда, когда твой класс хочет тебе что-то сказать.
Например, в асинхронных запросах этот "твой класс" только через обработчики событий может получить осмысленный ответ сервера с минимальной задержкой , обработать его и в свою очередь возбудить событие, понятное пользователю этого класса.
"Event-Driven Model" позволяет упростить процесс проектирования взаимодействия модулей.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Q: Event - RaiseEvent - в чем соль?? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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