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


94

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

Ответы:


116

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

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

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

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


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» .


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.