Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Свой event в форме / 20 сообщений из 20, страница 1 из 1
27.06.2012, 20:38
    #37857863
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Про event почти ничего не знаю.
Нужно чтоб в форме сработало свое событие, но вызов чтоб осуществлялся из модуля. Возможно ?
...
Рейтинг: 0 / 0
27.06.2012, 21:01
    #37857896
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Конечно
- Создаешь модуль класса MyClass
- Прописываешь в нем событие
Код: vbnet
1.
Public Event ABC(Parm1 As String)

- В форме объявляешь переменную с перехватом событий
Код: vbnet
1.
Private WithEvents KKK As MyClass

- Создаешь новый экземпляр класса
Код: vbnet
1.
Set KKK = New MyClass

- Создаешь обработчик события ABC в форме (так же, как и событие формы и ее контролов - оно будет в выпадающем списке)
- В классе генерируешь событие
Код: vbnet
1.
RaiseEvent ABC("kkk")
...
Рейтинг: 0 / 0
27.06.2012, 22:24
    #37857967
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Пересмотрел десяток примеров, хотел разобраться сам...подходящего не нашел. Есть вопрос по Вашему примеру

Set KKK = New MyClass должно быть в событии Form_load ? Если да, то я чего-то еще не знаю. Сделал все, пробовал ковирялся, но не срабатывает. Есть архив
...
Рейтинг: 0 / 0
27.06.2012, 22:28
    #37857973
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Потому что ты создаешь ДВА РАЗНЫХ экземпляра класса. Один в форме, один в модуле. Событие ты генеришь в классе, который в модуле, а ожидаешь его на форме - там его не будет.
...
Рейтинг: 0 / 0
27.06.2012, 22:32
    #37857975
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Адаптировал твой пример
...
Рейтинг: 0 / 0
27.06.2012, 22:35
    #37857978
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Shocker.ProАдаптировал твой примеротличие в том, что в двух переменных ссылка на один и тот же экземпляр класса. При этом вторая переменная запросто приватная и видна только внутри формы. А у тебя, как я уже сказал, было два разных класса в двух разных переменных.
...
Рейтинг: 0 / 0
27.06.2012, 23:05
    #37858001
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Спасибо за урок. Распечатаю чтоб понять, а то розкинул окна на два больших монитора а толку то... Нужно разобраться чтоб не краснеть

Большое спасибо
В VB я такой трюк могу обойти простым элементом TextBox, которому присвою любое значение и сработает в любой форме события Change.
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Text1_Change()
  If Text1.Text = "" Then Exit Sub
  Text1.Text = ""
'Исполняю нужные действия для этой формы
End Sub


Так я и делал много раз.

А в MSACESS так не получалось. Да и вобще там много подножек. Хорошо что хоть windows 7 снес, ели удалось установить на моноблок Windows XP (и то только готовый образ). Взялся за разработку б/д под течпад, только головная боль

Надеюсь теперь дела хоть пойдут
...
Рейтинг: 0 / 0
27.06.2012, 23:11
    #37858009
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Всё понятно.
Код: vbnet
1.
2.
 Init
 Set kkk1 = kkk


Будет работать

Код: vbnet
1.
2.
3.
 
 Set kkk1 = kkk
Init


а так не будет

Видимо это значит, что моя задача не выполнима. Поскольку если с другой формы сделать [b]Init то в этой форме событие не сработает :([/b]
...
Рейтинг: 0 / 0
27.06.2012, 23:14
    #37858012
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
SORY SORY SPRY

Отлично. Я немножко запутался. Все работает отлично!!!
...
Рейтинг: 0 / 0
27.06.2012, 23:17
    #37858016
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Выложу полностью программу на две формы. Может кому в следующий раз тоже пригодится.
...
Рейтинг: 0 / 0
22.10.2012, 14:10
    #38008154
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Еще есть вопрос
1. Создал клас ClPlayer
2. В рабочем режиме программа дает задание обращаясь к класу через колекцию
Код: vbnet
1.
2.
Public PBPlayerInCollection As ClPlayer
Public PBPlayer As New Collection


--------------
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PlayerInCollection.OpenFile MdbMusicPls("FullPath")
PlayerInCollection.VolumeBlA = Chislo(MdbMusicPls("VolumeBlA"))
PlayerInCollection.RunABLen = Chislo(MdbMusicPls("RunABLen"))
PlayerInCollection.RunABPos = Chislo(MdbMusicPls("RunABPos"))
PlayerInCollection.VolumeBlBC = Chislo(MdbMusicPls("VolumeBlBC"))
PlayerInCollection.VolumeBlD = Chislo(MdbMusicPls("VolumeBlD"))
PlayerInCollection.RunCDPos = Chislo(MdbMusicPls("RunCDPos"))
PlayerInCollection.RunCDLen = Chislo(MdbMusicPls("RunCDLen"))
PlayerInCollection.CutStart = Chislo(MdbMusicPls("StartCutTime"))
PlayerInCollection.CutEnd = Chislo(MdbMusicPls("EndCutTime"))
PBPlayer.Add PlayerInCollection


Когда запускаю функцию, то мне нужно чтоб в форме сработало действие CreateExemplar(Nomer)
Код: vbnet
1.
PBPlayer(f).Play


а по окончанию (там на таймерах работает), чтоб сработало DeleteExemplar(Nomer)
и RaiseEvent DeleteExemplar(NomerExemplar)

На форме для визуализации задействовано 3 элемента масива, для этого я и регистрирую/удаляю номер масива к которому буду обращаться

По предыдущему примеру собития не возникает.
Я так понял что я использую экземпляр в котором не возникает собития в настоящий момент, а там где возникает то оно передается в никуда.

Как воспользоваться тогда Event-ом если у меня клас в колекции ?
...
Рейтинг: 0 / 0
22.10.2012, 14:28
    #38008191
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Кажется легче сделать Form111.EventStop.Caption = Timer
для Label
Private Sub EventStop_Change()
Stop
End Sub
чем ломать голову с эвентами. Хотя неохота повсюду будет менять Form111 и клепать элементы за всякий раз
...
Рейтинг: 0 / 0
22.10.2012, 23:45
    #38009011
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Андрей159,

в 8197167 показано, как можно делать коллекцию, которая транслирует события своих элементов в события коллекции.
...
Рейтинг: 0 / 0
23.10.2012, 00:23
    #38009035
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Спасибо. Полезно. Разобрался.
Много чего не описано о методе SET . С виду команда очень как-бы простая.
Но если создать TextBox1 и глобальную например переменную V , тогда
Set v = TextBox1
не просто передаст все значения с TextBox1 в v , но также они будут связаны.
Это можно анализировать когда остановить на паузу программу и менять v , к примеру v = timer . В результате мы увидим изменения в TextBox1 . Если мы запустим программу и изменим значения в поле TextBox1 , то проверив значения v - окажется что оно идентичное. Таким образом переменная v унаследует и события, но его нужно также дополнительно заявить чтоб оно сработало. По этой причине у меня не получалось.

Буквально пол года назад, когда успехи хорошенько пошли с разработкой классов, я начал минимизировать почти весь код, тем самым упрощая запутанную логику для многозадачной программы. Но нашел очень таки отрицательную черту - потеря скорости (заметное торможение). Работая с массивом исполнение программы было намного быстрее
...
Рейтинг: 0 / 0
23.10.2012, 01:57
    #38009075
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Андрей159,

К сожалению, Вы действительно что-то очень базовое пропустили про Set. Процитирую хелп к VB6:Set Statement...
Generally, when you use Set to assign an object reference to a variable, no copy of the object is created for that variable. Instead, a reference to the object is created. More than one object variable can refer to the same object. Because such variables are references to the object rather than copies of the object, any change in the object is reflected in all variables that refer to it. However, when you use the New keyword in the Set statement, you are actually creating an instance of the object.ПризнаЦЦа, не представляю, какие тут могут быть альтернативные толкования. Разве что можно добавить, что наряду с оператором New может быть вызов функции, метода, или свойства, создающий экземпляр объекта, но надо смотреть документацию к функции/методу/свойству так ли это, и возвращаеЦЦа ли ссылка на новый объект или на существующий (для примера, сравните, функции CreateObject и GetObject).
...
Рейтинг: 0 / 0
23.10.2012, 04:20
    #38009113
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
В одном из примеров нашел еще вот такой пример
Записано в глобальном модуле
Код: vbnet
1.
Call frmMemory.chkSYNC_Click


Раньше такого не практиковал. В моей библии тоже ни слова об этом
...
Рейтинг: 0 / 0
23.10.2012, 04:24
    #38009114
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
но для того чтоб сработало chkSYNC_Click
в форме вместо private пишем public
...
Рейтинг: 0 / 0
23.10.2012, 04:37
    #38009115
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
А нахрен я себе мозги тогда два года парил с Events если можно из любой глобальной процедуры вызвать свой Event ?
Никто подобного чotto не советовал...


В форме Form1
Код: vbnet
1.
2.
3.
4.
5.
6.
Public Sub EventPlay()
  MsgBox "Yapona mat"
End Sub
Private Sub Command4_Click()
  Call Zapusk
End Sub



В модуле
Код: vbnet
1.
2.
3.
Public Sub Zapusk()
  Call Form1.EventPlay
End Sub
...
Рейтинг: 0 / 0
23.10.2012, 04:48
    #38009119
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Наверное, надо было сначала объектную модель языка изучить... А затем уже программировать.
Но мы же обычно всё делаем методом "научного прикосновения" :))
...
Рейтинг: 0 / 0
23.10.2012, 05:05
    #38009124
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Свой event в форме
Согласен)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Свой event в форме / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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