Массив Объектов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Массив Объектов

Сообщение Taras2 » 13.10.2003 (Пн) 8:40

Хочу получить массив объектов из своего класса.

при попытке задекларировать

Private WithEvents MyObject() as MyClass

ругается на скобки а при попытке задекларировать вот так:

Private MyObject() as MyClass

все ок. Но события мне необходимы. Я так понимаю дело в Index объектов, но где он описывается?

Спасибо!

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 13.10.2003 (Пн) 12:29

Маcсив объектов создается следующим образом:

1)Устанавливается объект, который будет массивом.
2) Прав. кл. мыши - копировать
3) Прав. кл. мыши - вставить - подтвердить создание массива


Или так создается:

Дается одинаковое имя двум и более однотипным объектам, но разное индексы этим объектам.

П.С.
В событийной процедуре объектов есть входной параметр Index, через него можно обратится к активному элементу массива.

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 13.10.2003 (Пн) 13:27

Vitaly1 писал(а):Или так создается:

Дается одинаковое имя двум и более однотипным объектам, но разное индексы этим объектам.

П.С.
В событийной процедуре объектов есть входной параметр Index, через него можно обратится к активному элементу массива.


И как мне в своём классе описать этот индекс?

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 13.10.2003 (Пн) 14:31

Не получится. Нельзя использовать массив объектов с WithEvents
Цитата из MSDN:
You can declare as many individual variables as you like using WithEvents, but you can't create arrays with WithEvents. You can't use New with WithEvents.


Что у тебя за задача?
Может, можно выкрутиться, если в объекте хранить индекс его в массиве и выкидывать его в качестве параметра ивента?..

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 13.10.2003 (Пн) 14:47

И как мне в своём классе описать этот индекс?

В классе никак не описывать, а в свойствах объекта расположенного на форме установить свойство Index = 1 или 2 или 3 и т.д.
А в событийной процедуре, например:
if CommandButton1(index).caption ="1" then
.
.

Не получится. Нельзя использовать массив объектов с WithEvents
Цитата из MSDN:
- делал массивы кнопок на форме и прекрасно обрабатывал их событие Click!

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 13.10.2003 (Пн) 15:05

делал массивы кнопок на форме и прекрасно обрабатывал их событие Click!


Массив контролов - конечно! Но речь-то не об этом. Человек же свой класс с событиями описал и хочет обрабатывать события от объектов этого класса...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.10.2003 (Пн) 15:09

Человеку прежде чем писать свои классы лучше бы основы языка на котором он пишет выучить.

Потому что задавать вопрос "а почему у меня вылезает ошибка компиляции" это примерно как "почему я ударился головой о стену и тепреь она болит?"

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 13.10.2003 (Пн) 15:31

RayShade писал(а):Человеку прежде чем писать свои классы лучше бы основы языка на котором он пишет выучить.
Потому что задавать вопрос "а почему у меня вылезает ошибка компиляции" это примерно как "почему я ударился головой о стену и тепреь она болит?"

Ув. модератор, я прошу обратить внимание на имя конференции: Visual Basic для новичков . Кроме того, я не спрашивал пачему, я спрашивал как. Да и никто, даже програмист микрософт, не может сказать, что он знает ВБ полностью.

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 13.10.2003 (Пн) 15:45

Rainbow писал(а):Что у тебя за задача?
Может, можно выкрутиться, если в объекте хранить индекс его в массиве и выкидывать его в качестве параметра ивента?..


Собственно хотелось организовать одновременную многопользовательскую работу. Я описываю работу для одного юзера в классе, а после по мере подключения юзеров создаю объекты которые работают с каждым конкретным юзером.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 13.10.2003 (Пн) 17:09

Хм...
Ну, по-моему, можно попробовать организовать работу так:
Создать еще один класс EventRaiser. В каждого юзера при создании помещать ссылку на этот класс. Из юзера вместо того, чтобы кидать событие, вызывать метод этого класса, передавая в качестве одного из параметров себя (юзера). А этот класс уже будет выкидывать событие. Его может уже словить твой "отловщик" событий и обработать.

Если чего не понятно - спроси - обсудим...

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 14.10.2003 (Вт) 8:33

Rainbow писал(а):Хм...
Ну, по-моему, можно попробовать организовать работу так:
Создать еще один класс EventRaiser. В каждого юзера при создании помещать ссылку на этот класс. Из юзера вместо того, чтобы кидать событие, вызывать метод этого класса, передавая в качестве одного из параметров себя (юзера). А этот класс уже будет выкидывать событие. Его может уже словить твой "отловщик" событий и обработать.

Если чего не понятно - спроси - обсудим...


Тогда может можно в EventRaiser.ReceveEvent() узнать из какого объекта его вызвали. Тогда бы такое решение было максимально приближенно к правильному.

ЗЫ. Или как узнать в методе объекта, индекс объекта которому принадлежит этот метод?

Спасибо.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 14.10.2003 (Вт) 11:35

Если тебе достаточно знать сам объект, то передай объект прямо в методе

MyClass:
Public pEventRaiser as EventRaiser

...
pEventRaiser.RecieveEvent(Me, <и остальные параметры, если они нужны)>

EventRaiser:
Public sub ReceiveEvent(c as MyClass, <и еще всякие параметры>)
<и делай с переданным объектом, что тебе угодно>
End sub

Можешь этот класс использовать, как действительно выкидыватель ивентов (может, какое еще дело ему найдется - так бывает), а можешь прямо тут и делать все, что тебе надо с твоим юзером.

Если же тебе нужно знать еще и индекс в общем массиве, ну тогда при добавлении объекта MyClass сообщай ему, какой он по порядку:
MyClass.index = n
Только тебе придется поддерживать правильные индексы - ведь при удалении элементов индексы в массиве сдвигаются...

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 14.10.2003 (Вт) 13:34

Появилась другая проблема, компилирую проект у себя, запускаю работает. Устанавливаю на другую тачку не идёт. Ошибка возникает при вызове методов из моего класса, вернее не может вызвать метод. Хотя Set MyObject =new MyClass проходит. Никаких своих dll я не создавал. Ссылка MyObject не Nothing.

Вот то, что получаю с помощью ErrorObject

Number=76
Description=Path not found
Source=Project1
LastDllError=0

Что не так?

ЗЫ. Компилю у себя под 98, Ставлю на НТ. Другие проги (без классов, но с модулями) работают.

Спасибо.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 14.10.2003 (Вт) 14:05

Если честно, то не знаю...
Думаю, что что-нибудь простое - какой-то путь действительно у тебя на машине есть, а на той, куда ставишь - нет. Какой-нибудь файл открываешь или еще что-нибудь в этом роде....

Попробуй все-таки поточнее выяснить, когда происходит ошибка. На каком именно методе обламывается. Попиши что-нибудь в текстовый файл или попоказывай месджбоксы.

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 15.10.2003 (Ср) 18:35

Rainbow писал(а):Если честно, то не знаю...
Думаю, что что-нибудь простое - какой-то путь действительно у тебя на машине есть, а на той, куда ставишь - нет. Какой-нибудь файл открываешь или еще что-нибудь в этом роде....


Да действительно в классе открывал файл, которого не существует. :oops:

ЗЫ. Мля! Примеры в API-Guide глючные. Уже второй раз попался.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.10.2003 (Чт) 9:23

Примеры в API-Guide рульные. Просто нефиг их копипастить бездумно, даже не позырив, чё там открывается и зачем.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Taras2
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 20.06.2003 (Пт) 12:13

Сообщение Taras2 » 16.10.2003 (Чт) 10:52

GSerg писал(а):Примеры в API-Guide рульные. Просто нефиг их копипастить бездумно, даже не позырив, чё там открывается и зачем.


1. Открывался файл мною, а не примером API-Guide.
2. Чуть-чуть модифицированный пример pipe (а именно в качестве хендла STDErr, при запуске проги давался хендл STDRead) у меня на 98-й работал на НТ нет. Читал STDRead и зависал.
3. Пример с FindFirstChangeNotification, скопированный 1 в 1 у меня даёт хендл 0.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 4

    TopList