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

Невозможно разместить элемент управления пользователя по форме

Я создал приложение С# WinForms, используя VS2010. Я новичок в создании пользовательских элементов управления, поэтому я создал новый пользовательский элемент управления (как часть того же проекта).

Когда я перестраиваю проект, в панели инструментов появляется новый элемент управления. И когда я перетаскиваю элемент управления из панели инструментов в форму, я получаю следующую ошибку.

Не удалось загрузить элемент панели инструментов "TagGroup". Он будет удален из панели инструментов.

Это произошло только в тот раз, когда я создал пользовательский элемент управления. Я искал в Интернете, но большинство ответов, которые я нашел, похоже, связано с управлением в отдельной сборке. (Обратите внимание, что я нашел много вопросов с той же проблемой, что и у меня.)

Может ли кто-нибудь предложить, где я должен смотреть дальше?

4b9b3361

Ответ 1

Я, наконец, понял это.

В проекте, с которым я работаю, используются две сборки библиотеки классов. Хотя они не имеют никакого отношения к управлению, которое я обсуждаю, я посмотрел и увидел, что обе библиотеки имеют платформу Target на вкладке Properties | Build, настроенной на "Any CPU".

С другой стороны, мое приложение установило этот параметр в "x64". Изменив настройку моего приложения на "Любой процессор", теперь я могу поместить свои пользовательские элементы управления в свои формы.

Показать фигуру...

Ответ 2

Мое приложение должно быть 64-битным. Чтобы использовать пользовательские элементы управления в дизайнере, я просто добавил новый проект в свое решение. Этот новый проект использует настройку "AnyCPU" и содержит все мои пользовательские элементы управления.

Мое решение содержит следующие проекты:

  • MyApp, который является моим основным проектом (приложение Windows Form), скомпилированным в 64-разрядном и ссылающимся на мой второй проект
  • MyApp.UI.UserControls (библиотека классов) скомпилирована для " Любой процессор" и содержит все мои пользовательские элементы управления

Работает как шарм, и он чист.


Кстати, есть статья поддержки Microsoft об этой проблеме.

  • Действие: Вы пытаетесь использовать 64-разрядный компонент в интегрированной среде разработки Microsoft Visual Studio (IDE).
  • Ошибка: это поведение по дизайну. Visual Studio представляет собой 32-разрядный процесс и поэтому может выполнять только 32-битные модули. Хотя Visual Studio позволяет добавить ссылку на 64-битную сборку, она не может на самом деле JIT компилировать ее на 64-разрядную версию и выполнять ее в процессе.
  • Разрешение:
    • Восстановите сборку, используя настройку "AnyCPU". Это позволило бы компонент для запуска в 32-битном процессе (например, Visual Studio) или в 64-битном процессе.
    • Добавьте сборку в качестве ссылки и динамически загрузите элемент управления время выполнения. Хотя вы все еще не сможете использовать управления внутри любого дизайнера внутри Visual Studio, вы все равно можете напишите код, необходимый для создания экземпляра элемента управления и установите его свойства соответственно.

Источник: http://support.microsoft.com/kb/963017

Ответ 3

У меня тоже была эта проблема, но ответ мне не подходил. В моем проекте есть некоторые проблемы, которые он может использовать только для x86 и x64 отдельно. Другими словами, я не могу использовать конфигурацию AnyCPU (потому что я ссылаюсь на разные библиотеки для каждой конфигурации, поскольку эти библиотеки не подходят для AnyCPU).

Решение, с которым я столкнулся, было: когда мне нужно использовать конструктор форм, я меняю настройку на x86. Сделайте задание, затем вернитесь к x64 и проверьте. Проблема возникает только с дизайнером, но решение строит и работает нормально.

Ответ 4

У меня была эта проблема в VS2015, и решение оказалось простым.

Я создал пользовательский элемент управления, разрезав и вставив несколько существующих элементов управления из формы (с целью их группировки в пользовательский элемент управления). Пользовательский контроль был в порядке (без ошибок компиляции), однако удаление элементов управления из существующей формы означало, что приложение не будет компилироваться. Конечно, невозможность добавления нового элемента управления означала, что я не мог обновить код, ссылающийся на предыдущие элементы управления, на код, ссылающийся на пользовательский элемент управления.

Все, что я делал, это взлом и слэш (комментирование, создание временных элементов управления и т.д.), чтобы все приложение было скомпилировано. После компиляции я обнаружил, что могу перетащить пользовательский элемент управления в форму (без ошибки, вызвавшей этот вопрос). Затем мне пришлось распаковывать и разворачивать, чтобы код правильно ссылался на новый настраиваемый элемент управления.

Ответ 5

Такая же проблема. Я предполагаю, что это связано с тем, что VS2010, установленный на ОС x64, по-прежнему является 32-битной программой в сердце.

Альтернативное решение, которое вы можете попробовать, это просто открыть TheFormThisUserControlIsSupposedToBeAddedTo.Designer.cs и использовать код для добавления пользовательского элемента управления. В основном, вы делаете грязную работу, которую должен выполнять Дизайнер.

Это не так сложно, как кажется, особенно. учитывая, что в этом файле, вероятно, есть много примеров кода (например, кнопки, добавленные с помощью конструктора). Единственная трудная часть состоит в том, чтобы определить правильные координаты в форме для размещения элемента управления.

Конечным результатом является то, что вы не можете видеть пользовательский элемент управления в Desinger, но они добавляются при отладке/запуске.

Ответ 6

Я также испытал эту проблему, но причина была другая. В моем случае конструктор компонента (формы) или событие Load вызывали метод в другом месте, который использовал отражение, чтобы найти все классы, которые реализовали определенный интерфейс.

Пока это нормально работает во время выполнения, оно генерирует вышеупомянутое исключение во время разработки. (Исключение типа инициализации с исключением типа Load Exception как внутреннее исключение).

Ответ 7

Час запутанного, утомленного устранения неполадок в 3:36 утра снова легко разрешен свежим умом на следующий день!
Я исправил простую ошибку правописания в имени файла управления, поэтому теперь он сопоставил имя UserControl, очистил и перестроил, а Бобс - ваш странный дядя-кот.:]

Ответ 8

Свойство GO GO, затем вкладку "Build" и установите флажок "Target Platform" на "AnyCPU".