2010-01-12 65 views
12

tôi có dự án winforms và tôi đã tạo một lớp học trên assembly A kế thừa từ System.Windows.Forms.Form để làm lớp cơ sở cho các biểu mẫu khác nhau trong dự án của tôi, các lớp cơ sở là một cái gì đó như:Visual Studio 2008 Trình thiết kế Winform không tải Biểu mẫu kế thừa từ lớp chung

public partial class DataForm<T> : Form where T : class 
{ 

    T currentRecord; 

    protected T CurrentRecord 
    { 
     get 
     { 
      return currentRecord; 
     } 
     set 
     { 
      currentRecord = value; 
      CurrentRecordChanged(); 
     } 
    } 
} 

Bây giờ, khi tôi tạo một biểu mẫu trên lắp ráp B được thừa kế từ DataForm tôi thiết kế sẽ không tải, nhưng nếu tôi biên dịch nó ứng dụng chạy tốt.

Hình thức trông giống như:

public partial class SomeTableWindow : DataForm<SomeTable> 
{ 
    public SomeTableWindow() 
    { 
     InitializeComponent(); 
    } 
} 

Các lỗi tôi nhận được là:

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: CultivosWindow --- The base 
class 'TripleH.Erp.Controls.DataForm' could not be loaded. Ensure the assembly has 
been referenced and that all projects have been built.  


Instances of this error (1) 

1. Hide Call Stack 

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 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host) 

Đây có phải là một lỗi trên thiết kế ?, Tôi có làm điều gì sai? Có cách giải quyết nào không?

Cảm ơn sự giúp đỡ của bạn

Trả lời

16

Đó là giới hạn đã biết. Về cơ bản bạn có thể làm việc xung quanh điều này bằng cách khai báo một lớp khác thừa kế từ lớp chung.

Ví dụ:

class Generic<T> : UserControl 
{ 
} 

sau đó

class GenericInt : Generic<int> { } 

sau đó sử dụng GenericInt thay vì Chung. SUcks tôi biết.

+0

Cảm ơn bạn rất nhiều, bạn đã đúng. – albertein

+0

Tôi có thể xác nhận rằng cách giải quyết này hoạt động. Và nó hoạt động cho dù bạn đặt lớp trung gian (ví dụ: GenericInt) trong assembly ** A ** hoặc assembly ** B **. –

Các vấn đề liên quan