C# 将Windows Mobile 6窗体放在前面

C# 将Windows Mobile 6窗体放在前面,c#,winforms,windows-mobile,C#,Winforms,Windows Mobile,我无法将windows mobile 6表单放在前面。 我已经试过了 Form1 testForm = new Form1(); testForm.Show(); testForm.BringToFront(); testForm.Focus(); 但它总是在包含代码的表单后面。 唯一对我有用的是 testForm.TopMost = true; 或隐藏();旧窗体,然后显示新窗体,但我希望避免隐藏另一个窗体。使用多种其他形式时,TopMost也不是很干净 另一个有效的方法是 testFor

我无法将windows mobile 6表单放在前面。 我已经试过了

Form1 testForm = new Form1();
testForm.Show();
testForm.BringToFront();
testForm.Focus();
但它总是在包含代码的表单后面。 唯一对我有用的是

testForm.TopMost = true;
或隐藏();旧窗体,然后显示新窗体,但我希望避免隐藏另一个窗体。使用多种其他形式时,TopMost也不是很干净

另一个有效的方法是

testForm.ShowDialog();
但我不想显示形式模态

简而言之。我只想在另一个窗体前面显示新窗体,如果我关闭它,我想再次看到旧窗体


也许有人能帮我解决这个问题。谢谢。

我没有在WM6中尝试过,但您可以使用一些pinvoke调用Win32函数:

[DllImport("coredll.dll")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("coredll.dll", EntryPoint="SetForegroundWindow")]
private static extern int SetForegroundWindow(IntPtr hWnd);
调用FindWindow获取句柄,然后调用setForeGroundIndow。您可能会发现其他有用的功能:

ShowWindow、bringwindowtop、SetWindowPos

尝试以下操作:

在表单上放置计时器。
将其设置为短刻度,例如100毫秒。
在计时器滴答声事件中
-禁用计时器(使其不再滴答作响),然后
-加载子窗体

此外,您可能还需要查看属性:
当一个窗体被另一个窗体拥有时,它将被最小化并与所有者窗体一起关闭。例如,如果窗体2被窗体1拥有,如果窗体1被关闭或最小化,则窗体2也将被关闭或最小化。拥有的窗体也决不会显示在其所有者窗体的后面。