Redim Preserve - в чём ошибка?

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

Redim Preserve - в чём ошибка?

Сообщение Memfivosfey » 28.01.2007 (Вс) 11:26

Сорри, возможно вопрос может показаться совсем глупым, но я видно просто так сильно зашкалился, что не вижу ответа:( ,почему происходит эта ошибка.


Код: Выделить всё
Dim tmpSetUsers() As long
ReDim Preserve tmpSetUsers(0, 1)
   For I = 0 To lstClients.ListCount - 1
      tmpSetUsers(I, 0) = Abs(CLng(lstClients.Selected(I)))
      tmpSetUsers(I, 1) = lstClientsID.List(I)
      ReDim Preserve tmpSetUsers(UBound(tmpSetUsers) + 1, 1)
   Next I


последний Redim пишет ошибку SubScript Out Of Range, никак не могу понять, почему?

мой lstClients является ListCheckBox может в ходе программы менять свой ListCounts но мне необходимо сохранять на время выполнения программы в массив true или false на каждом элементе массива. Т.к. список динамического размера, то я не хотел затавать статически величину масиву Dim tmpSetUsers() я хотел бы, что бы при необходимости, сохраняя данные массива, Ubound(tmpSetUsers()) увеличивался на 1. Вот вобщем вся задача.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 28.01.2007 (Вс) 11:31

MSDN писал(а):If you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all. For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 28.01.2007 (Вс) 11:32

Своим ReDim Preserve tmpSetUsers(UBound(tmpSetUsers) + 1, 1) ты пытаешься изменить нижнюю границу массива. Как только она становится больше единицы - вылетает ошибка. Стоит обратить внимание на ReDim Preserve tmpSetUsers(0, 1)...
Последний раз редактировалось Twister 28.01.2007 (Вс) 11:42, всего редактировалось 1 раз.
А я все практикую лечение травами...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 28.01.2007 (Вс) 11:37

VVitafresh
Twister



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

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 28.01.2007 (Вс) 11:54

Пасиба огромное усё заработало :) Темку мона закрыть :)
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 7

    TopList