Страница: 1 |
В каком случае появляется ошибка Например Unload Text1(1) Проблему я решил перемещением кода выгрузки
Возможно, если Control связан с ДБ через DataSource, то VB не может их выгрузить. Попробуй сделать Set Control.DataSource = Nothing Точно не связан. Хотя кто знает Я так понял, ты сначала грузишь контролы командой Load, а затем по мере необходимости их выгружаешь командой Unload. Dim WithEvents cmdSub As CommandButton Private cmdSub_Click() И используй их отдельные Sub'ы Хм. Неплохая идея. Надо будет попробовать. Хотя наверное... У меня считывается файл, затем вызывается процедура его обработки, а из неё уже процедура выгрузки массива контролов. Как это совместить ? Создай отдельный Класс по работе с файлами и зарегистрируй в нем CommandButton: Dim WithEvents cmdUnloadAll As CommandButton Sub RegisterControl(ByRef cmd As CommandButton) А в форме этот класс определи WithEvents и по событию UnloadAll выгрузы необходимые Контролы. Да как класс с событием контрола создавать я знаю. Я имел ввиду в моей ситуации. Да в том-то и дело, что я ни как не могу понять постановку задачи. Спасибо. Сам нашёл в VB5.HLP Unable to unload within this context (Error 365) In some situations you are not allowed to unload a form or a control on a form. This error has the following causes and solutions: · There is an Unload statement in the Paint event for the form or for a control on the form that has the Paint event. Remove the Unload statement from the Paint event. · There is an Unload statement in the Change, Click, or DropDown events of a ComboBox. Remove the Unload statement from the event. · There is an Unload statement in the Scroll event of an HScrollBar or VScrollBar control. Remove the Unload statement from the event. · There is an Unload statement in the Resize event of a Data, Form, MDIForm, or PictureBox control. Remove the Unload statement from the event. · There is an Unload statement in the Resize event of an MDIForm that is trying to unload an MDI child form. Remove the Unload statement from the event. · There is an Unload statement in the RePosition or Validate event of a Data control. Remove the Unload statement from the event. · There is an Unload statement in the ObjectMove event of an OLE Container control. Remove the Unload statement from the event. Мне кажется, что все зависит от способа загрузки контролов. При этом соэдается точная копия контрола с индексом 0. Это не верно. И хватит на этом. Я уже нашёл причину ошибки. Она описана выше. В некоторых событиях контролов невозможно выгрузить массивы других контролов, загруженных командой лоад. Может моё мнение тоже не верно, но я считаю что слово "контект" тут не спроста. Скорее всего что-то связанное с перерисовкой объекта. Страница: 1 |
Вопрос: Unload Control Array
Добавлено: 18.11.02 02:10
Автор вопроса: CyRax | Web-сайт:
"Невозможно выгрузить внутри этого контекста" (код 365)?
И как с этим бороться ?
элементов из подпроцедуры в процедуру события.
Например из Sub UnloadAll() в Sub Command1_Click.
Т.е. если удаляешь прямо в событии, то всё нормально,
а если вызываешь из этого события процедуру с тем же кодом,
то появляется эта ошибка.
Но меня такой вариант не устраивает.
Ответы
Всего ответов: 11
Номер ответа: 1
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #1
Добавлено: 18.11.02 07:32
Номер ответа: 2
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #2
Добавлено: 18.11.02 08:37
Номер ответа: 3
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #3
Добавлено: 18.11.02 09:20
Тогда попробуй вместе с контролами создавть и командную кнопку и через нее выгружать, например:
Load cmdSub
Unload Text(1)
End Sub
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 19.11.02 04:08
Номер ответа: 5
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #5
Добавлено: 19.11.02 04:39
Public Event UnloadAll()
Set cmdUnloadAll = cmd
End Sub
Private Sub cmdUnloadAll_Click()
RaiseEvent UnloadAll()
End Sub
Номер ответа: 6
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #6
Добавлено: 19.11.02 07:11
Номер ответа: 7
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #7
Добавлено: 19.11.02 08:01
Представляю это так:
Есть Форма, на которой динамически создаются Контролы.
А за тем, при возникновении некоторого события, должны быть динамически выгружены.
При чем, если при нажатии некоторой кнопки в ее обработчик события Click включить Unload, то все работает. Если же, стек вызова процедур внутри формы содержит более одного, то Vb начинает генерить ошибку.
Поэтому я и предложил создать отдельный класс, в котором может происходить, что угодно, но по некоторому событию, внутри класса генерируется событие, которое обрабатывается в нутри формы.
Номер ответа: 8
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #8
Добавлено: 19.11.02 18:16
Сколько ни извращался. И загружает и выгружает все контролы без ошибок. Создал рекурсивный вызов функции до 50.000 колена. Нет проблем. Давай поподробнее, может до чего нибудь дойдем. Подозреваю, что ты нарвался на что-то новое, хотелось-бы поглядеть.
Номер ответа: 9
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #9
Добавлено: 22.11.02 08:01
Номер ответа: 10
Автор ответа:
ГАТ
Вопросов: 2
Ответов: 117
Web-сайт:
Профиль | | #10
Добавлено: 23.11.02 05:58
Способ1. <Form>.Controls.Add ....., сдесь однозначно возникат ошибки которые ты сдесь описал.
Способ2. На форме создается Контрол например с Index = 0, тогда можно на форме создавать контролы примерно так:
Load <ControlName>1) и т.д.
Остается только сместить его в нужное место и указать Visible=True. так вот, эти контролы выгружаются при любых условиях (по крайней мере я так думаю).
Номер ответа: 11
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #11
Добавлено: 23.11.02 13:16