繁体   English   中英

使用Windows表单阻止用户-C#

[英]Block User using Windows forms - c#

我正在使用C#在Windows应用程序中工作。 我的申请共有5种形式。 我的程序控制所有5种形式来阻止用户,因为它们基于我的程序收到的UDP消息而被调用的原因不同。 一次只启用一种表单。 我想要所有形式的行为,例如“它应该阻止整个屏幕,并且用户在我的程序收到特定的UDP消息之前,不能通过表单”。 [这是Kiosk应用程序,用户无法使用Alt + Tab和任务管理器]

问题是,某些处于全屏模式的应用程序parrelley迫使我的表单落后。 事实并非如此。

我尝试使用SetWindowPos函数,但没有帮助。

还有另一种方法吗?

是的,如果禁用所有窗口,则这是预期的行为。 Windows将寻找另一个将焦点设置到的窗口,并且它将在必要时选择另一个应用程序的窗口,并将该窗口设置为前景窗口。 您的窗户将消失在它的后面。

将窗体的TopMost属性设置为True并不是真正的解决方法,如果另一个应用程序的窗口也位于最顶部,您仍然会迷失方向。 真正的解决方法是不要将窗体的Enable属性设置为False,而是禁用该窗体上的控件。 最简单的方法是在该表单上放置一个面板并将所有控件移入该表单。 将其Dock属性设置为Fill。 将面板的Enable属性设置为False,所有控件也将被禁用。 但不是窗户。

顺便说一句:不要对重要消息使用UDP。

您可能需要研究WinAPI来控制所有其他窗口。 当您的程序需要放在最前面时,您可能需要捕获所有系统键盘事件,同时还要枚举打开的窗口并将其最小化。

如果这些必需的功能在本机.Net库中可用,我会感到惊讶,因此将需要一个api参考。

也许您可以使用一个表格来表示诸如“ Waiting for X”之类的内容,或者诸如没有关闭按钮之类的内容,并且在需要时作为应用程序模式对话框弹出,这样可以避免应用程序的所有窗口都出现问题禁用,同时向用户反馈为什么他无能为力的反馈

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM