Переключение на Главную Страницу Страницы: 1 2 [3] 4  ОтправитьПечать
Очень популярная тема (более 25 ответов) СоздатьЭлементУправления и класс-наследник (число прочтений - 20374 )
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #30 - 08. Июня 2007 :: 06:46
Печать  
trad писал(а) 08. Июня 2007 :: 06:21:
А почему отказался от первоначального пути?
Все же красиво. И работает.


Опасаюсь кривостей с обработкой событий ТП
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #31 - 08. Июня 2007 :: 07:34
Печать  
нет там никакой кривости. все документировано и работает согласно документации.
  

1&&2&&3
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #32 - 08. Июня 2007 :: 07:41
Печать  
trad писал(а) 08. Июня 2007 :: 07:34:
нет там никакой кривости. все документировано и работает согласно документации.


Если ты говоришь об этом
Цитата:
изита);
ТаблПоле =
изита);


то ситуация следующая
Вся обработка должна идти в "ТестКласс". Значит необходимо определить обработчики в "ТестКласс1" и "ТестКласс2" и перенаправить их в "ТестКласс"
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #33 - 08. Июня 2007 :: 08:18
Печать  
да, именно так
  

1&&2&&3
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #34 - 08. Июня 2007 :: 08:28
Печать  
trad писал(а) 08. Июня 2007 :: 08:18:
да, именно так


Вот ведь... Короче ща на тестах погоняю - посмотрим, что из этого получится
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #35 - 08. Июня 2007 :: 08:57
Печать  
Попробовал сделать подмену вызовов.
Выходит, что делать можно только с английскими названиями событий.

Сделал по такому принципу:
Код
Выбрать все
Процедура ContextMenu(ФлагЗаголовка) Экспорт
  Информ=СоздатьОбъект("Информатор");
  Если Информ.МетодСуществует(Сам(),"ПриКонтекстномМеню")=1 Тогда
     Сам().ПриКонтекстномМеню(ФлагЗаголовка);
  КонецЕсли;
КонецПроцедуры
 



Вроде нормально срабатывает... Попробую все методы переопределить
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #36 - 08. Июня 2007 :: 09:31
Печать  
Сделал подмену всех методов.
У кого есть сложные ТП, попробуйте, плиз.
  

TableBox.rar ( 6 KB | Загрузки )
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #37 - 08. Июня 2007 :: 10:11
Печать  
1) С русскими именами нет никаких проблем.
2) ЗАЧЕМ переопределять ТабличноеПоле?! (и вообще объявлять потомки с именем базового классы) Это, на мой взгляд, неправильно и вносит путаницу.
3) ЗАЧЕМ тут информатор?! Не проще сделать виртуальный вызов метода наследника - это проще написать и быстрее будет проходить вызов.
  

1&&2&&3
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #38 - 08. Июня 2007 :: 10:17
Печать  
trad писал(а) 08. Июня 2007 :: 10:11:
1) С русскими именами нет никаких проблем.
2) ЗАЧЕМ переопределять ТабличноеПоле?! (и вообще объявлять потомки с именем базового классы) Это, на мой взгляд, неправильно и вносит путаницу.
3) ЗАЧЕМ тут информатор?! Не проще сделать виртуальный вызов метода наследника - это проще написать и быстрее будет проходить вызов.


1) Это радует
2) Чтобы наследовать сразу от класса - никакой путаницы+дополнительный функционал в ТП уже заложен (создание на форме и реквизите) ИМХО-удобнее
3) Каким образом, если метод наследника не определен?
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #39 - 08. Июня 2007 :: 10:26
Печать  
Chieftain писал(а) 08. Июня 2007 :: 10:17:
3) Каким образом, если метод наследника не определен?

Разумеется метод должен быть определен и у базового. Это же полиморфизм.
  

1&&2&&3
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #40 - 08. Июня 2007 :: 10:34
Печать  
trad писал(а) 08. Июня 2007 :: 10:26:
Chieftain писал(а) 08. Июня 2007 :: 10:17:
3) Каким образом, если метод наследника не определен?

Разумеется метод должен быть определен и у базового. Это же полиморфизм.


Да, но если определяешь в базовом классе "ПриКонтекстномМеню" и "ContextMenu" - срабатывает только "ПриКонтекстномМеню".
А если из "ПриКонтекстномМеню" вызывать Сам().ПриКонтекстномМеню, то при отсутствии определения в классе-наследнике возникает рекурсивный вызов процедуры, базового класса
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #41 - 08. Июня 2007 :: 10:40
Печать  
Chieftain писал(а) 08. Июня 2007 :: 10:17:
2) Чтобы наследовать сразу от класса - никакой путаницы+дополнительный функционал в ТП уже заложен (создание на форме и реквизите) ИМХО-удобнее
Ага.
Вот одна иллюстрация: При использовании всех других наследников от ТП, вовсе не связанных с этой задачей, будут всегда отрабатывать все события т.к. определены в твоем КОПе.
Другая илл.: никакие другие наследники от ТП не смогут вызвать метод "настоящего" ТП если он(метод) будет определен в твоем.
  

1&&2&&3
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #42 - 08. Июня 2007 :: 10:44
Печать  
trad писал(а) 08. Июня 2007 :: 10:40:
Chieftain писал(а) 08. Июня 2007 :: 10:17:
2) Чтобы наследовать сразу от класса - никакой путаницы+дополнительный функционал в ТП уже заложен (создание на форме и реквизите) ИМХО-удобнее
Ага.
Вот одна иллюстрация: При использовании всех других наследников от ТП, вовсе не связанных с этой задачей, будут всегда отрабатывать все события.
Другая илл.: никакие другие наследники от ТП не смогут вызвать метод "настоящего" ТП если он будет определен в твоем.


По поводу событий: для чего и бросил сюда класс - подмену ТП - потестить скорость работы такой подмены.
По поводы вызова методов оригинала: обрати внимание на "дополнительный функционал". Это только для упрощения работы с ТП
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #43 - 08. Июня 2007 :: 10:48
Печать  
Chieftain писал(а) 08. Июня 2007 :: 10:34:
Да, но если определяешь в базовом классе "ПриКонтекстномМеню" и "ContextMenu" - срабатывает только "ПриКонтекстномМеню".
да это штатное поведение ТП (хотя, насколько помню, в доке не описанное): сначала ищется русское и, только ели не найдено, ищется англ.

Chieftain писал(а) 08. Июня 2007 :: 10:34:
А если из "ПриКонтекстномМеню" вызывать Сам().ПриКонтекстномМеню, то при отсутствии определения в классе-наследнике возникает рекурсивный вызов процедуры, базового класса
естественно имя виртуального метода, который вызывается обработчиком события, должно отличаться от имени самого обработчика события.
  

1&&2&&3
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: СоздатьЭлементУправления и класс-наследник
Ответ #44 - 08. Июня 2007 :: 10:49
Печать  

Процедура ПриКонтекстномМеню(ФлагЗаголовка) Экспорт
   Сам().ОбработчикКонтекстногоМеню(ФлагЗаголовка);
 КонецЕсли;
КонецПроцедуры

Процедура ОбработчикКонтекстногоМеню(ФлагЗаголовка) Экспорт
   // Ничего не делаем.
КонецПроцедуры

И никаких Информаторов и бесконечных рекурсий.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 
ОтправитьПечать