Ошибка при удалении контрола

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

Ошибка при удалении контрола

Сообщение XairOn » 12.10.2005 (Ср) 16:17

Здравствуйте господа, вопрос у меня такой: я сначала динамически гружу контрола, потом мне их надо удалить. Загрузка нормально проходит, а вот удаление почему-то нет :(. При попытке удалить Label3(1) вылетает вот такая ошибка: Run-time erroe '365': Unable to unload within this context. Почему такое происходит? Какие причины должны быть для этой ошибки? А удалять я пытаюсь вот так: Unload Label3(1) и на эту строку меня возвращает отладчик.

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

Сообщение GSerg » 12.10.2005 (Ср) 16:22

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

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 12.10.2005 (Ср) 17:15

Нет, ошибка тут не в обработчике. Удаление идёт из процедуры не имеющей отношения кобработчику. Вызов процедуры идёт тоже не из обработчика. Должна быть другая причина.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 12.10.2005 (Ср) 17:18

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

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 12.10.2005 (Ср) 18:28

2 Ennor, вот тут подробнее пожалуйста, у меня как раз из комбобокса идёт удаление. Как ты проблему решал?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 12.10.2005 (Ср) 18:45

Ennor писал(а):ЕМНИП, нельзя выгружать контролы из обработчика события Click() для комбобокса. Мне для этого в свое время пришлось делать отложенную выгрузку - таймер на 10 мс и переменная с индексом контрола на удаление.

:shock: Баги появляются там, где их не ждешь...
Кстати, отчего такое поведение :?:
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.10.2005 (Ср) 19:35

XairOn писал(а):2 Ennor, вот тут подробнее пожалуйста, у меня как раз из комбобокса идёт удаление. Как ты проблему решал?


Ennor писал(а):Мне для этого в свое время пришлось делать отложенную выгрузку - таймер на 10 мс и переменная с индексом контрола на удаление.
Изображение

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 13.10.2005 (Чт) 10:38

2 tyomitch, ну не понял я всё равно, пробовал как понял, но не получается.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: Ошибка при удалении контрола

Сообщение codemaster » 13.10.2005 (Чт) 11:14

XairOn писал(а): Unload Label3(1) и на эту строку меня возвращает отладчик.


Это "последний( первый )" контролы в массиве ?
:wink:
//<-
Mit freundlichen Grüßen
//->

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.10.2005 (Чт) 11:15

Кидаешь на форму таймер с маленьким интервалом, по умолчанию выключенный. В событии, в котором происходит принятие решения о выгрузке контрола, вместо собственно выгрузки делаются 2 вещи:
    1. Сохраняется значение индекса выгружаемого контрола так, чтобы эти данные были доступны в пределах формы (form-level variable).
    2. Запускается этот таймер.
После этого обработку данного события лучше завершить, а весь остальной код перенести в этот таймер (ну или вызывать его оттуда).

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

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

XairOn
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 324
Зарегистрирован: 19.07.2004 (Пн) 20:20
Откуда: Irkutsk region

Сообщение XairOn » 14.10.2005 (Пт) 9:14

2 Ennor, спасибо!


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

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

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

    TopList