No se puede colocar el Control de Usuario en el Formulario


He creado una aplicación WinForms de C# usando VS2010. Soy nuevo en la creación de controles de usuario, así que he creado un nuevo control de usuario (como parte del mismo proyecto).

Cuando reconstruyo el proyecto, el nuevo control aparece en la caja de herramientas. Y cuando arrastre el control desde la caja de herramientas a un formulario, obtengo el siguiente error.

No se pudo cargar el elemento de la caja de herramientas 'TagGroup'. Se eliminará de la caja de herramientas.

Esto sucedió la única vez que creé un control de usuario como bien. He buscado en la web, pero la mayoría de las respuestas que encontré parecían relacionadas con tener el control en un ensamblaje separado. (Tenga en cuenta que encontré un montón de preguntas con el mismo problema que estoy teniendo.)

¿Puede alguien sugerir dónde debo mirar a continuación?

Author: Jonathan Wood, 2011-01-26

8 answers

Finalmente me di cuenta de esto.

El proyecto con el que estoy trabajando utiliza dos ensamblados de bibliotecas de clases. Aunque estos no tienen nada que ver con el control que estoy discutiendo, miré y vi que ambas bibliotecas tienen Destino de plataforma en la pestaña Propiedades|Compilación establecida en "Cualquier CPU".

Por otro lado, mi aplicación tenía esta configuración establecida en "x64". Al cambiar la configuración de mi aplicación a "Cualquier CPU", ahora puedo colocar mis controles de usuario en mis formularios.

Vaya figura...

 33
Author: Jonathan Wood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-27 06:25:41

Mi aplicación debe ser de 64 bits. Con el fin de utilizar controles de usuario personalizados en el diseñador acabo de añadir un nuevo proyecto a mi solución. Este nuevo proyecto usa la configuración "AnyCPU" y contiene todos mis controles de usuario.

Mi solución contiene los siguientes proyectos:

  • MyApp que es mi proyecto principal (Aplicación de formulario de Windows) compilado en 64 bits y haciendo referencia a mi segundo proyecto
  • MyApp.UI.UserControls (biblioteca de clases) se compila para "Cualquier CPU " y contiene todos mis controles de usuario

Funciona como un encanto y está limpio


Por cierto, hay un artículo de soporte de Microsoft sobre ese tema.

  • Acción: Intenta usar un componente de 64 bits dentro del Entorno de desarrollo integrado (IDE) de Microsoft Visual Studio.
  • Causa de error: Este comportamiento es por diseño. Visual Studio es un proceso de 32 bits, y por lo tanto solo puede ejecutar módulos de 32 bits. Mientras Visual Studio le permite agregar una referencia a un ensamblado de 64 bits, en realidad no puede compilarlo JIT a 64 bits y ejecutarlo en proceso.
  • Resolución:
    1. Reconstruya el ensamblado usando la opción "AnyCPU". Esto permitiría el componente que se ejecutará dentro de un proceso de 32 bits (como Visual Studio), o en un proceso de 64 bits.
    2. Agregue el ensamblado como referencia y cargue el control dinámicamente en tiempo de ejecución. Aunque usted todavía sería incapaz de utilizar el control dentro de cualquier diseñador dentro de Visual Estudio, todavía puedes escriba el código necesario para instanciar el control y configurarlo propiedades en consecuencia.

Fuente: http://support.microsoft.com/kb/963017

 33
Author: Yves M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-23 23:35:46

Yo también tenía este problema, pero la respuesta no podía encajar para mí. Mi proyecto tiene algunos problemas que solo puede apuntar a x86 y x64 por separado. En otras palabras, no puedo usar la configuración AnyCPU (eso es porque hago referencia a diferentes bibliotecas para cada configuración, ya que esas bibliotecas no son aptas para AnyCPU).

La solución que se me ocurrió fue: cuando necesito usar el diseñador de formularios, cambio la configuración a x86. Haz el trabajo, luego vuelve a x64 y prueba. El problema ocurre solo con el diseñador, pero la solución construye y funciona bien.

 6
Author: Daniel Möller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-16 20:43:38

Tuve este problema en VS2015 y la solución resultó ser simple.

Había creado un control de usuario cortando y pegando algunos controles existentes de un formulario (con el objetivo de agruparlos en el control personalizado). El control personalizado estaba bien (sin errores de compilación), sin embargo, la eliminación de los controles de la forma existente significaba que la aplicación no compilaría. Por supuesto, no poder agregar el nuevo control significaba que no podía actualizar el código que hacía referencia al anterior controles con código que hace referencia al control personalizado.

Todo lo que hice fue hackear y cortar (comentar, crear controles temporales, etc.) para que toda la aplicación se compile. Después de compilarlo, descubrí que podía arrastrar el control personalizado al formulario (sin el error que provocó esta pregunta). Luego tuve que desenchufar y desenchufar para que el código hiciera referencia correctamente al nuevo control personalizado.

 4
Author: Andrew Jens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-21 01:13:35

El mismo problema aquí. Supongo que está relacionado con el hecho de que el VS2010 instalado en el sistema operativo x64 sigue siendo un programa de 32 bits en el corazón.

Una solución alternativa que uno podría querer probar es simplemente abrir el formulario Thisusercontrolissupposedtobeaddedto.Diseñador.cs y use el código para agregar el control de usuario. Básicamente, estás haciendo el trabajo sucio que se supone que el Diseñador debe hacer.

No es tan difícil como parece, esp. teniendo en cuenta que probablemente hay un montón de código de ejemplo en ese archivo ya (por ejemplo, los botones que agregaste usando Designer). La única parte difícil es averiguar las coordenadas correctas en la forma para colocar el control.

El resultado final es que no puede ver el control de usuario en Desinger, pero se agregan al depurar/ejecutar.

 2
Author: lznt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-01 22:25:02

También experimenté este problema, pero la causa fue diferente. En mi caso, un constructor de componente (formulario) o un evento de carga invocaron un método en otro lugar que usó reflexión para encontrar todas las clases que implementaron una determinada interfaz.

Si bien funciona bien en tiempo de ejecución, generó la excepción mencionada anteriormente en tiempo de diseño. (Excepción de inicialización de tipo con una Excepción de Carga de tipo como excepción interna).

 0
Author: Lord of Scripts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-15 20:30:40

¡Una hora de solución de problemas confusos y cansados a las 3:36 a. m. se resuelve fácilmente al día siguiente con una mente fresca!
Arreglé un simple error de ortografía en el nombre del archivo del control, por lo que ahora coincide con el nombre de UserControl, limpiado y reconstruido y Bobs gato de su tío raro. :]

 0
Author: n00dles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-03 15:22:18

Vaya a la propiedad del proyecto, luego a la pestaña 'Build' y marque 'Target Platform' como 'AnyCPU'.

 -1
Author: Kim Ki Won,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-14 03:59:14