设置OpenFileDialog/SaveFileDialog的起始位置

Mic*_*ens 22 c# multiple-monitors openfiledialog winforms

对于WinForm应用程序中的任何自定义对话框(窗体),我可以在显示它之前设置其大小和位置:

form.StartPosition = FormStartPosition.Manual;
form.DesktopBounds = MyWindowPosition;
Run Code Online (Sandbox Code Playgroud)

在处理多个监视器时,这一点尤为重要.如果没有此类代码,当您从已拖动到第二个监视器的应用程序打开对话框时,对话框将显示在主监视器上.这提供了糟糕的用户体验.

我想知道是否有任何钩子来设置标准.NET OpenFileDialog和SaveFileDialog(没有StartPosition属性)的位置.

Mar*_*ell 6

我怀疑您能做的最好的事情就是确保使用accept an的重载ShowDialogIWin32Window作为父级。这可能有助于它选择合适的位置;最常见的:

using(var dlg = new OpenFileDialog()) {
    .... setup
    if(dlg.ShowDialog(this) == DialogResult.OK) {
        .... use
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这听起来很简单,它必须能够工作(至少必须经过测试)!唉,在这个测试用例中,0-arg 和 1-arg ShowDialog 都以同样的方式失败: 1. 运行应用程序。2. 调用 new OpenFileDialog().ShowDialog(this); 对话框与应用程序出现在同一显示器上。3. 关闭对话框。4. 将应用程序窗口拖至不同的显示器。5. 调用 new OpenFileDialog().ShowDialog(this); 对话框出现在*原始*显示器上。尽管我在步骤 5 中使用了新的 OpenFileDialog,但主应用程序的原始位置仍然存在一些问题。 (3认同)