Страница: 1 |
Страница: 1 |
Вопрос: Пользовательский тип данных в VB6
Добавлено: 30.09.09 17:47
Автор вопроса: Евгений
Привет всем!
Я начинающий в VB6.
Помогите пожалуйста разобраться...
В модуле создал тип данных и переменную EventMass() со сойствами Event_Number, Event_Date, Event_X и т.д
Выглядит так:
Type EventMassPrice
Event_Number As Long
Event_Date As Long
Event_X As Long
Event_Y As Long
Event_Z As Long
Event_Energy As Long
End Type
Public EventMass() As EventMassPrice
EventMass()-переменная о свойствами
например: EventMass(x).Event_Number
или EventMass(x).Event_Date
x-переменная (чтото вроде индекса) меняется программно для того чтобы сохранить все переменные EventMass().
Когда в программе пытаюсь присвоить какому нибудь из свойств значение возникает ошибка <Subscript out of range> - вроде превышен какой-то параметр.
Пробовал переобьявить типы для свойтв (Long, Strig и т.д.) в модуле, но ничего не выходит.
Если кто нибудь знает где можно почитать про пользовательские типы данных или хорошо владеет вопросом - подскажите...
Заранее благодарен.
-Евгений-
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #1
Добавлено: 30.09.09 19:55
Может ошибка в коде?
и сделайте Public Type
Номер ответа: 2
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #2
Добавлено: 30.09.09 22:19
у тебя индекс x выходит за пределы, т.е. например ты объявил массив EventMass(6), а x = 7
Номер ответа: 3
Автор ответа:
Евгений
Вопросов: 7
Ответов: 11
Профиль | | #3
Добавлено: 01.10.09 05:56
Может я чего не так делаю, но в модуле при обявлении EventMass()в скобки ничего сначала не ставил, потом после вашего совета поставил цифру-стало работать,но только если в программе будет именно эта цифра иначе значения равны нулю. А как запихать в скобки переменную?, ведь если пишу EventMass(X)возникает ошибка.
Номер ответа: 4
Автор ответа:
Skywalker
ICQ: 300-70-6пятьЪ
Вопросов: 62
Ответов: 545
Web-сайт:
Профиль | | #4
Добавлено: 01.10.09 06:03
если ты знаешь, какого размера будет массив, то в модуле пишешь эту цифру в скобках, если не знаешь, то оставляешь пустые скобки, а потом в нужной тебе процедуре пишешь redim EventMass(размер), здесь размер не обязательно цифра, может быть и переменная с нужным значением
Номер ответа: 5
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #5
Добавлено: 01.10.09 12:35
redim EventMass(верхний индекс) (0 - i)
Если изменяешь размер в процессе выполнения программы, то можно использовать
ReDim Preserve EventMass(i) ' Это сохранит данные в массиве.
Номер ответа: 6
Автор ответа:
Евгений
Вопросов: 7
Ответов: 11
Профиль | | #6
Добавлено: 02.10.09 05:06
Сделал вот что:
В Модуле EventMass()в скобках поставил 5000 просто чтобы больше было и перекрыло требуемое количество номеров - заработало...
А вот переменную туда загнать не могу, из программы это не получается даже переобьявлением массива - ругается и говорит что это не массив.
А что значит в EventMass(верхний индекс) слово верхний индекс и как сделать(0 - i)? наверное есть какой нибудь синтаксис?
Если есть примерчик-подкинте пожалуйста.
Заранее благодарен.
Номер ответа: 7
Автор ответа:
Илья
Вопросов: 1
Ответов: 48
Профиль | | #7
Добавлено: 02.10.09 06:34
EventMass(верхний индекс) - EventMass(5) - массив из 6 элементов, так же EventMass(123) - массив из 124 элементов (так как ещё есть индекс 0), тоесть объём данного массива, или же индекс "последней переменной"
??? EventMass(Val(x)), где X - Максимум, и содержит число, а чтобы присвоить значению массива значение переменной, нужно сделать чтото подобное:
Чтение данных по анологии... (код не проверял, но надеюсь ничего не перепутал)
Номер ответа: 8
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #8
Добавлено: 02.10.09 19:03
нет, если длинна масива уже была объявлена "im EventMass(0)", то изменить не получится.
Номер ответа: 9
Автор ответа:
Илья
Вопросов: 1
Ответов: 48
Профиль | | #9
Добавлено: 03.10.09 10:52
Да, точно, и ещё желательно подобные переменные, которые можно изменять из любой точки программы, объявлять в области "General", а не в процедуре (как написал я)