2011-03-23 12 views
6

Problema: el diseñador de Windows Forms no funciona para un control de usuario heredado cuando la clase base está implementando una interfaz desde otro ensamblado.VS2010: ¿Cómo evitar los problemas de diseñador de Windows Forms cuando se trabaja con controles de usuario heredados?

Plataforma: VS 2010 SP1, .NET 4.0 Marco

error:

The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: MyControl --- The base class 'MyBaseControlLib.MyBaseControl' could not be loaded. Ensure the assembly has been referenced and that all projects have been built.

at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager) at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)

tengo una solución con proyectos de biblioteca de clase 3:

MyInterfaceLib:

namespace MyInterfaceLib 
{ 
    public interface IMyInterface 
    { 
     void Foo(); 
    } 
} 

MyBaseControlLib:

namespace MyBaseControlLib 
{ 
    using System.Windows.Forms; 
    using MyInterfaceLib; 

    public partial class MyBaseControl : UserControl, IMyInterface 
    { 
     public MyBaseControl() 
     { 
      InitializeComponent(); 
     } 

     public void Foo() 
     { 
     } 
    } 
} 

MyDerivedLib:

namespace MyDerivedControlLib 
{ 
    using MyBaseControlLib; 

    public partial class MyControl : MyBaseControl 
    { 
     public MyControl() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

Aunque el diseñador trabaja para MyBaseControl que no funciona para MyControl. Si MyBaseControl no implementa IMyInterface, el diseñador también trabaja para MyControl.

¿Alguna idea?

Gracias, Robert

+0

no es la clave para esto en "La clase base 'MyBaseControlLib.MyBaseControl' no se pudo cargar. Asegúrese de que el montaje se ha hecho referencia y que se han construido todos los proyectos." ..? –

+0

En mi experiencia (limitada), VS simplemente tiene muchos problemas con los controles del usuario y los controles personalizados que viven en la misma solución donde los está consumiendo. Siempre he tenido muchos menos problemas cuando reduzco mi "nivel de ambición de conveniencia" y acepto esto, y creo una solución separada para los controles. Luego, solo hago referencia al archivo DLL de los otros proyectos y uso "rebuid" en lugar de "compilar" si modifico los controles. –

Respuesta

2

Nos tenía el mismo problema. Usamos un workarround creando una clase MyControlDesign heredada por la clase MyControl.

public partial class MyControl : MyControlDesign { 
    public MyControl() 
    { 
     InitializeComponent(); 
    } 
} 

public partial class MyControlDesign : MyBaseControl 
{ 
    public MyControlDesign():base() 
    { 
    } 
} 
Cuestiones relacionadas