2008-12-27 16 views
9

Tôi đoán chủ sở hữu của một Winform thể được thiết lập một cách rõ ràng qua các tài sản .Owner HOẶC bằng cách thông qua các chủ sở hữu trong các phương pháp quá tải ShowDialog (IWin32Window chủ sở hữu)Sự khác biệt giữa tài sản .Người sở hữu và ShowDialog (chủ sở hữu IWin32Window)?

Tôi không thể hiểu tại sao các phương pháp hiện hành vi khác nhau khi làm việc với mẫu MDI.

Tôi đã tạo MDIParent và MDIChild.

Tôi cũng có một MyDialogBox winform đơn giản hiển thị chủ sở hữu của nó khi đang tải.

MessageBox.Show("Dialog's owner is " + this.Owner.Name); 

Phương pháp A - Trong tải của MDIChild Tôi đã đoạn mã sau, khiến chủ sở hữu của MyDialogBox được thiết lập để MDIChild

MyDialogBox box = new MyDialogBox(); 
box.Owner = this; // Set owner as MDIChild 
box.ShowDialog(); 

Phương pháp B - Ngoài ra, trong phương thức tải MDIChild tôi đã đoạn mã sau, khiến chủ sở hữu của MyDialogBox được thiết lập để MDIParent

MyDialogBox box = new MyDialogBox(); 
box.ShowDialog(this); // Pass MyMDIChild as owner 

Tôi cũng đọc sau đây here

Chỉ có biểu mẫu MDI có thể sở hữu một biểu mẫu khác, có thể là con MDI, hộp thoại phương thức hoặc biểu mẫu mà cha mẹ được đặt làm thông số Chủ sở hữu.

Nếu vậy Phương pháp A không hoạt động, phải không?

Tôi đang thiếu gì? Tại sao phương pháp B không đặt chủ sở hữu thành MDIChild?

+0

Hãy thử làm điều này trong VB6 và xem liệu nó có khớp với liên kết bạn cung cấp hay không. Nếu có, tôi đoán - framework có lỗi. – shahkalpesh

+0

Không chắc chắn về VB6 nhưng VB.NET có vẻ hoạt động giống như C# – Preets

Trả lời

4

Nhìn vào sự khác biệt của 2 tùy chọn này bằng Reflector, có vẻ như chúng có triển khai hơi khác: box.Owner = this chỉ gán giá trị được cung cấp cho trường chủ sở hữu nội bộ. Tuy nhiên, khi gọi ShowDialog(IWin32Window), việc thực hiện thực hiện cuộc gọi sau đây, trước khi gán giá trị:

owner = ((Control) owner).TopLevelControlInternal; 

này có thể dẫn đến phân công của MDIParent.

(Lưu ý: Tôi sắp trở thành chuyên gia về MDI, vì vậy tôi có thể sai ở đây).

+2

Thú vị. Tại sao MS muốn hai người cư xử khác nhau làm tôi kinh ngạc. – Preets

+0

Có thực sự lạ. Tôi không thấy lý do tại sao bạn muốn đặt chủ sở hữu không phải là phụ huynh MDI. Ý tưởng là khi người dùng nhấp vào biểu mẫu MDI, hộp thoại phương thức sẽ được hiển thị phía trước nhất. Nếu không nó sẽ có vẻ như là nếu cha mẹ MDI bị khóa/bị rơi. – Marc