我的 C# Winforms 应用程序有一个始终在顶部的无模式查找对话框。由于用户可以在无模式查找对话框打开时访问父窗口,因此他们也可以选择打开模式对话框。由于无模式对话框始终位于顶部,它会掩盖模式对话框,但此时用户无法关闭无模式对话框,因为模式对话框将用户与所有其他窗口的交互锁定。
目前我正在通过在打开任何模式窗口之前手动添加代码来关闭无模式查找对话框来解决这个问题,我想知道是否有更好的解决方案?
我的 C# Winforms 应用程序有一个始终在顶部的无模式查找对话框。由于用户可以在无模式查找对话框打开时访问父窗口,因此他们也可以选择打开模式对话框。由于无模式对话框始终位于顶部,它会掩盖模式对话框,但此时用户无法关闭无模式对话框,因为模式对话框将用户与所有其他窗口的交互锁定。
目前我正在通过在打开任何模式窗口之前手动添加代码来关闭无模式查找对话框来解决这个问题,我想知道是否有更好的解决方案?
查找对话框是否需要始终位于顶部?如果目的只是让它漂浮在主窗体之上,将主窗体设置为查找对话框的父窗体是否足够?然后它将永远在前面,而不必总是在最前面。
否则,我会让查找对话框听取应用程序中发生的情况并采取相应措施。(这可以通过多种方式解决,从事件到应用程序中所有表单的通用基本表单,再到在系统范围内侦听窗口激活/停用的 CBT-hook。)
如何在调用模态对话框之前使无模式对话框不总是在顶部,然后恢复它?
modeless.TopMost = false;
// show modal dialog here
modeless.TopMost = true;