9 Stimmen

Unterschied zwischen der .Owner-Eigenschaft und ShowDialog(IWin32Window owner)?

Ich nehme an, dass ein WinForms-Besitzer entweder explizit über die .Owner-Eigenschaft oder durch Übergeben des Besitzers in der überladenen Methode ShowDialog(IWin32Window owner) festgelegt werden kann

Ich verstehe nicht, warum diese Methoden unterschiedliches Verhalten zeigen, wenn sie mit MDI-Formularen arbeiten.

Ich habe ein MDIParent und ein MDIChild erstellt.

Ich habe auch ein einfaches WinForms-Dialogfeld namens MyDialogBox erstellt, das seinen Besitzer beim Laden anzeigt.

MessageBox.Show("Der Besitzer des Dialogfelds ist " + this.Owner.Name);

Methode A - Im Ladevorgang von MDIChild habe ich den folgenden Code, der dazu führt, dass der Besitzer von MyDialogBox auf MDIChild gesetzt wird

MyDialogBox box = new MyDialogBox();
box.Owner = this; // Setze den Besitzer als MDIChild
box.ShowDialog();

Methode B - Alternativ habe ich im Laden der Methode von MDIChild den folgenden Code, der dazu führt, dass der Besitzer von MyDialogBox auf MDIParent gesetzt wird

MyDialogBox box = new MyDialogBox();
box.ShowDialog(this); // Übergib MyMDIChild als Besitzer

Ich habe auch folgendes hier gelesen

Nur das MDI-Elternformular kann ein anderes Formular besitzen, sei es ein MDI-Kind, ein modaler Dialog oder ein Formular, bei dem das Elternformular als Owner-Parameter festgelegt wurde.

Wenn dem so ist, sollte Methode A überhaupt nicht funktionieren, oder?

Was übersehe ich? Warum setzt Methode B den Besitzer nicht auf MDIChild?

4voto

SaguiItay Punkte 2106

Beim Betrachten der Unterschiede dieser 2 Optionen mit Reflector scheint es, dass sie eine etwas unterschiedliche Implementierung haben: box.Owner = this weist einfach den bereitgestellten Wert von this dem internen Owner-Feld zu. Jedoch, beim Aufruf von ShowDialog(IWin32Window), wird vor der Zuweisung des Werts der folgende Aufruf ausgeführt:

owner = ((Control) owner).TopLevelControlInternal;

Dies könnte zur Zuweisung des MDIParent führen.

(Hinweis: Ich bin alles andere als ein Experte in Bezug auf MDI, daher könnte ich mich hier irren).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X