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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
СоздатьЭлементУправления и класс-наследник
07. Июня 2007 :: 10:11
Печать  
Вопрос в следующем - допустим есть класс-наследник "АктивИкс" и "ТабличноеПоле".
Как правильно создавать элементы управления на форме с помощью
"СоздатьЭлементУправления"?
Проблема в том, что при попытке создания табличного поля создается только АктивИкс
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #1 - 07. Июня 2007 :: 10:47
Печать  
ИМХО здесь у тебя путаница между наследованием и агрегированием.
Объясни, как класс может одновременно являться и АктивИксом, и ТаблПолем ?
ИМХО раздели  наследование на разные классы или используй только агрегирование.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

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

Код
Выбрать все
класс ТестКласс=ТестКласс.ert : ТабличноеПоле,АктивИкс
{
};
 



Код
Выбрать все
Форма=СоздатьОбъект("Форма");
Форма.УстановитьФорму(КонтФормы.Форма);
Форма.СоздатьЭлементУправления(Сам(),"Реквизит1"); 



Как можно указать для "СоздатьЭлементУправления" из какого базового класса создавать ЭУ
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #3 - 07. Июня 2007 :: 10:54
Печать  
Смысл в том, что в одном классе нужно обрабатывать события от АктивИкс и ТП.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #4 - 07. Июня 2007 :: 11:02
Печать  
А зачем тебе нужно в одном классе обрабатывать эти различные события? Какие события хочешь обрабатывать?
Если все-таки ты упорствуешь на подобном варианте, используй следующий вариант для двух классов-наследников - эти классы используют третий класс-менеджер, который и обрабатывает эти события.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #5 - 07. Июня 2007 :: 11:06
Печать  
artbear писал(а) 07. Июня 2007 :: 11:02:
А зачем тебе нужно в одном классе обрабатывать эти различные события? Какие события хочешь обрабатывать?
Если все-таки ты упорствуешь на подобном варианте, используй следующий вариант для двух классов-наследников - эти классы используют третий класс-менеджер, который и обрабатывает эти события.


Т.е. конструкция типа
Код
Выбрать все
класс ТестКласс1=ТестКласс1.ert : АктивИкс
{
};
класс ТестКласс2=ТестКласс2.ert : ТабличноеПоле
{
};
класс ТестКласс=ТестКласс.ert : ТестКласс1,ТестКласс2
{
};
 


И создание ЭУ в классах "ТестКласс1" и "ТестКласс2"?
А "ТестКласс" будет тогда принимать все события от "ТестКласс1" и "ТестКласс2"?
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #6 - 07. Июня 2007 :: 11:14
Печать  
Не знаю как ТП, а АктивИкс не распространяет автоматически события по иерархии классов дальше прямого потомка.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #7 - 07. Июня 2007 :: 11:23
Печать  
Chieftain писал(а) 07. Июня 2007 :: 10:54:
Смысл в том, что в одном классе нужно обрабатывать события от АктивИкс и ТП.



Брр... А зачем???
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #8 - 07. Июня 2007 :: 11:28
Печать  
Метод СоздатьЭлементУправления предназначен для создания ОДНОГО элемента управления и два или более он создавать не может.
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #9 - 07. Июня 2007 :: 11:35
Печать  
Chieftain писал(а) 07. Июня 2007 :: 11:06:
artbear писал(а) 07. Июня 2007 :: 11:02:
А зачем тебе нужно в одном классе обрабатывать эти различные события? Какие события хочешь обрабатывать?
Если все-таки ты упорствуешь на подобном варианте, используй следующий вариант для двух классов-наследников - эти классы используют третий класс-менеджер, который и обрабатывает эти события.

Т.е. конструкция типа
Код
Выбрать все
класс ТестКласс1=ТестКласс1.ert : АктивИкс
{
};
класс ТестКласс2=ТестКласс2.ert : ТабличноеПоле
{
};
класс ТестКласс=ТестКласс.ert : ТестКласс1,ТестКласс2
{
};
 


И создание ЭУ в классах "ТестКласс1" и "ТестКласс2"?
А "ТестКласс" будет тогда принимать все события от "ТестКласс1" и "ТестКласс2"?

Ты опять путаешь наследование и агрегирование Печаль
Класс-менеджер не обязан являться наследником этих классов.

ИМХО тупо
Код
Выбрать все
Функция Класс1::Событие1(Параметры...)
Возврат КлассМенеджер.ОбработчикСобытия1(Сам(), Параметры...);
КонецФункции 



Но ты не ответил на главный вопрос - нафига это в одном классе ??????
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #10 - 07. Июня 2007 :: 11:37
Печать  
steban писал(а) 07. Июня 2007 :: 11:14:
Не знаю как ТП, а АктивИкс не распространяет автоматически события по иерархии классов дальше прямого потомка.

ИМХО не очень здорово - все-таки немного нарушается нормальный полиморфизм Печаль
Нужно записать в планы Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #11 - 07. Июня 2007 :: 11:47
Печать  
Цитата:
Но ты не ответил на главный вопрос - нафига это в одном классе ??????


Есть N-е количество форм с однотипным функционалом.
На форму добавляется панель с кнопками и табличное поле.

Вот и пытаюсь выделить все в отдельный класс, чтобы не трогать этот функционал и не дублировать код.
Все сводится к одной строке в любой из этих форм - СоздатьОбъект()
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #12 - 07. Июня 2007 :: 11:49
Печать  
DmitrO писал(а) 07. Июня 2007 :: 11:28:
Метод СоздатьЭлементУправления предназначен для создания ОДНОГО элемента управления и два или более он создавать не может.


Может! И создает!

При таком варианте
Код
Выбрать все
класс ТестКласс=ТестКласс.ert : ТабличноеПоле,АктивИкс
{
};
 


Создается на 2-х реквизитах ТП, а АктивИкс - нет
  
Наверх
ICQ  
IP записан
 
desty
Full Member
***
Отсутствует



Сообщений: 135
Зарегистрирован: 19. Апреля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #13 - 07. Июня 2007 :: 12:01
Печать  
Chieftain писал(а) 07. Июня 2007 :: 11:47:
Цитата:
Но ты не ответил на главный вопрос - нафига это в одном классе ??????


Есть N-е количество форм с однотипным функционалом.
На форму добавляется панель с кнопками и табличное поле.

Вот и пытаюсь выделить все в отдельный класс, чтобы не трогать этот функционал и не дублировать код.
Все сводится к одной строке в любой из этих форм - СоздатьОбъект()


Есть предложение (или глупый вопрос)
Я тут у КИНТа подсмотрел...

А что тебе стоит создать не классы наследники от АктивИкс и ТП, а создать класс УправлениеФормами_N_моих_объектов.
Там ты получаешь Контекст вызова, и соответственно можешь создавать свои ЭУ на исходном контексте

А класы наследники от АктивИкс и ТП, может лучше выделить в отдельные классы (может где-еще пригодяться)

То есть получается тот Класс Менеджер, который предолжил artbear
P.S. У КИНТа почти так с отчетами реализовано в демо-версии "УАУ"
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: СоздатьЭлементУправления и класс-наследник
Ответ #14 - 07. Июня 2007 :: 12:06
Печать  
Вообще-то у меня сейчас готовый вариант:
Основной класс, из которого создаются 2 объекта (ТП и АктивИкс).
Он же вызывет их методы и меняет свойства.
Но каждый из "подчиненных" классов должен видеть действия другого.
А приходится делать вспомогательные методы для передачи события.

ЗЫ А хотелось как проще... Как всегда придется выдумывать...
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать