Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Unload Control Array Добавлено: 18.11.02 02:10  

Автор вопроса:  CyRax  | Web-сайт: basicproduction.nm.ru | ICQ: 204447456 

В каком случае появляется ошибка
"Невозможно выгрузить внутри этого контекста" (код 365)?
И как с этим бороться ?

Например Unload Text1(1)

Проблему я решил перемещением кода выгрузки
элементов из подпроцедуры в процедуру события.
Например из Sub UnloadAll() в Sub Command1_Click.
Т.е. если удаляешь прямо в событии, то всё нормально,
а если вызываешь из этого события процедуру с тем же кодом,
то появляется эта ошибка.
Но меня такой вариант не устраивает.

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #1
Добавлено: 18.11.02 07:32

Возможно, если Control связан с ДБ через DataSource, то VB не может их выгрузить. Попробуй сделать

Set Control.DataSource = Nothing

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 18.11.02 08:37

Точно не связан. Хотя кто знает :)

Ответить

Номер ответа: 3
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #3
Добавлено: 18.11.02 09:20

Я так понял, ты сначала грузишь контролы командой Load, а затем по мере необходимости их выгружаешь командой Unload.
Тогда попробуй вместе с контролами создавть и командную кнопку и через нее выгружать, например:

Dim WithEvents cmdSub As CommandButton
Load cmdSub

Private cmdSub_Click()
Unload Text(1)
End Sub

И используй их отдельные Sub'ы

Ответить

Номер ответа: 4
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 19.11.02 04:08

Хм. Неплохая идея. Надо будет попробовать.

Хотя наверное...

У меня считывается файл, затем вызывается процедура

его обработки, а из неё уже процедура выгрузки массива

контролов. Как это совместить ?

Ответить

Номер ответа: 5
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #5
Добавлено: 19.11.02 04:39

Создай отдельный Класс по работе с файлами и зарегистрируй в нем CommandButton:

Dim WithEvents cmdUnloadAll As CommandButton
Public Event UnloadAll()

Sub RegisterControl(ByRef cmd As CommandButton)
Set cmdUnloadAll = cmd
End Sub

Private Sub cmdUnloadAll_Click()
RaiseEvent UnloadAll()
End Sub

А в форме этот класс определи WithEvents и по событию UnloadAll выгрузы необходимые Контролы.

 

Ответить

Номер ответа: 6
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #6
Добавлено: 19.11.02 07:11

Да как класс с событием контрола создавать я знаю.

Я имел ввиду в моей ситуации.

Ответить

Номер ответа: 7
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #7
Добавлено: 19.11.02 08:01

Да в том-то и дело, что я ни как не могу понять постановку задачи.
Представляю это так:
Есть Форма, на которой динамически создаются Контролы.
А за тем, при возникновении некоторого события, должны быть динамически выгружены.
При чем, если при нажатии некоторой кнопки в ее обработчик события Click включить Unload, то все работает. Если же, стек вызова процедур внутри формы содержит более одного, то Vb начинает генерить ошибку.
Поэтому я и предложил создать отдельный класс, в котором может происходить, что угодно, но по некоторому событию, внутри класса генерируется событие, которое обрабатывается в нутри формы.

Ответить

Номер ответа: 8
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #8
Добавлено: 19.11.02 18:16
Сколько ни извращался. И загружает и выгружает все контролы без ошибок. Создал рекурсивный вызов функции до 50.000 колена. Нет проблем. Давай поподробнее, может до чего нибудь дойдем. Подозреваю, что ты нарвался на что-то новое, хотелось-бы поглядеть.

Ответить

Номер ответа: 9
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #9
Добавлено: 22.11.02 08:01

Спасибо.

Сам нашёл в 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.

Ответить

Номер ответа: 10
Автор ответа:
 ГАТ



Вопросов: 2
Ответов: 117
 Web-сайт: www.mail.ru
 Профиль | | #10
Добавлено: 23.11.02 05:58

Мне кажется, что все зависит от способа загрузки контролов.
Способ1. <Form>.Controls.Add ....., сдесь однозначно возникат ошибки которые ты сдесь описал.
Способ2. На форме создается Контрол например с Index = 0, тогда можно на форме создавать контролы примерно так:
Load <ControlName>;(1) и т.д.

При этом соэдается точная копия контрола с индексом 0.
Остается только сместить его в нужное место и указать Visible=True. так вот, эти контролы выгружаются при любых условиях (по крайней мере я так думаю).

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 23.11.02 13:16

Это не верно.

И хватит на этом. Я уже нашёл причину ошибки.

Она описана выше.

В некоторых событиях контролов невозможно выгрузить

массивы других контролов, загруженных командой лоад.

 

Может моё мнение тоже не верно, но я считаю что слово

"контект" тут не спроста. Скорее всего что-то связанное с

перерисовкой объекта.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам