Note that there are some explanatory texts on larger screens.

plurals
  1. POCan I get the behavior of setting my WinForms form's owner using an hwnd / NativeWindow?
    text
    copied!<p>My application is a vb6 executable, but some newer forms in the system are written in C#. I would like to be able to set the C# form's Owner property using a handle to the main application window, so that the dialogs remain on top when tabbing back and forth between my app and other apps.</p> <p>I can get the hwnd of the main application window. I'm not sure what I can do from there?</p> <hr> <p><strong>UPDATE Oct 20 '08 at 17:06:</strong> </p> <p>Scott,</p> <p>Thanks for the response. I had overlooked that the Show/ShowDialog method parameter was not of type Form - I was looking only at the Owner property.</p> <p>I slightly modified the code I'm using from the above - we have a component that generically loads our Forms and calls ShowDialog. My code looks like this:</p> <pre><code>Form launchTarget = FormFactory.GetForm(xxx); // psuedo-code for generic form loader launchTarget.StartPosition = FormStartPosition.CenterParent; IWin32Window parentWindow = GetWindowFromHwnd(hwnd); launchTarget.ShowDialog(parentWindow); </code></pre> <p><code>GetWindowFromHwnd</code> is a method-wrapped version of your code:</p> <pre><code>private IWin32Window GetWindowFromHost(int hwnd) { IWin32Window window = null; IntPtr handle = new IntPtr(hwnd); try { NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle(handle); window = nativeWindow; } finally { handle = IntPtr.Zero; } return window; } </code></pre> <p>Unfortunately this isn't doing what I'd hoped. The form does display modally, but it's not showing up in the correct position nor is it still on top when I tab away and back to the parent window. Our modals do not show a task in the taskbar, so the window seemingly "disappears" (although it is still present in the alt-tab window list). That to me indicates I might not have the right hwnd. If you have any other suggestions though, please reply back. Thanks again.</p> <hr> <p><strong>UPDATE Nov 10 '08 at 16:25</strong> </p> <p>One follow up remark - If you factor it out into a method call in a try/finally, as in Scott's 2nd post, the call in the finally block should be:</p> <pre><code>parentWindow.ReleaseHandle(); </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload