Почему не работает дизайнер, если вы унаследовали от собственной письменной родовой формы?
Предположим, у меня есть следующая общая форма
public class GenericForm<T> : System.Windows.Forms.Form
{
public T Test
{
get;
set;
}
}
Когда я иду к дизайнеру, то получаю ошибки.
Единственный обходной путь, который я придумал, - это использование директив компилятора.
#if DESIGN
public partial class Form1 : System.Windows.Forms.Form
#else
public partial class Form1 : GenericForm<string>
#endif
{
public Form1()
{
InitializeComponent();
}
}





К сожалению, у дизайнера есть множество подобных "подводных камней". Может быть, где-то есть их хорошее резюме, но я никогда не втягивался в него настолько, чтобы сделать это необходимым.
Однако я столкнулся с этой конкретной проблемой, за исключением случая, когда она применяется к пользовательскому элементу управления. Решение, которое я придумал (опять же довольно хакерское, но по-другому), состоит в том, чтобы получить конкретный класс из общего. В вашем случае вы бы сделали:
public class StringForm : GenericForm<string>
После этого вы сможете без проблем использовать StringForm в дизайнере.
Я считаю, что это потому, что дизайнер пытается создать экземпляр формы (или UserControl), чтобы разместить его в дизайнере. Если у вас есть общая (или абстрактная) форма, дизайнер не может ее создать.
Имеет смысл. Та же проблема возникает и с абстрактными классами :(.