Ошибка "Не удалось найти тип" при загрузке формы в Windows Forms Designer
У меня есть приложение форм Windows.NET 2.0, которое сильно использует элемент управления ListView
.
Я подклассифицировал класс ListView
в templated SortableListView<T>
класс, поэтому он может быть немного умнее о том, как он отображает вещи, и сортировать себя.
К сожалению, это, похоже, нарушает конструктор форм Visual Studio, как в VS2005, так и в 2008 году.
Программа компилируется и работает нормально, но когда я пытаюсь просмотреть форму владельца в конструкторе, я получаю следующие ошибки:
- Не удалось найти тип "MyApp.Controls.SortableListView". Убедитесь, что в сборке, содержащей этот тип, указывается ссылка. Если этот тип является частью вашего проекта разработки, убедитесь, что проект был успешно создан.
Для этой ошибки нет информации о трассировке стека или строки ошибки
- Переменная "listViewImages" либо не объявлена, либо никогда не была назначена.
В строке MyApp.Main.Designer.cs: XYZ Column: 1
Call stack:
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
Строка кода, о которой идет речь, заключается в том, где она фактически добавляется в форму и
this.imagesTab.Controls.Add( this.listViewImages );
listViewImages объявлен как
private MyApp.Controls.SortableListView<Image> listViewImages;
и создается в методе InitializeComponent
следующим образом:
this.listViewImages = new MyApp.Controls.SortableListView<Image>();
Как упоминалось ранее, программа компилируется и работает отлично, и я попытался перевести класс SortableListView
на отдельную сборку, чтобы ее можно было компилировать отдельно, но это не имеет никакого значения.
Я не знаю, куда идти отсюда. Любая помощь будет оценена!
Ответы
Ответ 1
когда вы добавили listview, добавили ли вы его в панель инструментов и добавили в форму?
Нет, я только что отредактировал Main.Designer.cs
и изменил его с System.Windows.Forms.ListView
на MyApp.Controls.SortableListView<Image>
Подозревая, что это могло произойти из-за того, что дженерики привели меня к нахождению решения.
Для каждого класса, который мне нужен для создания SortableListView, я определил "класс-заглушку", как этот
class ImagesListView : SortableListView<Image> { }
Затем сделал файл Main.Designer.cs
ссылкой на эти классы-заглушки вместо SortableListView
.
Теперь он работает, ура!
К счастью, я могу это сделать, потому что все мои типы известны раньше, и я использую SortableListView
как метод сокращения дублирующего кода.
Ответ 2
Это случилось со мной из-за архитектуры x86/x64.
Так как Visual Studio (сам инструмент разработки) не имеет x64-версии, невозможно загрузить x64-элемент управления в GUI-конструктор.
Лучшим подходом для этого может быть настройка GUI под x86 и компиляция его для x64, когда это необходимо.
Ответ 3
У меня была такая проблема (в то время не такая), когда мой элемент управления находился в другом пространстве имен в моей форме, даже если он был в одном проекте. Чтобы исправить это, мне пришлось добавить
using My.Other.Namespace;
в начало созданного конструктором кода. Досадная вещь заключалась в том, что он все время сдувался, когда дизайнер регенерировал страницу.
Ответ 4
У меня тоже была эта проблема, связанная с объединением массивных изменений SVN (с конфликтами) в файле *.Designer.cs. Решение состояло в том, чтобы просто графически открыть графический дизайн, отредактировать элемент управления (переместить его влево и вправо) и сохранить структуру. Файл *.Designer.cs волшебным образом изменился, и предупреждение исчезло при следующей компиляции.
Чтобы быть ясным, сначала нужно исправить все проблемы с слиянием кода. Это просто работа, чтобы заставить VS перезагрузить их.
Ответ 5
Сборка, содержащая MyApp.Controls.SortableListView, не установлена в GAC, не так ли?
Ответ 6
когда вы добавили listview, добавили ли вы его в панель инструментов и добавили в форму?
Ответ 7
Возможно, вы забыли добавить это:
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Release all resources used.
/// </summary>
/// <param name="disposing">true if managed resources should be removed otherwise; false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
// ...
this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use
// ...
}
Ответ 8
У меня было что-то подобное - пользовательский элемент управления имел в виду удаленный сеанс (который я не мог гарантировать, что он доступен во время разработки).
Этот пост в MSDN предложил добавить
if (this.DesignMode) return;
для функции загрузки элемента управления или в моем случае до момента, когда клиент WCF был инициализирован. Это сделал трюк.
Итак,
private readonly Client _client = new Client();
становится
private Client _client;
public new void Load()
{
if(DesignMode) return;
_client = new Client();
}
Ответ 9
У меня была такая же проблема. В моем случае эта проблема была вызвана инициализацией ресурсов. Я переместил следующий код из метода InitializeComponent
в ctor (после вызова InitializeComponent
). После этого эта проблема была решена:
this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));
Ответ 10
У меня была та же проблема. После удаления некоторых из моих собственных элементов управления *.Designer.cs-File проблема была решена. Вернувшись к исходному коду, проблема все еще решена. Так что это проблема с кэшем Visual Sudio. На данный момент я не могу воспроизвести эту проблему.
Если у вас есть проблема, попробуйте создать папку
C:\Users\ВашеИмя\AppData\Local\Microsoft\VisualStudio\версия\Конструктор\ShadowCache
Это сработало?
Ответ 11
В моем случае проблема была в имени папки моего проекта! Почему я так думаю:
Я использую SVN, а в "trunk\SGIMovel" отлично работает. Но в папке ветки, названной "OS # 125\SGIMovel", я не могу открыть конструктор для формы, которая использует настраиваемый элемент управления и работает в папке со стволом.
Просто сойди С# и хорошо работай.
Спасибо.