7

Trong ứng dụng của tôi, tôi có một BaseForm trong đó có một thành viên chung trong đó:Làm thế nào để kế thừa một hình thức chung chung và mở nó trong trình thiết kế Visual Studio?

public partial class BaseForm<T> : Form where T : Presenter 
{ 
    protected T Presenter; 

    public BaseForm() 
    { 
     InitializeComponent(); 
    } 
} 

Bây giờ những gì tôi cần là để có một hình thức được thừa kế từ BaseForm

public partial class SampleForm : BaseForm<SamplePresenter> 
{ 
    public SampleForm() 
    { 
     InitializeComponent(); 
     Presenter = new SamplePresenter(); 
    } 
} 

Vấn đề là tôi mà nhà thiết kế Visual Studio không hiển thị của tôi SampleForm có nguồn gốc từ BaseForm<T>.

Nó cung cấp cho cảnh báo này:

Cảnh báo 1 Các nhà thiết kế không thể hiển thị cho tập tin này vì không ai trong số các lớp bên trong nó có thể được thiết kế. Các nhà thiết kế kiểm tra các lớp sau trong file:

SampleForm --- Các lớp cơ sở 'Invoice.BaseForm' có thể không được nạp. Đảm bảo lắp ráp đã được tham chiếu và tất cả các dự án đã được xây dựng. 0 0

Làm cách nào để khắc phục điều này?

P.S. Tôi đã xem this post nhưng không thực sự có được toàn bộ ý tưởng về cách giải quyết vấn đề này.

Trả lời

10

Các nhà thiết kế không hỗ trợ này, như được mô tả trong bài viết đó.

Bạn cần lớp cơ sở này:

public partial class SampleFormIntermediate : BaseForm<SamplePresenter> 
{ 
    public SampleFormIntermediate() 
    { 
     InitializeComponent(); 
     Presenter = new SamplePresenter(); 
    } 
} 

Và bạn cần phải sử dụng lớp này cho các nhà thiết kế Visual Studio:

public partial class SampleForm : SampleFormIntermediate 
{ 
} 

Bằng cách đó, Visual Studio 'hiểu' được những gì để mở trong nhà thiết kế và cách mở nó.

+0

Không phải là ý tưởng để có thuyết trình khác nhau trong các lớp kế thừa khác nhau. – Magnus

+0

@Magnus: Ops vấn đề tập trung vào những nhà thiết kế tích hợp Visual Studio. Chỉ có bấy nhiêu thôi. Tôi nghĩ rằng đây là những gì nó nên được cho điều đó. –

+0

Cảm ơn, đó là chính xác những gì tôi đang tìm kiếm. Bây giờ tôi chỉ có thể có một gói thử nghiệm nơi tôi có thể mở giao diện người dùng với nhà thiết kế và thực hiện dự án thực tế thông qua Generics. Một lần nữa xin cảm ơn :) – Carmine

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