Визуальный проектировщик Winform Студии 2008 года не загружает Форму, которая наследует универсальному классу

у меня есть проект winforms, и я создал класс на собрании, который наследует 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)  

Действительно ли это - ошибка на проектировщике?, я делаю что-то не так? Есть ли некоторая работа это?

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

12
задан albertein 12 January 2010 в 19:05
поделиться

1 ответ

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

Например:

class Generic<T> : UserControl
{
}

затем

class GenericInt : Generic<int> { }

затем используют Rebalicint вместо универсального. Отстой я знаю.

16
ответ дан 2 December 2019 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: