Тип наследования не может быть показан в конструкторе - PullRequest
1 голос
/ 04 января 2011

Я столкнулся с проблемой сегодня. Как следует.
Я создаю общую форму,
открытый класс Форма 1: Форма
Затем я создаю другую форму наследования,
открытый класс From2: Form1.
Форма 2 не может быть отображена в конструкторе VS, сообщение об ошибке «все классы в файле не могут быть спроектированы» (это сообщение об ошибке переведено с китайского, китайское сообщение - 文件 中 的 类 都 不能 进行 设计). < бр /> Но эта программа может быть успешно скомпилирована, и при запуске могут работать как Form1, так и From2.

Кто-нибудь может мне помочь? Спасибо.

Я не являюсь носителем английского языка, надеюсь, я четко изложил свой вопрос.

Ответы [ 2 ]

6 голосов
/ 04 января 2011

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

http://adamhouldsworth.blogspot.com/2010/02/winforms-visual-inheritance-limitations.html

2 голосов
/ 30 марта 2015

Я хотел бы дать более конкретный ответ в качестве дополнения к сообщению Адама .

BaseForm - это название вашей общей формы, GenericClass один изВозможные параметры типа.

BaseForm<T> может выглядеть так:

public class BaseForm<T> : Form
{ }

Во-первых, вам нужен вышеуказанный базовый класс.На самом деле это та часть, которую вы, вероятно, уже использовали, прежде чем столкнуться с этим вопросом.

Затем вы используете эту промежуточную реализацию.

public class SampleFormIntermediate : BaseForm<GenericClass>
{
    public SampleFormIntermediate()
    {
        InitializeComponent();
    }
}

И вам нужно использовать этот класс для VisualСтудия дизайнера.И только это.Я бы рекомендовал декорировать это директивой компилятора, чтобы она использовалась только в режиме Debug:

public partial class SampleForm : SampleFormIntermediate
{
}

При использовании этой Visual Studio «понимает», что открывать в конструкторе и как его открывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...