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

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

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

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

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

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

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

Подписчиков на одно событие одного экземпляра класса может быть бесконечное множество, а может и не быть вовсе. Класс про это ничего не знает. Это два.- разве у процедуры не точно так же: вызовов процедуры "может быть бесконечное множество, а может и не быть вовсе. Процедура про это ничего не знает"!
...
Рейтинг: 0 / 0
Q: Event - RaiseEvent - в чем соль??
    #32774716
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диагноз такой: твоя задача не требует создания классов.
Попробуй создать UserControl. Там все поймешъ.
...
Рейтинг: 0 / 0
Q: Event - RaiseEvent - в чем соль??
    #32774772
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли так сказать, что Call abra - будет/может вызывать только какую-то конкретную абру, определяемую при компиляции кода (а иначе - компиляция просто не сосотоится),
а RiseEvent abra вызывает ту абру, которая "активна" на момент вызова - в зависимости от текущего набора "загруженных" объектов?
...
Рейтинг: 0 / 0
Q: Event - RaiseEvent - в чем соль??
    #32774884
Processor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иван FXSКак это - знает/не знает?
Call вызывает ... то, что там у него ... указано:
А RiseEvent abra и RiseEvent kadabra - разве не абру с кадаброй вызывают??? RaiseEvent - возбудить событие
Возбудил - а там хоть трава не расти!
или:
Моё дело - прокукарекать, а там хоть не рассветай!
...
Рейтинг: 0 / 0
Q: Event - RaiseEvent - в чем соль??
    #32776990
VBaser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё гораздо проще :) 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
Q: Event - RaiseEvent - в чем соль??
    #32777036
VBaser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProcessorМоё дело - прокукарекать, а там хоть не рассветай!
Суть этого замечания в том, что RaiseEvent нужен тогда, когда твой класс хочет тебе что-то сказать.
А вот послушаешь ли ты его или проигнорируешь - твоё личное дело (или программера, который твоим классом пользуется). Некоторые события тебя в данный момент могут не интересовать, как например, ты не обрабатываешь все события формы (Activate, Click, DblClick, Deactivate, GotFocus, Initialize, Load, LostFocus, Paint, QueryUnload, Resize, Terminate, Unload) - а только те, которые тебе нужны.
...
Рейтинг: 0 / 0
Q: Event - RaiseEvent - в чем соль??
    #32777409
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBaserВсё гораздо проще :) ...
Надеюсь, теперь понятно чем RaiseEvent хорош?- да, спасибо, теперь я разобрался: RaiseEvent вызывает именно тот Event , который в не указан, но на этом - на самом деле - все не заканчивается, поскольку сам по себе Event ничего не делает (а просто - "загорается").

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


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