我正在将 WinForms 用于 C# 项目,我的主窗体有一个简单的按钮,该按钮在第二个窗体上使用 ShowDialog(this) 来显示它。 像这样:
if (myParameterForm.ShowDialog(this) == DialogResult.OK)
{//stuff happens}
根据我的要求,当子表单可见时,您无法访问父表单。
在过去的一年里,这个子表单一直是我的应用程序的祸根,因为它时不时地神秘地隐藏在其父表单后面。这是一个大问题的原因是因为该软件设计为从触摸屏信息亭使用,因此用户只能访问触摸屏,但子表单已锁定除自身之外的任何表单的输入,直到得到确认为止(以“确定”或“取消”关闭)。
加载时,子表单使用“this.TopMost = true”以防万一,我添加它是为了解决我的问题。 我在子窗体上没有使用其他可视化函数,调用窗体的线程实际上会在那里等待,直到窗体关闭。
由于用户无法使用键盘,或者除了触摸屏之外的任何东西,我对子表单如何设法隐藏在父表单后面感到恼火。实际上,我无法复制该行为,并且仅将其视为响应服务请求的结果。
我想避免使用计时器来不断检查表单是否为 TopMost,因为它看起来是错误的。我应该重新考虑吗?可能发生什么事件导致我的 child 被赶出后台?
我已经尝试使用搜索,但据我所知,我做得正确...假设有一些险恶的第 3 方应用程序导致偶尔的狂欢,检测和纠正此问题的最佳方法是什么自动情况而不进行定期检查?我不确定 VisibleChanged 事件是否是我正在寻找的事件。
最佳答案
当使用ShowDialog
显示子窗口时,我可以通过最小化子窗口来重现您所描述的行为。是否有可能有什么东西正在最小化子窗口?您可以尝试禁用子窗口的控制框,看看是否有帮助。我可能还会将子窗口的 ShowInTaskbar 设置为 false(出于可用性原因)。
关于c# - 不守规矩的 child 对话,C# .Net Winforms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916009/