使用与另一个表单相同的z顺序创建新表单

时间:2009-07-17 14:00:43

标签: windows winforms

Windows Forms,.net 2.0

我的主应用程序线程有一个表单(A)。我有一个后台线程,它操作一个计时器来确定一个活动已经发生 - 当它发生时,它会导致主应用程序表单隐藏(使用BeginInvoke),并在自己的线程中创建一个新表单(B)(单独的消息泵)。

这两个线程听起来很复杂,但不幸的是需要它。

新消息泵上的新表单显示在非最顶层表单的顶部(正如您所期望的那样!)。但是,如果原始应用程序不在桌面上,这非常烦人。

所以,我想在隐藏它之前确定原始形式(A)的z顺序是什么;然后创建我的新表格(B)镜像原始表格的z顺序。

有什么想法吗?

[如果它在当前用户桌面上(即非密码),这也有形式B弹出屏幕保护程序的副作用,如果我无法解决它我想要的方式,我会喜欢避免这种情况...]

2 个答案:

答案 0 :(得分:1)

我通过使用Win32 GetWindow函数解决了这个问题,以确定上一个窗口是针对我的主窗体的。然后当我在第二个线程上创建新表单时,我可以使用SetWindowPos将z-order设置为我在第一步中获得的值。

我还使用nobugz建议来确定应用程序是否是重点应用程序,如果不是,我使用ShowWithoutActivation覆盖来确保我的新表单不会启动

答案 1 :(得分:0)

AFAIK,您可以调用Form.Activate()将其带到前面,但我不知道WinForms中的Windows级别的z顺序。你可能在Win32中有更好的运气。