Cómo poner un UserControl en la caja de herramientas de Visual Studio

93

Hice un control de usuario en mi proyecto, y después de construir el proyecto, necesito ponerlo en mi caja de herramientas y usarlo como un control común. pero no puedo. el UserControlestá en mi proyecto de espacio de nombres, y yo probamos Choose Itemen el menú del botón derecho, pero no he encontrado una manera de añadirlo.

Saeed
fuente

Respuestas:

114

Supongo que está usando VS2010 (así es como ha etiquetado la pregunta). Tuve problemas para que se agreguen automáticamente a la caja de herramientas como en VS2008 / 2005. De hecho, existe una opción para detener el llenado automático de la caja de herramientas.

Vaya a Herramientas> Opciones> Diseñador de formularios Windows Forms> General

En la parte inferior de la lista, encontrará Toolbox> AutoToolboxPopulate, que en una instalación nueva se establece de forma predeterminada en False. Configúrelo como verdadero y luego reconstruya su solución.

Oye, listo, los controles de usuario en tu solución deberían agregarse automáticamente a la caja de herramientas. Es posible que también deba volver a cargar la solución.

DaveF
fuente
31
La palabra clave aquí para mí fue "reconstruir" ... no lo había intentado, ¡oh! Hacer eso solo solucionó esto para mí.
Danny Beckett
2
Y tuve que volver a abrir la solución después de la reconstrucción
Jim Lahman
1
En VS2012, ahora han agregado la sugerencia 'La solución actual debe volver a abrirse para que esto surta efecto' al cuadro de diálogo de opciones.
Carlos P
2
@AnatoliiGumennyi Tendrá que seguir las instrucciones de @ Arseny si UserControlestá fuera del proyecto actual.
Ataque
2
Nota: Parece que en VS2013, la configuración de Toolbox> AutoToolboxPopulate ahora está predeterminada en True en una nueva instalación.
Cascarrabias
35

Haga clic con el botón derecho en la barra de herramientas y luego haga clic en "elegir elemento" en el menú contextual. Aparece un cuadro de diálogo con los componentes registrados. en este cuadro de diálogo, haga clic en "Examinar" para seleccionar su ensamblaje con el control de usuario que desea utilizar.

PD. Esta asamblea debe registrarse antes.

Arsenio
fuente
17
¿Puedes explicar "registrado antes"? No creo que sea necesario.
Henk Holterman
25

Descubrí que el control de usuario debe tener un constructor sin parámetros o no aparecerá en la lista. al menos eso fue cierto en vs2005.

Scott
fuente
8
También en vs2012.
colbybhearn
8
También en vs2013.
Connor McGuinness
6
¿También en vs2015?
Serdar
5
Sí también en vs2015
JRB
5
Agregue vs2017 a la lista
Ryan
14

Usando VS 2010:

Digamos que tiene un proyecto de Windows.Forms. Agrega un UserControl (digamos MyControl) al proyecto y lo diseña todo. Ahora desea agregarlo a su caja de herramientas.

Tan pronto como el proyecto se haya construido con éxito una vez, aparecerá en sus Componentes de Framework. Haga clic con el botón derecho en el Cuadro de herramientas para obtener el menú contextual, seleccione "Elegir elementos ..." y busque el nombre de su control (MyControl) en la pestaña "Componentes de .NET Framework".

Ventaja sobre el uso de dlls: puede editar los controles en el mismo proyecto que su formulario, y el formulario se construirá con los nuevos controles. Sin embargo, el control solo estará disponible para este proyecto.

Nota: Si el control tiene errores de compilación, resuélvalos antes de pasar a los formularios que lo contienen, o el diseñador tiene un ataque cardíaco.

Mella
fuente
1
También podría estar disponible para otros proyectos si importa el .exe en la caja de herramientas.
Sebastian
1
¡Cualquier respuesta que contenga "o el diseñador tiene un infarto" recibe mi voto!
Joel
Hice lo mismo y todo está bien, pero cuando moví el código a otro proyecto, creo una dll y hago referencia al archivo dll, el control personalizado no aparece.
Fandi Susanto
6

Tenía muchos controles de usuario, pero uno se negó a mostrarse en la Caja de herramientas , a pesar de que reconstruí la solución y se marcó en el cuadro de diálogo Elegir elementos ...

Solución:

  1. Desde el Explorador de soluciones, hice clic con el botón derecho en el archivo de control de usuario infractor y seleccioné Excluir del proyecto
  2. Reconstruir la solución
  3. Haga clic con el botón derecho en el control de usuario y seleccione Incluir en el proyecto (asumiendo que tiene la opción Mostrar todos los archivos habilitada en el Explorador de soluciones )

Tenga en cuenta que esto también requiere que tenga habilitada la opción AutoToolboxPopulate . Como sugiere la respuesta de @DaveF.

Solución alternativa: no estoy seguro de si esto funciona, y no pude intentarlo porque ya resolví mi problema, pero si desmarcó el control de usuario en el cuadro de diálogo Elegir elementos ... , presione Aceptar y luego vuelva a abrirlo. y comprobó el control del usuario. Eso también podría funcionar.

MoMo
fuente
3

Hay un par de maneras.

  1. En su proyecto original, elija Archivo | Exportar plantilla
    Luego seleccione ItemTemplate y siga el asistente.

  2. Mueva su UserControl a una ClassLibrary separada (y arregle los espacios de nombres, etc.).
    Agregue una referencia a la biblioteca de clases de los proyectos que la necesitan. No se moleste con el GAC ni nada, solo el archivo DLL.

No recomendaría poner un UserControl en el ToolBox normal, pero se puede hacer. Vea la respuesta de @Arseny

Henk Holterman
fuente
Este parece el mejor enfoque. El único inconveniente es que no puede editar el control visualmente (o al menos no encontré cómo).
Sebastian
No importa, agregué la plantilla como elemento y el diseñador lo muestra.
Sebastian
Estoy totalmente de acuerdo y también recomendaría encarecidamente no vincular a una DLL si el proyecto que contiene UserControl está en la misma solución. Y funcionará con una DLL, es decir, el UserControl en el proyecto de biblioteca aparecerá en cualquier proyecto de WinForms que haga referencia a la biblioteca (después de una reconstrucción, por supuesto ;-)).
Xan-Kun Clark-Davis
2

En mi caso, no pude ver ninguno de los controles en el proyecto. Solo al hacer clic derecho en ToolBox y seleccionar "Mostrar todo" los vi, pero aún estaban deshabilitados ...

Cambiar el tipo de proyecto de la aplicación de Windows a ClassLibrary hizo la solución.

Efraín
fuente
1

Qustion básica si está utilizando genéricos en su control base. En caso afirmativo:

digamos que tenemos el control:

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

MyComboDropDown no permitirá abrir el diseñador en él y no se mostrará en Toolbox. ¿Por qué? Porque el control base aún no está compilado, cuando se cumple MyComboDropDown. Puede modificar esto:

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

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Luego, después de reconstruir y restablecer la caja de herramientas, debería poder ver MyComboDropDown en el diseñador y también en la Caja de herramientas

Andrzej
fuente
0

¡La recompilación funcionó para mí!

Lex van Buiten
fuente