Search code examples
c#winformsopenfiledialogmultiple-monitors

Setting the start position for OpenFileDialog/SaveFileDialog


For any custom dialog (form) in a WinForm application I can set its size and position before I display it with:

form.StartPosition = FormStartPosition.Manual;
form.DesktopBounds = MyWindowPosition;

This is particularly important when dealing with multiple monitors. Without such code, when you open a dialog from an application that you have dragged to a second monitor, the dialog appears on the primary monitor. This presents a poor user experience.

I am wondering if there are any hooks to set the position for the standard .NET OpenFileDialog and SaveFileDialog (which do not have a StartPosition property).


Solution

  • I suspect that the best you can do is make sure you use the overload of ShowDialog that accepts an IWin32Window to use as the parent. This might help it choose an appropriate location; most commonly:

    using(var dlg = new OpenFileDialog()) {
        .... setup
        if(dlg.ShowDialog(this) == DialogResult.OK) {
            .... use
        }
    }