2012-01-24 24 views
8

Để vô hiệu hóa trình thiết kế thành phần trong các lớp, bạn chỉ cần thêm thuộc tính [System.ComponentModel.DesignerCategory ("")] vào nó, tuy nhiên nó không hoạt động đối với bất kỳ lớp nào bắt nguồn từ lớp này trong bất kỳ thế hệ nào. Ví dụ:Cách tắt trình thiết kế trong các lớp dẫn xuất trong các thế hệ sau

[System.ComponentModel.DesignerCategory("")] 
public class A:ServiceBase { } //Designer is disabled here 

public class B:A {} //Designer is enabled here 

[System.ComponentModel.DesignerCategory("")] 
public class B:A {} //Designer is enabled here too 

[System.ComponentModel.DesignerCategory("Code")] 
public class B:A {} //Designer is enabled even here 

Điều này xảy ra, tất nhiên, trong bất kỳ thế hệ và hoán vị nào khác. Ví dụ.

//Whatever attribute here 
public class C:B {} //Designer is enabled here 

Có ai đã từng loại bỏ nó không? Tại sao mô hình thành phần cố gắng thêm hỗ trợ thiết kế ngay cả khi nó bị vô hiệu hóa một cách rõ ràng trong thế hệ đầu tiên?

Cảm ơn bạn

+0

Nó không rõ ràng chính xác trong đó hội đồng những lớp này sống và có hay không chúng là một phần của giải pháp. Cài đặt AutoPopulate của hộp công cụ được ưu tiên. –

+0

điều này không được đề cập. hoặc các lớp cơ sở và các lớp dẫn xuất trong cùng một assembly hoặc chúng nằm trong các assembly khác nhau là giống nhau (chỉ có lớp cơ sở [trực tiếp bắt nguồn từ ServiceBase] không có thiết kế) – Tamir

Trả lời

7

Lý do cho hành vi đó là bộ nhớ tham chiếu được lưu trong bộ nhớ cache. Để giải quyết nó, loại bỏ tham chiếu đến assembly chứa máy chủ cơ sở với thuộc tính và thêm nó một lần nữa. Trong trường hợp này, Visual Studio xây dựng lại dự án và sẽ không định nghĩa trình soạn thảo mặc định cho lớp bị loại bỏ.

+2

Tôi có cùng một vấn đề, và điều này làm việc cho tôi. Lớp cơ sở của tôi có nguồn gốc từ 'System.ComponentModel.Component' và tôi đã phải loại bỏ tham chiếu đến' System', và sau đó thêm nó lại. Tất cả các lớp dẫn xuất bây giờ mở với trình soạn thảo mã theo mặc định. Cảm ơn! – Ove

+0

đó là mẹo! Cảm ơn! –

0

"Thuộc tính thừa kế" lúc đầu đã đánh tôi là lẻ, vì tôi luôn nghĩ rằng các thuộc tính không được kế thừa; sau khi kiểm tra docs.microsoft.com tôi phát hiện ra rằng đó không phải là trường hợp - thuộc tính có thể có Inherited = true, vì vậy nhờ bạn đã giúp tôi mở rộng kiến ​​thức của tôi :-)

Ngoài ra, tôi cũng đã phải gỡ bỏ một loạt các <SubType>Component</SubType> các mục từ tệp .csproj

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