2012-05-23 145 views
2

我有两个窗体。 (Form1和Form2) Form1_load方法,我打电话来创建Form2。C#窗体奇怪行为

但是,Form2仍在Form1下。如何在Form1上获取Form2? 我不想将form2.TopMost设置为true,因为它是全屏幕形式,并会拒绝用户的Tab键。我试过focus(),它不会将Form2带到前面。

我不想隐藏Form1,因为用户可能需要回退它。

+1

'TopMost'属性将使窗体顶部的所有其他窗口!否则使用'form2.BringToFront()' – Writwick

回答

1

你打开你的第二个表格太早。表单的Load事件在表单显示之前触发,这意味着表单2显示在Form1之前,因此它在Form1显示时被Form1覆盖。

当Form1的Shown事件被激发时,您可以通过打开Form2来获得想要的内容。

4

您是否试过:form2.BringToFront()
编辑:
您还可以使用form2.ShowDialog(),这应该在面前表现的形式不可能性重点Form1中

+0

虽然我已经尝试过,但这是行不通的。请参阅下面的接受答案和解释。 – humansg

0

你可以使用SetForegroundWindow(form2.Handle)

你需要这样的声明:

[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SetForegroundWindow(IntPtr hWnd); 

因为您从Load处理程序中调用此函数,您可能会在Form1的Load之后处于竞争状态,因此form1会被置顶。

+0

是的,正是我认为他们处于竞赛状态。答案是当form1完成显示时加载form2。 – humansg

0

您可以使用Form2.ShowDialog()方法。请记住,这将不允许您退回到表格1,直到您关闭Form2。如果Form2依赖于来自Form1的数据,我宁愿使用ShowDialog(),否则您将不得不使用线程和事件来根据Form1中的事件更新Form2。

+0

这不起作用。因为我仍然需要访问form1。 – humansg