我正在尝试为WinForm调用ShowDialog(用于创建表单的实际代码位于.linq脚本中),并且一切正常,但是对话框未在LINQPad应用程序中居中显示。当正在使用多个监视器并且我盯着LINQPad,运行我的脚本并且在其他监视器上弹出对话框时,这是有问题的。我假设将IWin32Window传递给ShowDialog将以所有者为中心显示对话框,但是我不知道如何从LINQPad获取IWin32Window ...甚至可能吗?
尝试为表单提供父项时将面临的困难是,查询在与LINQPad.exe不同的过程中运行。
您可以使用LINQPad.Util.HostProcessID
获取LINQPad的进程ID,然后Process.GetProcessById (Util.HostProcessID).MainWindowHandle
获取Windows句柄,但是这样您仍然无法为您的表单提供父项。最好的办法是调用Win32函数,例如GetWindowRect
获取LINQPad的主窗口位置,然后手动将窗体居中。
您是否考虑过仅转储所需的控件,而不是对此一无所知?LINQPad随后将在输出窗格中呈现它并启动消息循环。例如:
var panel = new Panel { Padding = new Padding(10) };
panel.Controls.Add (new TextBox { Dock = DockStyle.Top });
panel.Controls.Add (new Label { Dock = DockStyle.Top, AutoSize=true, Text="Testing" });
panel.Dump();
请注意,您随后从控件上的事件处理程序中显示的任何形式都将以父级为中心:
panel.Controls[1].Click += (sender, args) =>
new Form { StartPosition = FormStartPosition.CenterParent }.ShowDialog();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句