2011-03-23 14 views
6

Problema: la finestra di progettazione di Windows Form non funziona per un controllo utente ereditato quando la classe base sta implementando un'interfaccia da un altro assembly.VS2010: Come evitare problemi di progettazione di Windows Form quando si lavora con controlli utente ereditati?

Piattaforma: VS 2010 SP1, .NET Framework 4.0

Errore:

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)

ho una soluzione con i progetti di libreria 3 Classe:

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(); 
     } 
    } 
} 

Anche se il progettista lavora per MyBaseControl non funziona per MyControl. Se MyBaseControl non implementa IMyInterface, il designer funziona anche con MyControl.

Qualche idea?

Grazie, Robert

+0

non è la chiave di questo in "La classe di base 'MyBaseControlLib.MyBaseControl' non potrebbe essere caricato. Assicurarsi che il montaggio è stato fatto riferimento e che sono stati costruiti tutti i progetti." ..? –

+0

Nella mia (limitata) esperienza, VS ha solo un sacco di problemi con controlli utente e controlli personalizzati che vivono nella stessa soluzione in cui li stai consumando. Ho sempre avuto meno problemi quando ho abbassato il mio "livello di ambizione di convenienza" e l'ho accettato, e ho creato una soluzione separata per i controlli. Quindi faccio riferimento alla DLL dagli altri progetti e uso "rebuid" piuttosto che "build" se ho modificato i controlli stessi. –

risposta

2

Abbiamo avuto lo stesso problema. Abbiamo utilizzato un workarround creando una classe MyControlDesign ereditata dalla classe MyControl.

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

public partial class MyControlDesign : MyBaseControl 
{ 
    public MyControlDesign():base() 
    { 
    } 
} 
Problemi correlati