我有两个表格。(Form1和Form2) Form1_load方法,我调用创建Form2。
但是,Form2 仍位于 Form1 之下。如何在 Form1 之上获取 Form2?我不想将 form2.TopMost 设置为 true,因为它是全屏形式并且会拒绝用户的选项卡。我试过 focus(),它只是不会把 Form2 带到前面。
我不想隐藏 Form1,因为用户可能需要返回它。
我有两个表格。(Form1和Form2) Form1_load方法,我调用创建Form2。
但是,Form2 仍位于 Form1 之下。如何在 Form1 之上获取 Form2?我不想将 form2.TopMost 设置为 true,因为它是全屏形式并且会拒绝用户的选项卡。我试过 focus(),它只是不会把 Form2 带到前面。
我不想隐藏 Form1,因为用户可能需要返回它。
你试过:form2.BringToFront()
?
编辑:
您也可以使用form2.ShowDialog()
,这应该在前面显示表格,而不能集中表格1
您打开第二个表格太早了。窗体的 Load 事件在窗体暴露之前触发,这意味着窗体 2 显示在窗体 1 之前,因此在显示时它被窗体 1 覆盖。
当 Form1 的 Shown 事件被触发时,您可以通过打开 Form2 来获得所需的内容。
你可以使用 SetForegroundWindow(form2.Handle)
你需要这个声明:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
因为您是从 Load 处理程序调用它,所以当 form1 的 Load 之后,form1 被带到顶部时,您可能处于竞争状态。
您可以使用 Form2.ShowDialog() 方法。请记住,在关闭 Form2 之前,这将不允许您返回到 Form 1。如果 Form2 依赖于来自 Form1 的数据,我宁愿使用 ShowDialog() 否则您将不得不使用线程和事件来更新 Form2,具体取决于 Form1 中的事件。