2010-09-30 7 views
6

Tôi có một biểu mẫu có thành viên triển khai IDisposable nhưng không phải IComponent. Tôi cần phải vứt bỏ nó khi mẫu được giải quyết. Rất tiếc, việc xử lý của biểu mẫu đã được triển khai trong phần được tạo tự động của mã và không phải là một phần.Vứt bỏ một thành phần không khi một biểu mẫu được xử lý?

Tôi có thể xử lý đối tượng này bằng cách nào?

+1

Một chút của một cuộc gọi iffy để đặt nó trong tập tin thiết kế nhưng họ đã muốn để lại một trong những chính sạch. Di chuyển không phải là vấn đề, nhà thiết kế thực sự chỉ quan tâm đến vùng được đánh dấu. Bạn có thể thay đổi mẫu mục để làm cho nó vĩnh viễn, nếu bạn thực sự muốn. –

Trả lời

3

Ghi đè Form.Dispose(bool) trong biểu mẫu của bạn và bỏ đối tượng của bạn ở đó.

Để hiểu cách thức hoạt động, bạn có thể tham khảo trang MSDN trên Implementing a Dispose Method. Lớp Biểu mẫu tuân theo mẫu này, cho phép bạn ghi đè Dispose(bool) trong các lớp con. (Chỉ cần chắc chắn để gọi base.Dispose(disposing) một cách chính xác trong override của bạn, là tốt.)


Nếu bạn không cảm thấy thoải mái di chuyển này từ designer.cs tập tin vào file .cs chính của bạn, tùy chọn khác là để đăng ký sự kiện FormClosed của riêng bạn và xử lý tài nguyên của bạn trong trình xử lý sự kiện đó. MSDN đề xuất phương pháp này - từ tài liệu cho FormClosed:

Bạn có thể sử dụng sự kiện này để thực hiện các tác vụ như được lưu trong biểu mẫu hoặc để cập nhật biểu mẫu gốc.

+1

Trình thiết kế biểu mẫu đã lược bỏ Form.Dispose() cho anh ta. Thật không may nó là một phương pháp được tạo ra (và, như vậy, bạn không nên thêm mã tùy chỉnh vào nó). –

+1

@Justin: Bạn cần di chuyển nó, nếu bạn đang sử dụng nhà thiết kế, vào mã của bạn - nó hoạt động và không được tạo lại. –

+0

@Justin: Tôi vừa thêm một tùy chọn khác (có khả năng tốt hơn) nữa;) –

1

Bạn có thể di chuyển phương thức bị ghi đè Dispose(bool) sang bên cạnh một phần của lớp học. Từ kinh nghiệm, nó không được tái tạo trong phần thiết kế.