Подтвердить что ты не робот

Дизайнеру Visual Studio 2008 Winform не удается загрузить форму, которая наследуется от общего класса

У меня есть проект winforms, и я создал класс в сборке A, который наследует от System.Windows.Forms.Form, чтобы служить базовым классом для различных форм в моем проекте, базовый класс - это что-то вроде:

public partial class DataForm<T> : Form where T : class
{

    T currentRecord;

    protected T CurrentRecord
    {
        get
        {
            return currentRecord;
        }
        set
        {
            currentRecord = value;
            CurrentRecordChanged();
        }
    }
}

Теперь, когда я создаю форму на сборке B, которая наследуется от моего DataForm, дизайнер не загружается, но если я его скомпилирую, приложение будет работать нормально.

Форма выглядит так:

public partial class SomeTableWindow : DataForm<SomeTable>
{
    public SomeTableWindow ()
    {
        InitializeComponent();
    }
}

Ошибка, которую я получаю:

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: CultivosWindow --- The base
class 'TripleH.Erp.Controls.DataForm' could not be loaded. Ensure the assembly has 
been referenced and that all projects have been built.    


Instances of this error (1)  

1.   Hide Call Stack 

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)  

Это ошибка в дизайнере? Я делаю что-то неправильно? Есть ли это обходное решение?

Спасибо за помощь

4b9b3361

Ответ 1

Это известное ограничение. В основном вы можете обойти это, объявив еще один класс, который наследуется от общего класса.

Например:

class Generic<T> : UserControl
{
}

затем

class GenericInt : Generic<int> { }

затем используйте GenericInt вместо Generic. Да, я знаю.