runtime error 10. This array is fixed or temporarily locked.

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

runtime error 10. This array is fixed or temporarily locked.

Сообщение djalex777 » 15.04.2008 (Вт) 9:55

Пытаюсь выполнить следующее (при нажатии на кнопке Command1):

Код: Выделить всё

Private Type MyType
   lTest As Long
End Type
Dim MyArray() As MyType

Private Sub Command1_Click()
Dim i As Long, k As Long
Dim cnt As Long
cnt = 5
ReDim MyArray(cnt)
  For i = 0 To 5
   With MyArray(i)
    .lTest = i
     If i = 3 Then Exit For
   End With
  Next i
 
  ReDim MyArray (i)
End Sub


Возникает ошибка run-time error '10'. Вычитал, что это баг VB и происходит он, когда мы выходим изнутри With из цикла. Предлагают вместо Exit For (Do) использовать GoTo. Пробовал, но ошибка так и остается. Кто нибудь знает, как решить эту проблему???

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 15.04.2008 (Вт) 12:06

зачем With то?

надо так:

MyArray(i).lTest=i


или так:

Код: Выделить всё
Dim tt as MyType

tt=MyArray(i)
tt.lTest=i

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Сообщение djalex777 » 15.04.2008 (Вт) 12:31

Konst_One писал(а):зачем With то?

надо так:

MyArray(i).lTest=i


или так:

Код: Выделить всё
Dim tt as MyType

tt=MyArray(i)
tt.lTest=i


И что это? Понятно, что можно обойтись и без оператора with. Но! Это я же к примеру код привел. Ситуацию описал. У меня названия массивов своих типов раз в 5 длиннее. Плюс индекс массива может определяться функцией, название которой тоже длинное. Помимо этого, у типа очень много свойств. Ну и в довершении всего модулей в программе около 30... Мягко говоря - неудобно не пользоваться оператором With

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.04.2008 (Вт) 12:34

А почему бы не использовать коллекции?
Lasciate ogni speranza, voi ch'entrate.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Сообщение djalex777 » 15.04.2008 (Вт) 14:17

alibek писал(а):А почему бы не использовать коллекции?


Объясни пожалуйста. Не совсем понял.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.04.2008 (Вт) 14:20

Замени тип MyType на класс, с такими же мемберами.
Вместо массива MyArray создай коллекцию.
И добавляй в коллекцию экземпляры класса.
Lasciate ogni speranza, voi ch'entrate.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 15.04.2008 (Вт) 22:12

djalex777
Просто не выходи из For! Пусть бейсик выйдет из With своим ходом:

Код: Выделить всё
  For i = 0 To 5
   With MyArray(i)
    .lTest = i
    'вместо этого:
    ' If i = 3 Then Exit For
    'напиши это:
     if i=3 then i=5
   End With
  Next i
Артур
 
   


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 81

    TopList