2012-02-06 29 views
11

Tôi đang kiểm tra nguồn của điều khiển .net được tích hợp cho TabControl và tôi thấy rằng nó tham chiếu thuộc tính này trước khi quyết định có thêm hay chèn TabPage vào bộ sưu tập hay không.Control.IsHandleCreated cần thiết cho điều gì?

if (this.owner.IsHandleCreated) 
{ 
    this.owner.AddTabPage(tabPage, tabPage.GetTCITEM()); 
} 
else 
{ 
    this.owner.Insert(this.owner.TabCount, tabPage); 
} 

Cả hai chức năng cuối cùng là đạt được cùng một mục tiêu - họ thêm TabPage đến cuối của "TabPages" nội bộ bộ sưu tập ... nhưng tôi chỉ không hiểu tại sao nó nên quan trọng mà hoạt động bạn sử dụng.

this đề cập đến ControlCollection ghi đè tích hợp sẵn Control.ControlCollection. owner là TabControl đang sử dụng số ControlCollection.

Trả lời

13

Phương thức AddTabPage của TabControl (phương thức được gọi khi xử lý được tạo) gọi phương thức AddNativeTabPage. Điều đó lần lượt gọi SendMessagePostMessage (hiệu quả, Control.InvokeControl.BeginInvoke) để thêm trang tab. Các phương thức này so sánh việc bổ sung trang tab với luồng giao diện người dùng, để điều khiển được tuân theo nội bộ the rule that you shouldn't interact with UI controls from a background thread.

Điều này thực sự có nghĩa là nếu tay cầm đã được tạo, AddTabPage là an toàn để gọi từ các chủ đề không phải giao diện người dùng (rất khác thường đối với điều khiển giao diện người dùng!). Thật không may, điều này cũng có nghĩa là phương pháp AddTabPage sẽ chặn nếu TabControl chưa có tay cầm, bởi vì sẽ không có thông điệp bơm luồng giao diện người dùng và do đó không nên gọi trừ khi xử lý được tạo.

Đối với những người tò mò, đây là trong lớp TabControl.ControlsCollection, theo phương pháp Add.

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