没有切换功能的Messagebox对话框

时间:2011-01-04 05:25:00

标签: c#

如何显示不允许用户切换到另一个窗口的消息框对话框,只要该对话框未关闭,如使用VB.NET或C#windows应用程序在Windows XP中关闭对话框

2 个答案:

答案 0 :(得分:2)

即使从系统模式消息框中也无法轻易阻止与其他应用程序的交互。

一个选项是使用WS_EX_TOPMOST窗口样式在消息框后面显示一个大透明窗口。这样看起来其他窗口是交互式的,但点击会改为透明窗口。

虽然您无法阻止Control + Alt + Delete,但您必须采取额外措施来阻止Alt + Tab等。其他最顶级的窗户仍然可以争夺顶级。

换句话说,这是一种痛苦,有充分的理由。正如Raymond Chen所说,你可能拥有世界上最强大和最重要的应用程序,但如果它很容易,那么所有其他不像你的应用程序那么棒和重要的应用程序就可以滥用它。 / p>

答案 1 :(得分:2)

您正在寻找的是一个系统模式对话框。这与更典型的应用程序模式对话框形成对比,后者仅阻止用户在您的应用程序中执行任何其他操作,直到它们关闭对话框。系统模式对话框将此禁止扩展到整个系统,并阻止用户使用计算机执行任何其他操作,直到他们解除对话框为止。

这在16位Windows(版本3.x及更早版本)下是可行的,但是当32位Windows滚动到场景时此功能被删除(早在Windows 95和NT) 3.5)。据推测,有一些模糊的技术原因使得这种功能现在被应用程序员拒绝,但它的缺失也意味着开发人员普遍滥用此功能,他们认为他们的应用程序是用户可能可能的唯一重要事项在他们的电脑上做。 (其中一些“模糊的技术性原因”与更多支持多任务处理和“一个程序 - 一个焦点”范例的过时相关。)

Raymond Chen在forum post made to this thread

中明确回答了这个问题
  

Win32不再具有系统模式对话框。所有对话框都是其所有者的模态。

如果你现在要模拟这样的功能(并且强烈建议你这样做,因为它以前不是很好的编程习惯,现在对用户来说特别陌生),你'我必须依靠黑客。这意味着您的解决方案不会万无一失,并且可以被知识渊博或经验丰富的用户轻松绕过。

我的建议是认真重新考虑您需要阻止用户切换到另一个应用程序,同时在您的应用程序中显示一个对话框。系统模式对话框与当今的现代多任务环境相矛盾,并且只有极其有限的环境才有意义。大多数情况仅限于操作系统(示例中的关闭对话框,UAC提示来自Windows Vista / 7),而不是单个应用程序。看看你是否不能满足于预期的和用户恶意的应用程序模式对话框,你可以使用ShowDialog method在C#和VB.NET中轻松获得。