C# 屏幕焦点与谁';它在上面

C# 屏幕焦点与谁';它在上面,c#,winforms,focus,C#,Winforms,Focus,我有一个.net 4 WinForms应用程序。主屏幕显示通过轮询WCF服务或用户手动输入检索的作业列表 用户还可以查看与作业相关的各种表单、执行者、作业位置等 然而,当这些表单出现在主屏幕上时,它们会间歇性地消失在主屏幕后面。我认为这是因为轮询刷新了主屏幕的作业列表,并为其提供了焦点 我最初通过为所有“子”表单设置TopMost=true来解决这个问题,但当我发现它甚至将InputDialogs发送到了后面时,我开始认为我的做法是错误的 有没有其他方法可以阻止主屏幕向前推?我被告知不要将MDI

我有一个.net 4 WinForms应用程序。主屏幕显示通过轮询WCF服务或用户手动输入检索的作业列表

用户还可以查看与作业相关的各种表单、执行者、作业位置等

然而,当这些表单出现在主屏幕上时,它们会间歇性地消失在主屏幕后面。我认为这是因为轮询刷新了主屏幕的作业列表,并为其提供了焦点

我最初通过为所有“子”表单设置TopMost=true来解决这个问题,但当我发现它甚至将InputDialogs发送到了后面时,我开始认为我的做法是错误的

有没有其他方法可以阻止主屏幕向前推?我被告知不要将MDI用于此应用程序,因此这不是一个选项。

您需要设置。或者当您当时将表单传递到父表单时

从以上链接:

拥有的表单也不会显示在其所有者表单后面。您可以为窗口使用自有窗体,如查找和替换窗口,当选择所有者窗体时,这些窗体不应消失。要确定父窗体拥有的窗体,请使用OwnedForms属性


你能分享你用来显示子窗口的代码吗?刷新控件并不要求焦点,那么你对轮询结果做什么呢?谢谢!表单现在显示的很好,但是输入框仍然在后面弹出。我想我得自己写了。@SteveCav你用的是标准输入框吗?如果是这样,它应该是创建表单的模态。从Winforms使用Microsoft.VisualBasic.Interaction.InputBox不是模态,可能是因为它是从控制器类调用的。我推出了自己的,设置了所有者和最顶级的属性,并以这种方式解决了它。@SteveCav好的,很高兴你找到了答案