c# - 不守规矩的 child 对话,C# .Net Winforms

标签 c# winforms

我正在将 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/

相关文章:

c# - ASP.NET 文件上传控件允许的最大文件大小

c# - 如何使用 C# 解析文本文件中跨多行的消息?

c# - 将新列添加到 GridView DevExpress

c# - 如何避免通过winform向表中输入重复值?

c# - 单击和鼠标单击有什么区别?

.net - 将 ComboBox 绑定(bind)到 IList 并使用 SelectedValue

c# - 以日期时间格式显示float的方法

c# - 默认情况下 cookie 不安全但在 SSL 中安全

c# - 尝试使用 ZipFile 类时在 System.IO.Compression 上出错

c# - WinForm DataGridView 只有一行,而 DataSource 有两行或更多行