Свой компонент TabContol, отнаследованный от стандартного
Итак: есть компонент TabControl, в нем есть коллекция компонентов Page.
В один прекрасный момент понадобилось мне добавить к классу Page дополнительное свойство...
Я, естесственно, пишу свой класс MyPage, отнаследованный от класса Page.
Но теперь как мне использовать этот мой класс?
Я вижу три варианта:
1) Написать свой класс MyTabControl, отнаследованный от TabControl. Но так как я не могу подменить коллекцию Page, объявленную в базовом классе, мне придется объявить дополнительную коллекцию MyPage, и помимо всего прочего — переопределить все методы класса TabControl, которые используют коллекцию Page. Кроме того, по хорошему надо переопределить все методы которые возвращают тип Page — сделать так, чтобы они возвращали MyPage, иначе везде придется кастовать — не есть гуд . Короче, по сути, почти весь компонент TabControl надо переписать...
2) Есть исходники класса TabConrol. Я могу непосредственно в нем заменить класс у коллекции c Page на MyPage. Но проблема с кастованием типа остается — либо также переписать в этом классе все методы, использующие Page, либо все-время кастовать. Ну и редактирование стандартных компонентов... то еще зло
3) Не трогать классы вообще, а после добавления TabControl на форму — вручную поменять в файлах file1.Designer.cs создание страниц с Page на MyPage. Но класс хочется сделать более-менее универсальным.. потому что использовать его буду не только я.. а такие тонкости вовсе неочевидны... Ну и опять же остаются проблемы с кастованием (только тут выбора нет — только кастовать), да и в дизайнере мои новые свойства на вкладке Properties не появятся...
Может быть, есть еще какие-нибудь варианты?
Из предложенных вариантов мне представляется наиболее экономичным по времени второй.
TabContorl.TabItems.Add((TabPage)(new MyTabePage)).
А потом так же распаковывать :)