Приветствую!
Столкнулся со следующей проблемой: создаю generic-форму
public class MyForm<SomeType> : Form
Всё работает нормально никаких проблем нет. Отличий от обычной формы тоже нет.
А вот если унаследовать от неё,
public class InheritedForm : MyForm<MyType>
то унаследованную форму невозможно открыть в дизайнере — он страшно ругается на всякое. При этом программа работает нормально и унаследованная форма отображается без проблем.
Ходят упорные слухи, что можно забороть проблему, сделав промежуточный класс, который бы сам уже был без дженерика, и наследуя от него:
public class BaseForm : MyForm<MyType> {}
public class InheritedForm : BaseForm
Только оно не помогает.
Что не так с этими дженериками и как их побороть, чтобы с формой можно было работать и в дизайнере?
Здравствуйте, XopcT, Вы писали:
XT>Приветствую!
XT>Столкнулся со следующей проблемой: создаю generic-форму
XT>public class MyForm<SomeType> : Form
XT>Всё работает нормально никаких проблем нет. Отличий от обычной формы тоже нет.
XT>А вот если унаследовать от неё,
XT>public class InheritedForm : MyForm<MyType>
XT>то унаследованную форму невозможно открыть в дизайнере — он страшно ругается на всякое. При этом программа работает нормально и унаследованная форма отображается без проблем.
Что конкретно пишет дизайнер?
Здравствуйте, XopcT, Вы писали:
XT>Ходят упорные слухи, что можно забороть проблему, сделав промежуточный класс, который бы сам уже был без дженерика, и наследуя от него:
XT>XT>public class BaseForm : MyForm<MyType> {}
XT>public class InheritedForm : BaseForm
XT>
XT>Только оно не помогает.
XT>Что не так с этими дженериками и как их побороть, чтобы с формой можно было работать и в дизайнере?
Не так то, в вашем случае, что дизайнер работает с первым классом, объявленном в файле. А у вас это "промежуточный класс". Нужно так:
XT>public class InheritedForm : BaseForm
XT>public class BaseForm : MyForm<MyType> {}
Всё, проблема разрешилась. Действительно, введение промежуточного "пустого" класса спасало положение.
Кроме этого, возникал глюк в form_Load'е, от него и шли все неприятности. Когда подправил этот метод, всё стало нормально работать.
Благодарю за советы.