Trình theo dõi joelonsoftware dài hạn, áp phích xếp chồng lần đầu tiên.Truy cập thuộc tính Văn bản của điều khiển sau biểu mẫu gốc Vứt bỏ() 'd?
Tôi muốn biết "làm thế nào một cách an toàn" Tôi có thể làm như sau (C#):
Form formDlg = new Form();
TextBox box = new TextBox();
formDlg.Controls.Add(box);
formDlg.ShowDialog();
formDlg.Dispose();
string sUserEntered = box.Text; // After parent Dispose'd!
Trong thực tế, điều này (rõ ràng) hoạt động, bởi vì hộp (như là một kiểm soát ) có một riêng văn bản trường (chuỗi) mà nó sử dụng để triển khai thuộc tính Văn bản của nó sau khi xử lý cửa sổ bị hủy.
Tôi sẽ không hài lòng với câu trả lời chung "bạn không thể truy cập một đối tượng sau khi được xử lý" vì (1) Tôi không thể tìm thấy bất kỳ sự cấm chăn nào trong tài liệu MS, (2) Tôi không truy cập tài nguyên không được quản lý và (3) mã này không ném bất kỳ ngoại lệ nào (bao gồm cả ObjectDisposedException).
Tôi muốn thực hiện điều này để tôi có thể tạo và sử dụng phương pháp "ShowAndDispose" kết hợp để giảm nguy cơ quên luôn gọi Dispose() sau ShowDialog().
Để làm phức tạp, thay đổi hành vi trong trình gỡ lỗi. Nếu tôi phá vỡ trước khi Dispose(); sau đó Xem nhanh hộp và đi sâu vào số Kiểm soát lớp cơ sở của nó; sau đó bước qua Dispose(); sau đó box.Text trả về ""! Trong các kịch bản khác box.Text trả về văn bản do người dùng nhập.
Tại sao bạn buộc phải bỏ tiền trên biểu mẫu? Đặc biệt là khi bạn không truy cập tài nguyên không được quản lý. Hãy để khuôn khổ/GC chăm sóc nó. EDIT: Tôi có cảm giác rằng bạn có một tình huống phức tạp hơn nhiều so với mã ở trên. – Zyphrax
Không phải một mình, tại sao truy cập vào một hộp văn bản trên một biểu mẫu được xử lý() ...? Tại sao bạn muốn làm điều đó? Không có ý nghĩa với tôi? Điều đó giống như con trỏ trong C, bạn malloc một con trỏ, làm một số công cụ với nó, sau đó giải phóng nó, sau đó dereference con trỏ sau khi được free'd! – t0mm13b
Zyphrax: Biểu mẫu chứa nhiều tài nguyên không được quản lý, 1 cho mỗi Kiểm soát. –