2008-08-12 24 views
27

Tengo NET 2.0 Windows Forms aplicación, que hace un uso intensivo del control ListView.error "No se pudo encontrar el tipo de" cargar un formulario en el Diseñador de Windows Forms

He subclasificado la clase ListView en una clase con plantilla SortableListView<T>, por lo que puede ser un poco más inteligente sobre cómo muestra las cosas, y ordenar por sí mismo.

Desafortunadamente esto parece romper el estudio de las formas diseñador visual, tanto en VS2005 y 2008.

El programa compila y funciona muy bien, pero cuando intento ver el formulario de poseer en el diseñador, me sale estos errores:

  • no se pudo encontrar el tipo 'MyApp.Controls.SortableListView'. Asegúrese de que se hace referencia al conjunto que contiene este tipo. Si este tipo es parte de su proyecto de desarrollo, asegúrese de que el proyecto se haya construido correctamente.

No hay seguimiento de la pila o la línea de error información disponible para este error

  • Los listViewImages '' variable es o bien no declarada o nunca fue asignado.

En Línea MyApp.Main.Designer.cs: XYZ Columna: 1

Call stack: 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) 
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

La línea de código en cuestión es allí donde se agrega a la forma, y ​​es

this.imagesTab.Controls.Add(this.listViewImages); 

listViewImages se declara como

private MyApp.Controls.SortableListView<Image> listViewImages; 

y se crea una instancia en la XX e InitializeComponent método de la siguiente manera:

this.listViewImages = new MyApp.Controls.SortableListView<Image>(); 

Como se mencionó anteriormente, el programa compila y funciona perfectamente, y yo he intentado cambiando la clase SortableListView a un montaje separado para que pueda ser compilado por separado, pero esto no hace ninguna diferencia .

No tengo idea de dónde ir desde aquí. ¡Cualquier ayuda sería apreciada!

Respuesta

6

cuando agregó la vista de lista, ¿la agregó a la caja de herramientas y luego la agregó al formulario?

No, sólo editado Main.Designer.cs y lo cambió de System.Windows.Forms.ListView a MyApp.Controls.SortableListView<Image>

Sospechando que podría haber sido debido a los genéricos en realidad me llevó a la búsqueda de una solución.

Para cada clase que tengo que hacer una SortableListView para, que define una 'clase stub' como esto

class ImagesListView : SortableListView<Image> { } 

luego hizo el archivo Main.Designer.cs se refieren a estas clases stub en lugar de la SortableListView.

¡Ahora funciona, hurra!

Afortunadamente, puedo hacer esto porque todos mis tipos se conocen desde el principio, y solo estoy usando el SortableListView como un método para reducir el código duplicado.

+0

Hola Orion ... Tengo el mismo problema que mencionaste anteriormente ... No pude entender la parte "Para cada clase que necesito hacer una SortableListView para, definí una 'clase de stub' como esto clase ImagesListView: SortableListView {} "¿qué hiciste para resolver este problema? ¿Puedes explicarlo con poco detalle? ¿Creó usted otra clase nueva y luego la refirió a designer.cs? –

6

que he tenido un problema como este (aunque no es lo mismo) en el pasado donde mi control estaba en un espacio de nombres diferente a mi forma aunque estaba en el mismo proyecto. Para solucionarlo, tuve que agregar un

using My.Other.Namespace; 

en la parte superior del archivo de código generado por el diseñador. Lo molesto fue que se mantuvo alucinado cuando el diseñador reestructuró la página.

2

El ensamblado que contiene MyApp.Controls.SortableListView no está instalado en la GAC, por casualidad, ¿verdad?

2

cuando agregó la vista de lista, ¿ha agregado a la caja de herramientas y después añadirlo a la forma?

1

Tenía algo similar: un control de usuario se refería a un servicio remoto (que no podía garantizar que estuviera disponible en el momento del diseño).

This post on MSDN sugirió que agrego

if (this.DesignMode) return; 

a la función de carga del control, o en mi caso hasta el punto antes de que se inicializa el cliente WCF. Eso hizo el truco.

Así

private readonly Client _client = new Client(); 

convierte

private Client _client; 

public new void Load() 
{ 
    if(DesignMode) return; 
    _client = new Client(); 
} 
2

Tal vez se le olvidó añadir que:

/// <summary> 
    /// Required designer variable. 
    /// </summary> 
    private System.ComponentModel.IContainer components = null; 

    /// <summary> 
    /// Release all resources used. 
    /// </summary> 
    /// <param name="disposing">true if managed resources should be removed otherwise; false.</param> 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    private void InitializeComponent() 
    { 
     // ... 
     this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use 
     // ... 
    } 
5

tuve este problema también, en relación con la fusión de los cambios masivos SVN (con conflictos) en el archivo * .Designer.cs. La solución fue simplemente abrir la vista de diseño gráficamente, editar un control (moverlo hacia la izquierda y luego hacia la derecha) y volver a guardar el diseño. El archivo * .Designer.cs cambió mágicamente, y la advertencia desapareció en la siguiente compilación.

Para ser claros, primero debe solucionar todos los problemas de combinación de código. Esto es solo un trabajo para forzar a VS a recargarlos.

+3

Esto simplemente no es verdad. Si recibe alguna de estas advertencias, entonces la vista gráfica está rota. No se mostrará nada y no podrás "mover algo para arreglarlo mágicamente". Solo hay una lista de errores y no hay gui ya que la operadora se está quejando. –

+0

No estoy de acuerdo con esto; esto funcionó para mí como un encanto (usando Framework 4.0). Cuando inicialmente se mostraban las advertencias del diseñador durante unos segundos, el formulario se dibujaba correctamente. Agregué un botón, borré el botón y reconstruí la solución; las advertencias desaparecieron todas. –

+0

Dirk: puede pensar que no es cierto, pero esto es lo que me sucedió. Pasé horas tratando de arreglarlo. Desearía seguir teniendo las versiones anterior y posterior del archivo Designer.cs, pero no es así. Claramente hay un error en Visual Studio que no actualiza adecuadamente algunos metadatos internos, y la única forma que encontré para solucionarlo es forzar una actualización volviendo a guardar la vista gráfica. –

-2

¡En mi caso, el problema era el nombre de la carpeta de mi proyecto! Por qué pienso esto: Uso SVN y en el 'trunk \ SGIMovel' funciona perfectamente. Pero en una carpeta de sucursal llamada 'OS # 125 \ SGIMovel' no puedo abrir el diseñador para un formulario que utiliza un control personalizado y funciona en la carpeta troncal.

Acaba de salir del # y funciona bien.

Gracias por nada.

1

Tuve el mismo problema. En mi caso, este problema se debió a la inicialización de los recursos. Moví el siguiente código del método InitializeComponent a ctor (Después de llamar al InitializeComponent).Después de que este problema se resolvió:

this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid)); 
15

Me sucedió a causa de la arquitectura x86/x64.

Dado que Visual Studio (la herramienta de desarrollo en sí) no tiene una versión x64, no es posible cargar el control x64 en el diseñador de la GUI.

El mejor enfoque para esto podría ser ajustar la GUI en x86 y compilarla para x64 cuando sea necesario.

+2

Efectivamente, cambiar mi CPU objetivo a x86 solucionó este problema para mí. ¡Gracias! – johnnyRose

+3

Esta es una BS tan completa en la parte de Microsoft. –

+3

Realmente quiero una versión x64 de Visual Studio. – user2033412

0

He tenido el mismo problema. Después de eliminar algunos de mis controles del archivo * .Designer.cs-File, el problema se solucionó. Después de volver al código original, el problema aún se resolvió. Entonces parece ser un problema con el caché de Visual Sudio. Por el momento no puedo reproducir este problema.

Si usted tiene el problema de tratar de Emtpy la carpeta

C: \ Users \ tunombre \ AppData \ Local \ Microsoft \ VisualStudio \ VERSIÓN \ Designer \ ShadowCache

¿Ha funcionado?

Cuestiones relacionadas