Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何防止ShowDialog从其他应用程序窃取焦点?_.net_Vb.net_Winforms - Fatal编程技术网

.net 如何防止ShowDialog从其他应用程序窃取焦点?

.net 如何防止ShowDialog从其他应用程序窃取焦点?,.net,vb.net,winforms,.net,Vb.net,Winforms,在我的应用程序中,自定义表单的ShowDialog()方法在完成一些工作后被调用。问题是,如果用户在我的应用程序工作时切换到另一个应用程序,对话框会将焦点转移到该应用程序,这可能导致不可预测的行为。预期的行为将是在我的应用程序前景中显示的对话框,但不在另一个应用程序的顶部,并使我的应用程序的任务栏项目闪烁 有没有办法防止ShowDialog()方法窃取焦点?或者我应该使用另一种方法吗?在中,如您所说,您用于显示窗体窃取焦点。并在不窃取焦点的情况下展示。我不确定它在VB.NET中是否相同。您可以设

在我的应用程序中,自定义表单的
ShowDialog()
方法在完成一些工作后被调用。问题是,如果用户在我的应用程序工作时切换到另一个应用程序,对话框会将焦点转移到该应用程序,这可能导致不可预测的行为。预期的行为将是在我的应用程序前景中显示的对话框,但不在另一个应用程序的顶部,并使我的应用程序的任务栏项目闪烁


有没有办法防止
ShowDialog()
方法窃取焦点?或者我应该使用另一种方法吗?

在中,如您所说,您用于显示窗体
窃取焦点。并在不窃取焦点的情况下展示。我不确定它在VB.NET中是否相同。

您可以设置该属性

me.TopMost = false

如果你真的想要这个,你可能必须使用Show。在表格上保留您自己的财产

对话结果


可能会将其默认为cancel,因此如果表单关闭,它将被视为cancel。然后,您只需要在用户单击“确定”时设置它。

使用Form.ShowWithoutActivation属性(在类中重写它以返回true)。这样,您仍然可以使用ShowDialog()


ShowDialog()
以及消息框在出现时接收焦点。您可以考虑使用“<代码>显示())<代码>,并将“<代码> >启用”=“false <代码>”用于后台窗体。我使用返回的ShowDialogResult,所以我需要使用ShowDialog。如果我使用MsgBox,则不会从其他应用程序中窃取焦点。您可以尝试重载形式的
ShowDialog
。它可能会起作用;我还没试过。使用
Show
不会创建模式对话框。不幸的是,它不起作用。我猜这是ShowDialog的预期行为,因为他们希望在用户执行某些操作(例如单击按钮)后调用它。如果没有任何黑客攻击,我想我必须实现一些自定义方法,使用Show()返回DialogResult。我尝试将TopMost设置为false,但ShowDialog方法可能会覆盖此属性。应该相同,这就是我的想法。我使用返回的DialogResult,所以我需要使用ShowDialog而不是Show。DialogResult是来自MessageBox的结果。这就是MessageBox和DialogResult的全部功能: