Странная ошибка "Unable to unload within the current co

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

Странная ошибка "Unable to unload within the current co

Сообщение Tarik » 20.06.2004 (Вс) 19:50

Вот сегодня задумался о переделывании интерфейса редактора для своего теста. В общем, переделылвал, переделывал и допеределывался :(
VB начал ругаться на слудующий код
Код: Выделить всё
For i = 2 To tansw.Count - 1
>    Unload tansw(i)
    Unload Label7(i)
Next i

ошибкой "Unable to unload within the current context" :evil: Вроде ничего радикально не менял, да и вообще такую ошибку первый раз вижу :? Что это такое и как с этим бороться?
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

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

Сообщение RayShade » 21.06.2004 (Пн) 9:45

Ты пытаешься менять в теле цикла переменную, отвечающую за его работу. А именно - Count. Потому что при unload она уменьшится на 1.

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

Сообщение alibek » 21.06.2004 (Пн) 9:57

Сделай, чтобы цикл уменьшался, т.е. от tansw.Count - 1 до 2 с шагом -1.
Lasciate ogni speranza, voi ch'entrate.

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 21.06.2004 (Пн) 14:35

Хм... Странно... Всё дело в том, что раньше он на этот код не ругался :?
2RayShade: Спасибо за объяснение, я вчера так и не допедалил :oops: Если дело только в этом, то можно сделать, как предложил alibek, а можно и так:
Код: Выделить всё
dim lcount as byte
lcount=tansw.count-1
For i = 2 To lcount
    Unload tansw(i)
    Unload Label7(i)
Next i
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 21.06.2004 (Пн) 14:49

Нет, похоже дело не в этом :? Попробывал оба способа - та же ошибка. Причём происходит она при первом же проходе, то есть когда i=2 (в случае моего кода) и i=9 (в случае кода от alibek). :cry:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Lord_Satan
Обычный пользователь
Обычный пользователь
 
Сообщения: 76
Зарегистрирован: 08.12.2001 (Сб) 10:26
Откуда: П.-К.

Сообщение Lord_Satan » 21.06.2004 (Пн) 15:40

for i=0 to count '10
unload что-то(i)
next

как токо ты делаеш unload что-то(0)
то что-то(10) становится что-то(9) и.т.д.
делай так

for i=0 to count '10
unload что-то(0)
next

Хотя это вроде токо для коллекций канает
Space Ace says: "Whant to be a DREAD courier?"

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 21.06.2004 (Пн) 15:56

Нет, для массивов контролов это не катит. Listbox какой-нибудь - пожалуйста, но не массив контролов.
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 21.06.2004 (Пн) 16:06

Так. Я уже вообще ни фига не понимаю :x Такой код в новом проекте не вызывает никаких ошибок! Можно хоть до посинения жать эти кнопочки :x :x :x
Код: Выделить всё
Private Sub Command1_Click()
Dim i As Integer
For i = 2 To 10
    Load Text1(i)
    Text1(i).Left = Text1(i - 1).Left
    Text1(i).Top = Text1(i - 1).Top + 360
    Text1(i).Visible = True
Next i
End Sub

Private Sub Command2_Click()
Dim i As Integer
For i = 2 To Text1.Count - 1
    Unload Text1(i)
Next i
End Sub


Edit
Всё. Сделал. Только всё равно ни хрена не понял :) Итак, по порядку. Сначала у меня загружается xml-файл. При этом в комбобокс заносятся все доступные варианты
Код: Выделить всё
For i = 0 To NodeList.length - 1
    Set nNode = NodeList(i)
    lstvars.AddItem "Âàðèàíò " & nNode.childNodes(0).Text
Next i

При выборе варианта (lstvars_Click) выполняется ГЛОБАЛЬНАЯ процедура WriteQuest, в которой, собственно, и присутсявует код, вызывающий ошибку.
Код: Выделить всё
Private Sub lstvars_Click()
VarNow = lstvars.ListIndex
Set nNode = NodeList(VarNow)
Frame1.Visible = True
QuestNow = 1 'устанавливаем вопрос, который надо отобразить
WriteQuest QuestNow 'Отображаем вопрос
lQuestNo.Caption = "1"
End Sub

Выбираем вариант в комбобоксе. Всё нормально. Выбираем другой - опаньки :x Выбрать вариант можно только один раз, во второй уже будет ошибка. Таааак. Но ведь в другом проекте я нажимал на кнопки и такого не было! Кнопки... кнопки... Ну ладно! Добавляю кнопку с индексом 0, пишу такой же код:
Код: Выделить всё
Private Sub Command5_Click(Index As Integer)
VarNow = Index - 1
Set nNode = NodeList(VarNow)
Frame1.Visible = True
QuestNow = 1
WriteQuest QuestNow
lQuestNo.Caption = "1"
End Sub

При загрузке xml добавляю такой код:
Код: Выделить всё
For i = 0 To NodeList.length - 1
    Set nNode = NodeList(i)
    Load Command5(i + 1)
    Command5(i + 1).Top = Command5(i).Top
    Command5(i + 1).Left = Command5(i).Left + Command5(i).Width + 100
    Command5(i + 1).Caption = "Âûðèàíò" & nNode.childNodes(0).Text
    Command5(i + 1).Visible = True
Next i

Теперь каждая кнопка (начиная с индекса 1) соответсвует пункту в комбобоксе. Итак, запускаем на выполнение... Нажимаем первую кнопку... Нажимаем вторую... ОШИБКИ НЕТ! ВТОРОЙ ВАРИАНТ ОТОБРАЖАЕТСЯ! А теперь думаем: если в обоих случаях зыпускается одна и та же глобальная процедура, то почему в одном случае она вызывает ошибку, а в другом - нет? Я так и не понял :oops: [/b]
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!


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

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

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

    TopList  
cron