![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Парни есть проблемка. в связи с тем , что мне надо сделать много однотипных справочников, нужно заиметь много очень похожих справочников, которые будут различаться только кол-вом колонок в гриде, панелькой фильтра и отображаемум в гриде классом.
Это все я сделал (class Form1<Entity> : Form), работает все отлично, вызовы типа Form1<SMyClass> fr = new Form1<SMyClass> работают на ура, но вот незадача. Когда я от Form1 наследую класс Form2 (так надо, потомочту Form1 как родитель-шаблон, потомки вот как раз и отличаются панелькой фильтра и колонками), редактор отказывается отображать унаследованную форму. Судя по всему , потому что редактор обучен отображать формы, а Form2 уже получается порожден не от формы а от каккого то там параметризированного класса Form1`1. вот такия грабли. кто наступал и увернулся? |
|||
|
||||
| archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 9 Всего: 27 |
Несовсем понимаю зачем женерик-форма. Как вариант можно сделать так:
Форма самая не женерик, но в конструкторе ей передается дженерик класс, который и инкапсулирует весь женерик-функионал. Конечно же нужно оставить конструктор без параметров для дизайнера Если будут проблемы - приаттачь сюда свой код и обоснуй зачем те дженерик форма - подумаем вместе Это сообщение отредактировал(а) archeg - 25.9.2007, 20:42 -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
дело в том что многие методы в форма - фильтрация например, выборка данных - тоже завязана на передаваемый класс. а как я из конструктора тип в метод передам?
вот например метод на форме private void GetData(bool IsNeedFilter) { sess = SessionManager.GetSession(); using (tx = sess.BeginTransaction()) { if (IsNeedFilter) { criteria = sess.CreateCriteria(typeof(SCity)). Add(Expression.InsensitiveLike("NCity", txtByName.Text, MatchMode.Start)); } else { criteria = sess.CreateCriteria(typeof(SCity)); } m_cities = new BindingList<SCity>(criteria.List<SCity>()); tx.Commit(); bs1.DataSource = m_cities; } } тут SCity - классЮ который выбирается из БД. а если форма дженерик - то я Form1<Entity> :Form .... { ... criteria = sess.CreateCriteria(typeof(Entity)). Add(Expression.InsensitiveLike("NCity", txtByName.Text, MatchMode.Start)); } и выбирается то класс, которым я форму параметризовал. а через конструктор как? public Form1<Entity> () { } а дальше как Entity юзать? Присоединённый файл ( Кол-во скачиваний: 3 )
DictionaryTemplateForm.cs 3,95 Kb |
|||
|
||||
| zaver |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 15.8.2005 Репутация: 2 Всего: 3 |
дизайнер не может отображать Generic форму, т.к. на самом деле при вызове дизайнера нивидимо для польщователя выполняется код метода private void InitializeComponent(), а так как класс Generic, он не знает какой именно тип передается, как обощенный, и не может выполнить код. вот например, если я напишу в методе InitializeComponent() такое:
где, Some - обощенный тип, то дизайнер "загнется" (хотя все работает). нада оч аккуратно наследовать, посмотри, все ли нужные методы ты правильно перегрузил. PS какую ошибку выдает дизайнер? |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Честно говоря - не помню ошибку, вроде что то про сериализацию...
а что значит " посмотри, все ли нужные методы ты правильно перегрузил."? что перегружать то надо? и где? а что значит "аккуратно наследовать" ? Form2: Form1<SLine> - куда уж аккуратнее |
|||
|
||||
| yar |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
Да, редактор не хочет показывать форму, унаследованную напрямую от генерик-формы.
Можно попробовать выкрутиться так:
добавляем промежуточный класс:
Наконец:
Теперь в редакторе форм Form2 отображается без проблем. Идея отсюда Это сообщение отредактировал(а) yar - 26.9.2007, 15:27 --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
||||||
|
|||||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Спасибо, счас буду пробовать.
а с наследованием форм, на котрох лежат гриды или там TiilStripы (т.е. контролы с коллекциями) ничего не присоветуете? а то они как с замочками наследуются (не редактируются в потомке) Метода "сделать контрол. унаследоват ьего от ToolStrip, а потом уже на предка этот контрол кидать" не самы красивы, да и в таком случае все равно коллекция с тул-баттонами все равно рид-онли... |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
сделал как сказал Yar. Эффект такой же какой и был. Вот результат
One or more errors encountered while loading the designer. The errors are listed below. Some errors can be fixed by rebuilding your project, while others may require code changes. The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: DirectorySTruckForm --- The base class 'Marya.BCStore.GenericFormProvider' could not be loaded. Ensure the assembly has been referenced and that all projects have been built. Hide at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager) at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host) Добавлено через 13 минут и 45 секунд и при компиляции при наследование от промежуточного класса вот такую ошибку выдает public partial class sss: GenericFormProvider Error 2 Inconsistent accessibility: base class 'Marya.BCStore.GenericFormProvider' is less accessible than class 'Marya.BCStore.sss' D:\work\Marya\trunk\bcstore\BCStore\BCStore\DirectorySTruckForm.cs 12 26 BCStore |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Так что, ребятки, нет решения? :(
|
|||
|
||||
| yar |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 8.9.2007 Где: Одесса, Украина Репутация: нет Всего: 8 |
Хм... У меня этот пример работает.
На счёт ошибки компиляции, там эти классы форм должны быть одинаковой области видимости. Например, все public class. А на счёт редактора форм, можно попробовать перекомпилировать весь проект, закрыть окно дизайнера форм, и затем отрыть его снова. --------------------
Если бы строители возводили здания так, как программисты пишут программы, первый же дятел уничтожил бы мировую цивилизацию.Джеральд Вайнберг |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
ну я конкретно не этот пример, а свою шаблонную форму параметризировал , от нее родил класс, а от класса еще одну форму.. наверно изза того, что на самом первом предке до фига контролов , а некоторые еще и ск оллекциями, некоторые пользуют ресурсы... надо экперементально выявлять, где студия обламывается
|
|||
|
||||
| archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 9 Всего: 27 |
Проверь что у тя конструктор нормально создается (ну например в конструкторе нету таких вещей какие в дизайн-тайме не работают, а во время рааботы приложения работают -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
в конструкторе ничего нету в потомке.и конструктора нету. и неявно вызывется конструктор параметризированной формы. [censored 6] фигня какая то в общем.
|
|||
|
||||
| tradeinvest |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 1.10.2007 Репутация: нет Всего: нет |
А насколько я понимаю, для того чтобы сделать то что ты хочешь, надо сначало базовую форму просто собрать, подготовив обычную библиатеку DLL и потом уже брать от туда базовую форму.
А ты как я понимаю пытаешся всё это сделать в одном проекте, и у тебя не получается из за того что форма базовая просто ещё не собрана! |
|||
|
||||
| Tauler |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Хм, попробуем и так
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |