Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема АктивИкс: Уничтожить() закрывает всю базу (число прочтений - 2042 )
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
АктивИкс: Уничтожить() закрывает всю базу
20. Апреля 2007 :: 08:05
Печать  
Имеем на форме АктивИкс "MSComctlLib.Toolbar.2":
Код
Выбрать все
Процедура ПриЗакрытии()
	АктивИкс_ПанельИнструментов.Уничтожить();
КонецПроцедуры

Процедура ПанельИнструментов_ButtonClick(ОбъектКнопка)
	Кей=ОбъектКнопка.Key;
	Если Кей="Сформировать" Тогда
		Сформировать();
	ИначеЕсли Кей="Закрыть" Тогда
		ПриЗакрытии();
		Форма.Закрыть(0);
	КонецЕсли;
КонецПроцедуры 


Если по кнопке на АктивИкс "Закрыть" уничтожать панель инструментов этого же АктивИкс, так как в коде, то вместе с формой (в данном случае внешнего отчета) выгружается вся база данных. Если не уничтожать, то всё в порядке, закрывается только форма отчета.
Это нормально?

ЗЫ. 1С++ 2.5.0.2, FormEx 2.05#52
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: АктивИкс: Уничтожить() закрывает всю базу
Ответ #1 - 20. Апреля 2007 :: 13:54
Печать  
Уничтожать контрол в коде обработчика события этого-же контрола - это круто Улыбка
Вылет в космос при таком подходе гарантирован.
Метод Уничтожить предполагалось использовать для того, чтобы застрелить контрол для последующего размещения в том-же месте другого.
Контрол уничтожается вместе с уничтожением формы.
Явное уничтожение требуется крайне редко.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: АктивИкс: Уничтожить() закрывает всю базу
Ответ #2 - 20. Апреля 2007 :: 14:21
Печать  
Я так и предполагал...

Сбил с толку код в где-то скачаном примере (прилагается)
  

ToolBar.ert ( 26 KB | Загрузки )
Наверх
ICQ  
IP записан
 
noprogrammer
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 465
Зарегистрирован: 16. Июня 2006
Re: АктивИкс: Уничтожить() закрывает всю базу
Ответ #3 - 20. Апреля 2007 :: 16:40
Печать  
Kapet писал(а) 20. Апреля 2007 :: 14:21:
Я так и предполагал...

Сбил с толку код в где-то скачаном примере (прилагается)


Когда данный пример выкладывался, работа с активиксами в 1С++ только появилась и
вылеты при использовании данного метода не было замечено как нет и сейчас, специально проверил.
но раз steban сказал что метод "лишний", значит он лишний Подмигивание
  
Наверх
wwwICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: АктивИкс: Уничтожить() закрывает всю базу
Ответ #4 - 22. Апреля 2007 :: 08:26
Печать  
noprogrammer писал(а) 20. Апреля 2007 :: 16:40:
вылеты при использовании данного метода не было замечено как нет и сейчас, специально проверил.

Повторюсь:
Если контрол уничтожается в коде своего обработчика, вылет гарантирован.
Это действительно и для ранних сборок и для последних.
Объекту типа АктивИкс после обработки события кодом 1С нужно куда-то вернуть управление, а по адресу в стеке возврата уже никто не живет Печаль
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать