Window propietari Form, Form propietari Window

Quan es treballa amb WPF es poden utilitzar les antigues WinForms sense cap problema. Però com ho podem fer per assignar com a propietari d’una finestra window un winform i viceversa? El concepte és utilitzat sense problemes entre objectes de la mateixa classe i assignar propietaris ens és útil per assegurar-nos de que la finestra es tancarà en el moment que es tanqui la principal, és a dir, la responsable de haver obert l’altre.

Detallo a continuació com fer per cada un dels casos.

Un WinForm obre un Window

És dels dos el més senzill. Es tracta d’utilitzar el WindowInteropHelper que es troba dins l’espai de noms System.Window.Interop. Creem una instància de la classe passant per paràmetre la instància de la Window que volem obrir.

Window1 w = new Window1();
System.Windows.Interop.WindowInteropHelper ih=new System.Windows.Interop.WindowInteropHelper(w);

La propietat Owner de la instància WindowInteropHelper i assignem la propietat Handle del WinForms
ih.Owner = Handle;

A partir d’aquest moment ja podem obrir la window
w.Show();

Un Window obre un WinForm

Per mi és el que menys m’agrada però és efectiu i sembla que la única manera de poder-ho fer.
Necessitem utilitzar un mètode de la llibreria User32.dll directament.

[DllImport("user32.dll")]
private static extern int SetWindowLong(HandleRef hWnd, int nIndex, int dwNewLong);

Després podem obrir el WinForm

Form1 f = new Form1();
WindowInteropHelper helper = new WindowInteropHelper(this);
SetWindowLong(new HandleRef(f, f.Handle), -8, helper.Handle.ToInt32());
f.Show();

Anuncis

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

S'està connectant a %s