有没有办法获得 LINQPad 应用程序的 IWin32Window?

Ter*_*rry 2 linqpad

我试图为 WinForm 调用 ShowDialog(创建表单的实际代码位于 .linq 脚本中)并且一切正常,但对话框未在 LINQPad 应用程序中显示为中心。当多个显示器同时运行并且我盯着 LINQPad,运行我的脚本并在不同的显示器上弹出对话框时,这是有问题的。我假设将 IWin32Window 传递给 ShowDialog 将显示以所有者为中心的对话框,但我不知道如何从 LINQPad 获取 IWin32Window...这可能吗?

Cih*_*kar 5

作为对@Albahari 答案的一个小小的贡献:

var dialog = new FolderBrowserDialog();
var handle = Process.GetProcessById(Util.HostProcessID).MainWindowHandle;
var win32Window = new NativeWindow();
win32Window.AssignHandle(handle);
if (dialog.ShowDialog(win32Window) != DialogResult.OK)
{
    "Aborted".Dump();
    return;
}
Run Code Online (Sandbox Code Playgroud)