Как поместить UserControl в ToolBox Visual Studio

94

Я создал пользовательский элемент управления в своем проекте, и после создания проекта мне нужно поместить его в свой набор инструментов и использовать его как общий элемент управления. но я не могу. это UserControlнаходится в пространстве имен моего проекта, и я попытался Choose Itemоткрыть меню правой кнопкой мыши, но не нашел способа добавить его.

Саид
источник

Ответы:

116

Я предполагаю, что вы используете VS2010 (это то, что вы отметили как вопрос). У меня возникли проблемы с их автоматическим добавлением в набор инструментов, как в VS2008 / 2005. На самом деле есть возможность остановить автоматическое заполнение панели инструментов!

Перейдите в Инструменты> Параметры> Конструктор Windows Forms> Общие.

Внизу списка вы найдете Toolbox> AutoToolboxPopulate, для которого при новой установке по умолчанию установлено значение False. Установите значение true, а затем перестройте свое решение.

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

DaveF
источник
32
Ключевым словом здесь для меня было «восстановить» ... не пробовал, ооо! Одно это помогло мне решить эту проблему.
Дэнни Беккет
2
И мне пришлось повторно открыть решение после перестройки
Джим Лахман
1
В VS2012 они теперь добавили подсказку «Текущее решение необходимо повторно открыть, чтобы это вступило в силу» в диалоговом окне параметров.
Carlos P
2
@AnatoliiGumennyi Вам нужно будет следовать инструкциям @Arseny, если объект UserControlнаходится за пределами текущего проекта.
Attacktive
2
Примечание. Похоже, что в VS2013 для параметра Toolbox> AutoToolboxPopulate теперь по умолчанию установлено значение True при новой установке.
Curmudgeon
36

Щелкните правой кнопкой мыши на панели инструментов, затем нажмите «выбрать элемент» в контекстном меню. Появится диалоговое окно с зарегистрированными компонентами. в этом диалоговом окне нажмите «Обзор», чтобы выбрать сборку с пользовательским элементом управления, который вы хотите использовать.

PS. Эта сборка должна быть предварительно зарегистрирована.

Арсений
источник
17
Вы можете объяснить «регистрировались раньше»? Я не думаю, что это необходимо.
Хенк Холтерман,
25

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

Скотт
источник
8
Также в vs2012.
colbybhearn
8
Также в vs2013.
Коннор МакГиннесс
6
Также в vs2015?
serdar
5
Да, также в vs2015
JRB
5
Добавить vs2017 в список
Райан
14

Использование VS 2010:

Допустим, у вас есть проект Windows.Forms. Вы добавляете в проект UserControl (скажем, MyControl) и разрабатываете его. Теперь вы хотите добавить его в свой набор инструментов.

Как только проект будет успешно построен, он появится в ваших компонентах Framework. Щелкните правой кнопкой мыши панель инструментов, чтобы открыть контекстное меню, выберите «Выбрать элементы ...» и перейдите к имени вашего элемента управления (MyControl) на вкладке «Компоненты .NET Framework».

Преимущество перед использованием dll: вы можете редактировать элементы управления в том же проекте, что и ваша форма, и форма будет построена с новыми элементами управления. Однако контроль будет доступен только для этого проекта.

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

Ник
источник
1
Он также может быть доступен для других проектов, если вы импортируете .exe в панель инструментов.
Себастьян,
1
Мой голос получает любой ответ, содержащий «или у дизайнера инфаркт»!
Joel
Я сделал то же самое, и все в порядке, но когда я переместил код в другой проект, создал dll и ссылался на файл dll, пользовательский элемент управления не отображается.
Fandi Susanto
6

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

Решение:

  1. В обозревателе решений я щелкнул правой кнопкой мыши файл пользовательского элемента управления, вызывающий нарушение, и выбрал « Исключить из проекта».
  2. Восстановите решение
  3. Щелкните правой кнопкой мыши пользовательский элемент управления и выберите « Включить в проект» (при условии, что в обозревателе решений включен параметр « Показать все файлы» ).

Обратите внимание, что для этого также требуется, чтобы у вас был включен параметр AutoToolboxPopulate . Как следует из ответа @DaveF.

Альтернативное решение: я не уверен, работает ли это, и я не мог попробовать, так как я уже решил свою проблему, но если вы сняли флажок с пользовательского элемента управления в диалоговом окне Выбрать элементы ... , нажмите OK, а затем откройте его резервную копию и проверил пользовательский элемент управления. Это тоже может сработать.

МоМо
источник
3

Есть несколько способов.

  1. В исходном проекте выберите File | Export template
    Затем выберите ItemTemplate и следуйте указаниям мастера.

  2. Переместите свой UserControl в отдельную ClassLibrary (и исправьте пространства имен и т. Д.).
    Добавьте ссылку в библиотеку классов из проектов, которым она нужна. Не беспокойтесь о GAC или чем-то еще, только о файле DLL.

Я бы не советовал помещать UserControl в обычный ToolBox, но это можно сделать. Смотрите ответ от @Arseny

Хенк Холтерман
источник
Это кажется лучшим подходом. Единственный недостаток - вы не можете редактировать элемент управления визуально (по крайней мере, я не нашел как).
Себастьян
Неважно, я добавил шаблон как элемент, и дизайнер показывает.
Себастьян
Я полностью согласен и настоятельно рекомендую не связываться с DLL, если проект, содержащий UserControl, находится в том же решении. И он будет работать с DLL, т.е. UserControl в проекте библиотеки будет отображаться в любом проекте WinForms, который ссылается на библиотеку (после перестройки, конечно ;-)).
Ксан-Кун Кларк-Дэвис
2

В моем случае я не видел никаких элементов управления в проекте. Только щелкнув правой кнопкой мыши на toolBox и выбрав «Показать все», я увидел их, но все же они были отключены ...

Изменение типа проекта с приложения Windows на ClassLibrary внесло исправление.

Ефрем
источник
1

Базовый вопрос, если вы используете дженерики в своем базовом элементе управления. Если да:

допустим, у нас есть контроль:

public class MyComboDropDown : ComboDropDownComon<MyType>
{
    public MyComboDropDown() { }
}

MyComboDropDown не позволяет открывать дизайнер на нем и не будет отображаться в панели инструментов. Зачем? Поскольку базовый элемент управления еще не скомпилирован - когда выполняется MyComboDropDown. Вы можете изменить это:

public class MyComboDropDown : MyComboDropDownBase
{
    public MyComboDropDown() { }
}

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Затем после перестройки и сброса панели инструментов он должен увидеть MyComboDropDown в дизайнере, а также в панели инструментов

Анджей
источник
0

Проблема с моим дизайнером была 32 против 64 бит. Я мог бы добавить элемент управления в панель инструментов после выполнения инструкций в статье « Невозможно добавить элементы управления из 64-разрядных сборок в панель инструментов» или «Использование в конструкторах в рамках статьи MS KB в среде Visual Studio IDE» .

Смита
источник
0

Перекомпиляция помогла мне!

Лекс ван Буйтен
источник