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

Ошибка "Не удалось найти тип" при загрузке формы в 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 на отдельную сборку, чтобы ее можно было компилировать отдельно, но это не имеет никакого значения.

Я не знаю, куда идти отсюда. Любая помощь будет оценена!

4b9b3361

Ответ 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", я не могу открыть конструктор для формы, которая использует настраиваемый элемент управления и работает в папке со стволом.

Просто сойди С# и хорошо работай.

Спасибо.