2011-03-23 25 views
6

Sự cố: Trình thiết kế Windows Forms không hoạt động đối với điều khiển người dùng được kế thừa khi lớp cơ sở đang triển khai giao diện từ một assembly khác.VS2010: Làm thế nào để tránh các vấn đề thiết kế Windows Forms khi làm việc với các điều khiển người dùng kế thừa?

Hệ điều hành: VS 2010 SP1, .NET 4.0 Khung

Lỗi:

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)

tôi có một giải pháp với các dự án thư viện 3 lớp:

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

Mặc dù nhà thiết kế làm việc cho MyBaseControl nó không làm việc cho MyControl. Nếu MyBaseControl không triển khai IMyInterface, trình thiết kế cũng hoạt động cho MyControl.

Bất kỳ ý tưởng nào?

Xin cảm ơn, Robert

+0

Không phải là chìa khóa cho điều này trong "Lớp cơ sở 'MyBaseControlLib.MyBaseControl' không thể tải được. Đảm bảo đã được tham chiếu và tất cả các dự án đã được tạo." ..? –

+0

Trong kinh nghiệm (giới hạn) của tôi, VS chỉ có rất nhiều vấn đề với điều khiển người dùng và điều khiển tùy chỉnh sống trong cùng một giải pháp mà bạn đang sử dụng chúng. Tôi đã luôn luôn có rất ít vấn đề khi tôi chỉ thấp hơn "mức tham vọng tiện lợi" của tôi và chấp nhận điều này, và tạo ra một giải pháp riêng biệt cho các điều khiển. Sau đó, tôi chỉ tham khảo các DLL từ các dự án khác và sử dụng "rebuid" thay vì "xây dựng" nếu tôi đã sửa đổi các điều khiển bản thân. –

Trả lời

2

Chúng tôi có cùng vấn đề. Chúng tôi đã sử dụng một workarround bằng cách tạo một lớp MyControlDesign được thừa hưởng bởi lớp MyControl.

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

public partial class MyControlDesign : MyBaseControl 
{ 
    public MyControlDesign():base() 
    { 
    } 
} 
Các vấn đề liên quan