Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / For Each / 12 сообщений из 12, страница 1 из 1
01.11.2011, 16:49
    #37507146
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Не могу понять почему не работает.
Создал клас ClsPlayer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public LenTrack As Long
Public PotPosicion As Long
Public Volume As Long
Public InActive As Boolean
Public InEnd As Boolean
Public InReady As Boolean
Public NameFile As String
Public IDPlayer As Long
...не важно
Описал масив в модуле
Код: plaintext
1.
Public PBClsPlayers( 9 ) As New ClsPlayer

И вот плохие новости
Код: plaintext
1.
2.
3.
4.
Public Sub Proba()
 For Each Pl In PBClsPlayers
   MsgBox Pl.Volume
 Next
End Sub
...
Рейтинг: 0 / 0
01.11.2011, 16:50
    #37507149
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
А вопше нужен способ динамического создания, удаления и перебор переменной описаного класа. Не умею делать
...
Рейтинг: 0 / 0
01.11.2011, 16:52
    #37507154
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Надо создавать не массив, а коллекцию
...
Рейтинг: 0 / 0
01.11.2011, 16:57
    #37507163
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Колекцию могу создать. Не знаю как привязку зделать и перебор. Add/Del/Count - знаю
...
Рейтинг: 0 / 0
01.11.2011, 17:00
    #37507168
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Перебор как раз For Each
ну или можно For Next до Count-а
...
Рейтинг: 0 / 0
01.11.2011, 17:09
    #37507182
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Код: plaintext
1.
Dim m As New Collection
m.Add ClsPlayer

дальше дает ошибку. что-то не то
?m.Item(1).Volume
...
Рейтинг: 0 / 0
01.11.2011, 17:13
    #37507187
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
For Each с масивом класа не хочет работать
остается только For Next
...
Рейтинг: 0 / 0
01.11.2011, 17:17
    #37507194
For Each
Андрей159
Код: plaintext
m.Add ClsPlayer
Нужно добавлять экземпляр класса. Создать его можно с помощью New, например, т. е. m.Add New ClsPlayer. А так - бессмыслица.
...
Рейтинг: 0 / 0
01.11.2011, 17:21
    #37507202
For Each
Впрочем, можно дать плохой совет: создать функцию или Property Get с именем класса, возвращающую вновь созданный экземпляр класса:
Код: plaintext
1.
2.
Function ClsPlayer() As ClsPlayer
 Set ClsPlayer= New ClsPlayer
End Function
Тогда можно пользоваться конструкцией
Код: plaintext
m.Add ClsPlayer
...
Рейтинг: 0 / 0
01.11.2011, 19:48
    #37507430
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Хороший совет. Спасибо .
Впрочем различия между быстрой привязкой и позной нету
и так
Код: plaintext
 Public PBPlayers As New ClsPlayer
и так
Код: plaintext
1.
 Public PBPlayers As ClsPlayer
 Set PBPlayers = New ClsPlayer
работает
эксперементировал
Код: plaintext
1.
2.
  Dim m As New Collection
  m.Add PBPlayers
 ?m( 1 ).Volume

и вопрос уже не совсем по этой теме.
Нужно срабатывания процедуры или функции внутри класа по установленому таймеру (без поддержки формы и творческой фигни Do While Loop DoEvents.Такое реально ?
...
Рейтинг: 0 / 0
01.11.2011, 20:01
    #37507441
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
For Each
Есть API
Код: plaintext
1.
2.
3.
Private Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, _
  ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
найдешь, надеюсь, как с этим работать
...
Рейтинг: 0 / 0
02.11.2011, 12:02
    #37508169
For Each
Андрей159Впрочем различия между быстрой привязкой и позной нету
и так
Код: plaintext
 Public PBPlayers As New ClsPlayer
и так
Код: plaintext
1.
 Public PBPlayers As ClsPlayer
 Set PBPlayers = New ClsPlayer
работает
эксперементировал
Код: plaintext
1.
2.
  Dim m As New Collection
  m.Add PBPlayers
 ?m( 1 ).Volume
Если под быстрой и поздней привязкой подразумевается early binding и late binding, то ты неправильно их понимаешь, здесь в обоих случаях early binding. Подробно эти понятия разъяснены здесь .

Андрей159и вопрос уже не совсем по этой теме.
Нужно срабатывания процедуры или функции внутри класа по установленому таймеру (без поддержки формы и творческой фигни Do While Loop DoEvents.Такое реально ? Реально. Но сообщение таймера (WM_TIMER) всё равно попадает в очередь сообщений окна, т. е. окно должно быть (хотя бы одно, можно невидимое). Кто-то использует SetTimer/KillTimer, а можно обойтись и по-простому, без явного вызова функция WinAPI, создавая в экземпляре класса экземпляр невидимой формы с таймером.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / For Each / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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