Мы делаем то же самое, и мы работаем вокруг путем специализации класса сначала и происходим из специализированного класса. С помощью кода от примера это означает что-то как:
public partial class UserControl : UserControlDesignable
{
...
}
public class UserControlDesignable : BaseUserControl<Someclass> { }
Разработчик все еще психует иногда - но большую часть времени это работает.
Необходимо будет обмануть разработчика путем добавления 'регулярного' класса, который наследовался универсальной основной форме. Ваша используемая во время разработки форма должна затем наследоваться этому классу. Следующие 2 определения классов находятся таким образом в том же файле. Необходимо будет удостовериться, что класс, который наследовался универсальному основному пользовательскому элементу управления, является последним классом в файле.
public MyForm : EditableCustomerForm
{}
public EditableCustomerForm : GenericForm<Customer>
{}
Разработчик отобразит первый класс в файле кода, с которым он встречается.