2013-04-18 2 views
1

У меня есть UserControl класс Employee_EmployeeKeyOneRelationUC, которые наследуют от RelationUC которые наследуют от RelationBase, которые наследуют от System.Window.Forms.UserControlVS 2012 Конструктор не может быть показан

Когда я пытаюсь открыть мой Employee_EmployeeKeyOneRelationUC в конструкторе У меня есть эта ошибка:

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: Employee_EmployeeKeyOneRelationUC --- The base class 'AstusFMS.Content.RelationUC' could not be loaded. Ensure the assembly has been referenced and that all projects have been built.

Но когда я открываю RelationUC и RelationBase, оба отображаются правильно.

Моя программа все еще компилируется, но почему это беспокоит меня? Поскольку у меня есть форма EmployeeForm, которая использует много UserControl (например, Employee_EmployeeKeyOneRelationUC), и когда я пытаюсь что-то редактировать в этом Форме, каждый UserControl, включенный в форму, наследующую от UserControleBase, удаляется (слева: TFS-сервер, справа: локальный):

Diff for EmployeeForm.Designer.cs (left: TFS Server, right: local)

Эта разница показывает, что дизайнер удалил все мои ucEmployee* объект. Просто потому, что я меняю имя ComboBox (combobox не имеет отношения к одному из UC).

Я заметил, что когда я создаю новый UserControl файла по умолчанию код, проявляющиеся имеет ошибку: Default UserControl with error

Но Using System.Windows.Forms; прямо там. Если я изменю UserControl на System.Windows.Forms.UserControl, он будет работать.

Возможно, я не могу быть достаточно ясным, поэтому, если у вас есть вопрос, я буду отвечать и проверять весь день.

Проверено на 3 разных компьютерах с VS2010, VS2012 Update 1, VS2012 Update 2

+0

У вас есть пространство имен в вашем решении с «UserControl» в пути? Он работает, когда вы полностью квалифицируете его, потому что он способен различать класс, который вы намереваетесь, и пространство имен, которое у вас нет. – Alan

+0

Да, я не думал об этом. Это одна проблема исправлена. У вас есть идея о UC, которая не появится и мой код удаления? –

+0

[Этот вопрос может помочь вам] (http://stackoverflow.com/questions/6683255/the-designer-could-not-be-shown-for-this-file-because-none-of-the-classes- внутри) – Alan

ответ

4

При использовании дженериков внутри формы или UserControl, это рекомендуется поместить пустой класс, которые определяют тип Generic. Затем ваша текущая форма происходит от этого класса.

Я поместил этот класс в один и тот же файл. Она должна быть после фактической формы коды:

public partial class Employee_EmployeeKeyOneRelationUC 
    : Employee_EmployeeKeyOneRelation_GenericUC 
    { ... } 

    public class Employee_EmployeeKeyOneRelation_GenericUC 
    : RelationUC<MyObject> 
    { } 
+1

Он работает, спасибо. Какой глупый обходной путь, но он работает! –

+0

это не помогло мне – Boogier

+0

Большое спасибо, это работает, но я тоже считаю, что это глупо. Поэтому я сдался. Кроме того, я должен добавить, что, когда я пытаюсь решить эту проблему, я использовал один конструктор с параметром в классе, который выводится из общей формы. Но это не сработало. Затем я добавил пустой конструктор, и он снова работал. Это интересная ошибка ... – bafsar

1

VS2013 есть ошибка с дизайнером формы, если вы загружаете в от VS2010 приложения C++ CLR Winforms. «Дизайнер не может быть показан для этого файла, потому что ни один из классов внутри него не может быть спроектирован».

Если вы изменили и сохранили исходный файл, дизайнер форм снова начнет работать. Но он снова не работает при загрузке в проекте. Похоже на гонку между загрузкой исходного файла и конструктором форм, анализирующим код.

Смежные вопросы